Stammdaten-Synchronisierung
Das Modul ou.sp.dynamics.DynamicsBcConnectorMasterData stellt das masterDataMapping und das EntityName-Enum bereit, mit denen Stammdaten aus BC in die lokale Datenbank synchronisiert werden können.
Die eigentliche Synchronisierung erfolgt über die Methoden processEntities und processSingleEntity der DynamicsBcConnector-Klasse.
EntityName
Das Enum benennt alle unterstützten Stammdatenkategorien:
| Wert | Beschreibung |
|---|---|
EntityName.Vendor | Lieferanten (brz_firminformation) |
EntityName.VendorAccount | Bankverbindungen (brz_firmbankinformation) |
EntityName.VatCode | Steuerschlüssel (brz_accounting_vatrate) |
EntityName.PaymentTerm | Zahlungsbedingungen (brz_firmpaymentpractise) |
EntityName.ImpersonalAccount | Sachkonten (brz_accounting_glaccount) |
EntityName.CostCenter | Kostenstellen (brz_responsibilityCenter) |
EntityName.CostUnit | Kostenträger / Dimensionswerte (brz_NAVDimensionValues) |
processEntities
Synchronisiert alle Datensätze einer Entitätskategorie für einen Empfänger vollständig.
Siehe DynamicsBcConnector#processEntities in der API-Referenz.
Beispiel
context.enableModules();
const { DynamicsBcConnector } = require("ou.sp.dynamics.DynamicsBcConnector");
const { EntityName } = require("ou.sp.dynamics.DynamicsBcConnectorMasterData");
const { getDatabaseConnectionAndProviderOrThrow } = require("ou.sp.library.dbConnections");
const connector = new DynamicsBcConnector({
tenantId: util.getEnvironment("BC_TENANT_ID"),
environment: util.getEnvironment("BC_ENVIRONMENT"),
clientId: util.getEnvironment("BC_CLIENT_ID"),
clientSecret: util.getEnvironment("BC_CLIENT_SECRET"),
});
const dbConfig = getDatabaseConnectionAndProviderOrThrow("ptpData");
const companyId = "987e3574-6a7b-4a97-b0c9-77740fb3f9bb";
// Lieferanten vollständig neu synchronisieren
const count = connector.processEntities({
companyId,
entityName: EntityName.Vendor,
recipient: "R0100",
dbConfig,
clear: true,
});
processSingleEntity
Synchronisiert einen einzelnen Datensatz anhand seiner BC-ID.
Siehe DynamicsBcConnector#processSingleEntity in der API-Referenz.
Beispiel
// Einzelnen Lieferanten aktualisieren
const updated = connector.processSingleEntity({
companyId,
entityName: EntityName.Vendor,
recipient: "R0100",
dbConfig,
id: "V001",
});
Beispiel mit eigenem Mapping
Das Standard-Mapping kann überschrieben werden, um z. B. zusätzliche Felder abzurufen oder die Transformation anzupassen:
const { masterDataMapping } = require("ou.sp.dynamics.DynamicsBcConnectorMasterData");
const customMapping = {
...masterDataMapping,
[EntityName.Vendor]: {
...masterDataMapping[EntityName.Vendor],
fields: [...masterDataMapping[EntityName.Vendor].fields, "Phone_No"],
mappingFunction: (item, recipient) => ({
...masterDataMapping[EntityName.Vendor].mappingFunction(item, recipient),
phoneNumber: item.Phone_No,
}),
},
};
connector.processEntities({
companyId,
entityName: EntityName.Vendor,
recipient: "R0100",
dbConfig,
clear: true,
mapping: customMapping,
});
Mapping-Details
Das masterDataMapping legt für jede Entität fest:
odataEntity— BC-OData-EntitätsnameidField— Primärschlüsselfeld in BCfields— abzurufende FelderdefaultFilter— optionaler OData-Standardfilter (z. B."VAT_Bus_Posting_Group eq 'INLAND'"für Steuerschlüssel oder"Dimension_Code eq 'ABTEILUNG'"für Kostenträger)mappingFunction— transformiert BC-Felder in die Zieldatenbankstrukturclear/clearPartial— löschen vor dem vollständigen bzw. partiellen Neuladeninsert— Bulk-Insert der transformierten Zeilen
BC-Datumsformeln wie "30D" (30 Tage) oder "1M" (1 Monat = 30 Tage) werden automatisch in Tageszahlen umgerechnet. Formeln wie "CM" (Monatsende), die sich nicht als feste Tageszahl ausdrücken lassen, werden als undefined gespeichert.