Skip to main content

Vendor updated

Fires when an existing vendor master record is modified and saved in Dynamics 365 Finance and Operations. This captures the business moment where vendor master data changes, for example a vendor group or default currency update, so downstream systems can keep their vendor records in sync.

Event classMGCLatticeVendorUpdatedBusinessEvent
Contract classMGCLatticeVendorUpdatedBusinessEventContract
CategoryAccounts payable
ModuleModuleAxapta::Vendor
Label IDsVendorUpdatedBusinessEventName / VendorUpdatedBusinessEventDescription
TriggerVendTable.update(boolean, boolean) -> after every vendor record update

Trigger / Hook​

  • Extension class: MGCLatticeVendTable_Table_Extension, [ExtensionOf(tableStr(VendTable))]
  • CoC method signature: void update(boolean _updateSmmBusRelTable, boolean _updateParty)
  • Firing condition: after next update(_updateSmmBusRelTable, _updateParty) completes, the event sends whenever it is enabled. There is no orig() field-change guard or type filter: every successful VendTable update fires the event, from any source (the Vendors page, data entities and integrations, or X++ logic), even when no value in the payload changed. The payload carries the vendor's current values only, not which fields changed; compare with your own copy if you need the delta.
  • A save that changes Vendor hold also raises Vendor hold status changed. That event is sent from inside update(), so it arrives first (lower eventSequence) and this event follows.
  • Updates that bypass the table's update() method (doUpdate(), or set-based updates with data methods skipped) do not raise it.
  • Timing: the event is sent inside the vendor update transaction. send() writes it to the business events commit log in that transaction and it is delivered after commit, so an update that rolls back never delivers the event.
  • Enablement gate: BusinessEventsConfigurationReader::isBusinessEventEnabled(classStr(MGCLatticeVendorUpdatedBusinessEvent))
void update(boolean _updateSmmBusRelTable, boolean _updateParty)
{
next update(_updateSmmBusRelTable, _updateParty);
if (BusinessEventsConfigurationReader::isBusinessEventEnabled(classStr(MGCLatticeVendorUpdatedBusinessEvent)))
{
MGCLatticeVendorUpdatedBusinessEvent::newFromVendTable(this).send();
}
}

Payload Contract​

One row per [DataMember], in declaration order (sourced from MGCLatticeVendorUpdatedBusinessEventContract.initialize(VendTable)):

JSON fieldDisplay labelType / EDTSourceNotes
legalEntityLegal EntityDataAreaId_vendTable.DataAreaIdCompany ID of the vendor record, in lower case (for example usmf)
vendorAccountVendor AccountVendAccount_vendTable.AccountNumVendor account number
vendorNameVendor Namestr_vendTable.name()Display method on VendTable resolving the party name
vendorGroupVendor GroupVendGroupId_vendTable.VendGroupVendor group identifier
currencyCodeCurrency CodeCurrencyCode_vendTable.CurrencyVendor default currency
crossReferencesCross referencesList of MGCLatticeCrossReferenceEventContractMGCLatticeCrossReferenceEventHelper::listFor(VendTable)Keys external systems hold for the vendor: one { externalSystem, externalKey } object per external system, ordered by external system, historical keys included; [] when it has none. See Cross-reference keys.

Every Lattice event also carries the Lattice ordering and correlation envelope, inherited from MGCLatticeBusinessEventContractBase: eventSequence (Int64 - increasing across the whole catalog and all companies, allocated when the event is raised; it orders the events of one record, gaps are normal and permanent, see the README), correlationId (String - always Scope:Key; groups emissions that belong to one logical run and defaults to Event: plus a GUID unique to this emission) and schemaVersion (Int - the payload shape version; 1 for this contract). D365 F&O also adds its standard envelope fields to every business event payload: BusinessEventId, BusinessEventLegalEntity, ContextRecordSubject, ControlNumber, EventId, EventTime, EventTimeIso8601, InitiatingUserAADObjectId, MajorVersion, MinorVersion, and ParentContextRecordSubjects. Do not rely on the order of members in the delivered JSON.

This event does not join a run: correlationId is unique to each emission.

Example Payload​

{
"BusinessEventId": "MGCLatticeVendorUpdatedBusinessEvent",
"ControlNumber": 587341,
"EventId": "9F3C2A1B-6D44-4F8E-BF17-2A91C0E4D8B2",
"EventTime": "\/Date(1790250483000)\/",
"EventTimeIso8601": "2026-09-24T11:48:03.2252238Z",
"MajorVersion": 0,
"MinorVersion": 0,
"BusinessEventLegalEntity": "USMF",
"ContextRecordSubject": "",
"InitiatingUserAADObjectId": "{1CB156FF-80A3-C7E1-1CF5-33E3BABEB4F0}",
"ParentContextRecordSubjects": [],
"eventSequence": 48403,
"correlationId": "Event:6c1f9e3a-5b27-4d80-a94e-0f3b8d2c7e16",
"schemaVersion": 1,
"legalEntity": "usmf",
"vendorAccount": "US-104",
"vendorName": "Fabrikam Supplier",
"vendorGroup": "10",
"currencyCode": "USD",
"crossReferences": [
{
"externalSystem": "LEGACYERP",
"externalKey": "V-20417"
}
]
}

Activation​

In the D365FO client, go to System administration > Setup > Business events > Business events catalog. Find the event by name ("Vendor updated") or by filtering the Category column to Accounts payable. Select it and choose Activate, then bind it to your target endpoint (for example an Azure Service Bus queue, Event Grid topic, or HTTPS webhook).