Field Propagation Pre-Commit Checklist
Run this checklist before committing any field propagation implementation.
Step 1 — Pattern Decision
- I opened the posting codeunit and searched for
TransferFieldsbetween the source record and the posted record. - I have confirmed: Pattern A (TransferFields found) or Pattern B (no TransferFields).
Step 2 — Field Identity (both patterns)
- Source TableExt uses the same Field ID as every target TableExt.
- Source TableExt uses the same Field Name as every target TableExt.
- Source TableExt uses the same Field Type as every target TableExt.
-
Captionis set (English + translated) on all TableExts. - No
ValidateTableRelationissues on posted tables (set tofalseif the relation does not exist on the posted table).
Step 3 — Pattern A only
- I added the field to the source TableExt.
- I added the field (same ID/name/type) to all relevant target TableExts (posted, archive, return).
- I verified that no existing EventSubscriber manually copies this field (would be redundant — delete it).
- I validated with a test posting that the field value appears on the posted document.
Step 4 — Pattern B only
- I added the field to the source TableExt.
- I added the field (same ID/name/type) to all relevant target TableExts.
- I created (or extended) one dedicated EventSubscriber codeunit for the module/posting chain.
- The subscriber codeunit contains subscribers for ALL target tables of this posting chain — not scattered across multiple codeunits.
- I selected the correct event from
references/pattern-b-event-map.md. - The subscriber is
local procedurewith the correct parameter signature. -
SkipOnMissingLicenseandSkipOnMissingPermissionare set tofalse(default) unless there is a specific reason. - I validated with a test posting that the field value appears on the posted entry.
Step 5 — Both patterns
-
DataClassificationis set on all new fields (useCustomerContentif the field holds business data). - No
Editable = falseon source TableExt fields that the user must fill in. - FlowFields and FlowFilters are NOT expected to transfer — I added
CalcFieldswhere the value is needed. - I confirmed the field does not appear in any
Modify(false)context that would prevent the assignment from being persisted. - Permission set is updated to include new tables or any new codeunit.
- The new codeunit (Pattern B) is registered in the permission set with Execute permission.
Step 6 — Anti-Pattern Check
- I searched for any existing subscriber that copies this field manually. If found and Pattern A applies, I removed the subscriber.
- The subscriber codeunit (Pattern B) does not mix subscribers from different posting chains.
- I did not create a new subscriber for a field that
TransferFieldsalready handles.