Das ist eine für den Ausdruck optimierte Ansicht des gesamten Kapitels inkl. Unterseiten.
Druckvorgang starten.
Zur Standardansicht zurückkehren.
Mapping
Welche Daten zwischen Business Central und Customer Engagement ausgetauscht werden — Übersicht, Datenfluss und vollständige Mapping-Liste.
Diese Seite und ihre Unterseiten richten sich an die IT-Administration. Ab hier folgen
Feldnamen, API-Endpunkte und Job-Konfigurationsdetails — für einen fachlichen Überblick
siehe Architektur und Business-Logik.
Der Datenaustausch zwischen Business Central (BC) und Customer Engagement (CE / Dataverse)
läuft vollständig über die DataBridge. Sie besteht aus zwei Konfigurationsebenen:
- Job — wann und unter welcher Bedingung etwas übertragen wird
(Zeitplan, Filter, Reihenfolge, Watermark, Quell-/Zielverbindung)
- Mapping — was übertragen wird
(Feldzuordnung Quelle → Ziel inkl. Key-Auflösung und Transformationen)
Aktuell sind 38 Jobs mit 38 Mappings und insgesamt 290 Feldzuordnungen konfiguriert.
Zu jedem Job gehört genau ein Mapping.
Übersicht — welche Daten werden ausgetauscht?
Auf oberster Ebene lassen sich die Daten in vier Gruppen einteilen:
flowchart LR
subgraph BC["Business Central"]
direction TB
BC1["Stammdaten<br/>Länder · Sprachen · Anreden<br/>Verkäufer · Positionen · Rabattgruppen"]
BC2["Produkte<br/>Verkaufschancen-Elemente"]
BC3["Belege<br/>Angebote · Angebotspositionen<br/>Kalkulationselemente"]
BC4["Abonnements<br/>Serviceobjekte · Servicevereinbarungen"]
BC5["Geschäftspartner<br/>Firmen · Kontakte"]
BC6["Verkaufschancen"]
end
subgraph CE["Customer Engagement"]
direction TB
CE1["Wertelisten<br/>wysa_country · wysa_language · …"]
CE2["Produkte<br/>product"]
CE3["Angebote<br/>quote · quotedetail"]
CE4["Abonnements<br/>wysa_bcserviceobject(commitment)"]
CE5["Firma / Kontakt<br/>account · contact"]
CE6["Verkaufschance<br/>opportunity · opportunityproduct"]
end
BC1 -->|Referenzdaten| CE1
BC2 -->|Produkte| CE2
BC3 -->|Angebote & Preise| CE3
BC4 -->|Abo-Bestand| CE4
BC5 <-->|in beide Richtungen| CE5
CE6 -->|nur CE → BC| BC6Daraus ergeben sich vier grundsätzliche Muster:
| Muster | Richtung | Beispiele | Charakter |
|---|
| Referenz- und Belegdaten | BC → CE | Länder, Sprachen, Verkäufer, Produkte, Angebote, Abonnements | BC ist führendes System, CE liest nur |
| Geschäftspartner | CE ⇄ BC | Firma, Kontakt | in beide Richtungen: CE legt an und ändert, BC liefert Nummern zurück und überträgt eigene Änderungen nach CE |
| Verkaufschancen | CE → BC | Verkaufschance, Verkaufschancen-Produkt | nur CE → BC; BC meldet lediglich die vergebene Nummer zurück (Response-Job), Änderungen in BC kommen nicht nach CE |
| Löschungen | BC → CE | alle *Delete-Jobs | über das BC-Änderungsprotokoll (acdlogentries); Stammdaten werden deaktiviert, Angebote storniert, Angebotspositionen gelöscht |
Der Detailfluss inklusive Response-Jobs und Löschverarbeitung steht unter
Datenfluss.
Vollständige Liste der Mappings
Sortiert nach der Ausführungsreihenfolge (Order) des zugehörigen Jobs.
„Felder" = Anzahl der Feldzuordnungen, „Ops" = davon mit Transformation
(Lookup, OptionSet, Concat, …).
Stammdaten und Produkte (BC → CE)
| Order | Mapping | Job | Richtung | Quelle (BC API Page) | Ziel (CE Entity) | Felder | Ops | Läuft |
|---|
| 110 | BCCountries | countriesfrombc | BC → CE | acdcountryregions | wysa_country | 4 | 0 | Zeitplan |
| 115 | BCLanguages | languagesfrombc | BC → CE | acdlanguages | wysa_language | 3 | 0 | Zeitplan |
| 120 | BCSalutations | salutationsfrombc | BC → CE | acdsalutations | wysa_bcsalutation | 3 | 0 | Zeitplan |
| 125 | BCCustomerDiscountGroups | customerdiscountgroupsfrombc | BC → CE | acdcustomerdiscgroups | wysa_bccustomerdiscountgroup | 3 | 0 | Zeitplan |
| 130 | BCSalesPersons | salespersonsfrombc | BC → CE | acdsalespersons | wysa_bcsalesperson, wysa_salesperson | 4 | 0 | Zeitplan |
| 135 | BCPositions | positionsfrombc | BC → CE | acdorganizationallevels | wysa_bcposition | 3 | 0 | Zeitplan |
| 190 | BCOpportunityElements | opportunityelementsfrombc | BC → CE | acdopportunityelements | product | 10 | 3 | Zeitplan |
Geschäftspartner und Verkaufschancen (CE → BC, mit Response)
| Order | Mapping | Job | Richtung | Quelle | Ziel | Felder | Ops | Läuft |
|---|
| 220 | CEAccounts | accountsnewfromce | CE → BC | account | acdcontactscomp | 14 | 4 | Zeitplan |
| 221 | BCAccountsResponse | accountsresponsefrombc | BC → CE | acdcontactscomp | account | 3 | 1 | per Response-Job |
| 240 | CEContacts | contactsnewfromce | CE → BC | contact | acdcontacts | 17 | 6 | Zeitplan |
| 241 | BCContactsResponse | contactsresponsefrombc | BC → CE | acdcontacts | contact | 9 | 2 | per Response-Job |
| 260 | CEOpportunities | opportunitiesnewfromce | CE → BC | opportunity | acdopportunities | 8 | 4 | Zeitplan |
| 261 | BCOpportunitiesResponse | opportunitiesresponsefrombc | BC → CE | acdopportunities, acdcontacts | opportunity | 3 | 1 | per Response-Job |
| 520 | CEAccountUpdates | accountupdatesfromce | CE → BC | account | acdcontactscomp | 13 | 2 | Zeitplan |
| 530 | CEContactsUpdates | contactupdatesfromce | CE → BC | contact | acdcontacts | 18 | 5 | Zeitplan |
| 710 | CEOpportunityProducts | opportunityproductsnewfromce | CE → BC | opportunityproduct | acdopportunitycalculationelements | 8 | 2 | Zeitplan |
| 750 | CEOpportunityProductsUpdates | opportunityproductsupdatesfromce | CE → BC | opportunityproduct | acdopportunitycalculationelements | 6 | 2 | Zeitplan |
| 760 | BCOpportunityProductsResponse | opportunityproductsresponsefrombc | BC → CE | acdopportunitycalculationelements | opportunityproduct | 2 | 1 | per Response-Job |
Geschäftspartner (BC → CE)
| Order | Mapping | Job | Richtung | Quelle | Ziel | Felder | Ops | Läuft |
|---|
| 410 | BCAccounts | accountsfrombc | BC → CE | acdcontactscomp | account | 18 | 5 | Zeitplan |
| 430 | BCContacts | contactsfrombc | BC → CE | acdcontacts | contact | 18 | 6 | Zeitplan |
Abonnements (BC → CE)
| Order | Mapping | Job | Richtung | Quelle | Ziel | Felder | Ops | Läuft |
|---|
| 550 | BCServiceObjects | serviceobjectsfrombc | BC → CE | serviceObjects | wysa_bcserviceobject | 17 | 5 | Zeitplan |
| 560 | BCServiceCommitments | servicecommitmentsfrombc | BC → CE | serviceCommitments | wysa_bcserviceobjectcommitment | 27 | 4 | Zeitplan |
Angebote (BC → CE)
| Order | Mapping | Job | Richtung | Quelle | Ziel | Felder | Ops | Läuft |
|---|
| 610 | BCSalesQuotes | salesquotesfrombc | BC → CE | acdsalesheaders | quote | 10 | 3 | Zeitplan |
| 620 | BCSalesCalculationElements | salescalculationelementsfrombc | BC → CE | acdsalescalculationelements | quotedetail | 8 | 3 | Zeitplan |
| 625 | BCSalesQuotesActivate | activatesalesquotesfrombc | BC → CE | acdlogentries | quote | 3 | 1 | Zeitplan |
Löschungen (BC → CE, Quelle immer das Änderungsprotokoll acdlogentries)
Was in der Spalte Läuft steht
Zeitplan heißt: Der Job wird nach seinem eigenen Zeitplan gestartet — alle zwei oder
alle drei Minuten. Per Response-Job betrifft die vier Rückmelde-Jobs: Sie haben
keinen eigenen Zeitplan, sondern werden unmittelbar von ihrem auslösenden Job über das
Feld ResponseJob aufgerufen.
Welcher Job in welcher Folge und in welchem Takt läuft, steht unter
Datenfluss.
Detailseiten
Die Detailseiten sind nach Datenbereich gegliedert, nicht nach Job. Jeder Bereich hat
eine Übersichtsseite mit dem Gesamtbild und darunter je eine Seite pro Schritt.
Grundlage aller Belegketten sind die Stammdaten — die Wertelisten aus
Business Central, aus denen die Belege ihre Verknüpfungen bilden:
Vollständig dokumentiert sind bisher Firma und Kontakt:
Das Angebot läuft ausschließlich von Business Central nach Customer
Engagement und schließt damit den Kreis zur Verkaufschance:
Das Abonnement ist ein eigenständiger Bereich, ebenfalls nur von
Business Central nach Customer Engagement:
Eine rein technische, tabellarische Sicht auf alle Jobs in Ausführungsreihenfolge bietet
die Sektion Technisches Mapping.
Damit sind alle aktiven Mappings der Integration dokumentiert.
Die Verkaufschance weicht vom Muster ab — sie läuft nur in eine
Richtung und hat eine zweite Kette für die Positionen:
Aufbau einer Detailseite
Jede Schrittseite ist zweigeteilt: zuerst die fachliche Sicht, danach die technische.
- Steckbrief — Richtung, Takt, Betroffene, technische Zuordnung
- Was passiert hier? — der Vorgang in Prosa
- Welche Felder? — Feldtabelle mit Anzeigenamen beider Systeme
- Worauf zu achten ist — fachliche Besonderheiten und Stolperfallen
- Technische Details — aufklappbar: Job-Konfiguration, Key-Auflösung,
technische Feldnamen, Transformationen als JSON
Wer die Lösung anwendet, liest die ersten vier Punkte. Wer sie wartet oder erweitert,
klappt den fünften auf.
Die technischen Grundlagen (Jobs, Konnektoren, Transformationen) stehen in der
DataBridge-Dokumentation.
1 - Datenfluss
Wie die DataBridge-Jobs ineinandergreifen — Zeitplan, Filter, Response-Jobs und Löschverarbeitung.
Diese Seite richtet sich an die IT-Administration — vertiefende technische Referenz mit
Job-Filtersyntax und Zeitplänen.
Diese Seite zeigt, wie die Daten fließen. Welche Felder dabei zugeordnet werden,
steht auf den Mapping-Detailseiten.
Grundprinzip
Jeder Job der DataBridge ist ein eigenständiger, zeitgesteuerter Lauf:
flowchart LR
A["Zeitplan<br/><code>Schedule</code>"] --> B["Quelle lesen<br/><code>SourceConnection</code>"]
B --> C["Filter anwenden<br/><code>Filter</code> + <code>%watermark%</code>"]
C --> D["Mapping ausführen<br/>Feldzuordnung + Transformation"]
D --> E["Key-Auflösung<br/>Datensatz im Ziel finden"]
E --> F["Schreiben<br/><code>TargetConnection</code>"]
F --> G["Watermark fortschreiben<br/><code>WatermarkField</code>"]
G -.->|falls gesetzt| H["Response-Job starten<br/><code>ResponseJob</code>"]
Die Reihenfolge innerhalb eines Laufs steuert das Feld Order (110 – 760).
Stammdaten laufen zuerst (110 – 190), damit die Lookups der späteren Jobs
(Firma, Angebot, Abo) ihre Referenzdatensätze bereits vorfinden.
Die meisten Jobs laufen alle 2 Minuten (0 */2 * * * *), die Jobs rund um
Verkaufschancen und Angebotsaktivierung alle 3 Minuten (0 */3 * * * *).
Gesamtfluss
flowchart TB
subgraph S1["1 · Stammdaten (Order 110–190)"]
direction LR
ST["BC Referenztabellen<br/>Länder · Sprachen · Anreden<br/>Verkäufer · Positionen<br/>Rabattgruppen"] --> STC["CE Wertelisten<br/><code>wysa_country</code>, <code>wysa_language</code>,<br/><code>wysa_bcsalutation</code>, <code>wysa_salesperson</code>, …"]
IT["BC Verkaufschancen-Elemente<br/><code>acdopportunityelements</code>"] --> ITC["CE <code>product</code>"]
end
subgraph S2["2 · Geschäftspartner (Order 220–241, 410–440, 520–530)"]
direction LR
CEA["CE <code>account</code> / <code>contact</code>"] -->|"neu: <code>CEAccounts</code>, <code>CEContacts</code>"| BCA["BC <code>acdcontactscomp</code> / <code>acdcontacts</code>"]
CEA -->|"geändert: <code>CEAccountUpdates</code>, <code>CEContactsUpdates</code>"| BCA
BCA -->|"Response: Nummer zurück"| CEA
BCA -->|"<code>BCAccounts</code>, <code>BCContacts</code>"| CEA
end
subgraph S3["3 · Verkaufschancen (Order 260–261, 710–760)"]
direction LR
CEO["CE <code>opportunity</code><br/><code>opportunityproduct</code>"] -->|"<code>CEOpportunities</code><br/><code>CEOpportunityProducts</code>"| BCO["BC <code>acdopportunities</code><br/><code>acdopportunitycalculationelements</code>"]
BCO -->|"Response"| CEO
end
subgraph S4["4 · Angebote & Abos (Order 550–625)"]
direction LR
BCQ["BC <code>acdsalesheaders</code><br/><code>acdsalescalculationelements</code><br/><code>serviceObjects</code> / <code>serviceCommitments</code>"] --> CEQ["CE <code>quote</code> / <code>quotedetail</code><br/><code>wysa_bcserviceobject(commitment)</code>"]
end
subgraph S5["5 · Löschungen (Order 420–690)"]
direction LR
LOG["BC Änderungsprotokoll<br/><code>acdlogentries</code>"] --> DEL["CE: Datensatz löschen<br/><code>account</code>, <code>contact</code>, <code>product</code>,<br/><code>quote</code> deaktivieren/schließen,<br/><code>quotedetail</code> löschen"]
end
S1 --> S2 --> S3 --> S4 --> S5Muster 1 — Referenzdaten BC → CE
Der einfachste Fall: BC ist führendes System, CE liest nur mit.
sequenceDiagram
participant BC as Business Central
participant DB as DataBridge
participant CE as Customer Engagement
DB->>BC: GET api page<br/>?$filter=lastModifiedDateTime gt %watermark%
BC-->>DB: geänderte Datensätze
DB->>DB: Mapping + Lookup auf CE-Key
DB->>CE: Upsert (anlegen oder aktualisieren)
DB->>DB: Watermark = höchstes lastModifiedDateTime
Die Abgrenzung erfolgt über das Watermark: der Job merkt sich den höchsten
Wert von WatermarkField (lastModifiedDateTime, Typ datetime) des letzten
Laufs und liest beim nächsten Mal nur, was seitdem geändert wurde.
Betroffene Mappings: alle BC*-Mappings außer den Delete- und Response-Varianten.
Die Jobs in Gegenrichtung (CE*-Mappings) brauchen kein Watermark-Feld: Für
Dataverse-Quellen nutzt die DataBridge das Change Tracking der Plattform und erhält
damit nur die seit dem letzten Lauf geänderten Datensätze.
Muster 2 — CE → BC mit Response-Job
Legt der Vertrieb in CE eine Firma, einen Kontakt oder eine Verkaufschance an,
existiert diese in BC noch nicht. BC vergibt beim Anlegen die Nummer und die
SystemId — diese müssen zurück nach CE. Genau dafür gibt es den Response-Job:
sequenceDiagram
participant CE as Customer Engagement
participant DB as DataBridge
participant BC as Business Central
Note over DB: Job "accountsnewfromce" (Order 220)
DB->>CE: lies account
Note right of DB: Filter:<br/>wysa_bcsystemid IS NULL<br/>UND wysa_sync2bc = "Freigegeben"
CE-->>DB: neue, freigegebene Firmen
DB->>BC: POST acdcontactscomp
BC-->>DB: number, id (SystemId)
Note over DB: ResponseJob "accountsresponsefrombc" (Order 221)
DB->>BC: lies acdcontactscomp
BC-->>DB: number, id
DB->>CE: schreibe wysa_bccontactnumber, wysa_bcsystemid
Note right of CE: Ab jetzt greift<br/>"accountupdatesfromce" (Order 520)
Der entscheidende Mechanismus ist das Feld wysa_bcsystemid:
- leer → der Datensatz ist BC noch unbekannt → der Neu-Job greift
(
CEAccounts, CEContacts, CEOpportunities, CEOpportunityProducts) - gefüllt → der Datensatz existiert in BC → der Update-Job greift
(
CEAccountUpdates, CEContactsUpdates, CEOpportunityProductsUpdates)
Zusätzlich muss wysa_sync2bc auf „Freigegeben" stehen — siehe
Freigabe nach Business Central.
Response-Jobs sind bewusst mit IsActive = false konfiguriert. Sie werden nicht
über den eigenen Zeitplan gestartet, sondern ausschließlich vom vorgelagerten Job
über dessen Feld ResponseJob aufgerufen.
| Auslösender Job | Order | Response-Job | Order |
|---|
accountsnewfromce | 220 | accountsresponsefrombc | 221 |
contactsnewfromce | 240 | contactsresponsefrombc | 241 |
opportunitiesnewfromce | 260 | opportunitiesresponsefrombc | 261 |
opportunityproductsnewfromce | 710 | opportunityproductsresponsefrombc | 760 |
Muster 3 — Löschungen über das Änderungsprotokoll
Ein gelöschter Datensatz taucht in der normalen API Page nicht mehr auf — er kann
also nicht per Abgleich erkannt werden. Stattdessen liest die DataBridge das
BC-Änderungsprotokoll acdlogentries:
flowchart LR
DEL["Löschung in BC"] --> LOG["Eintrag in<br/><code>acdlogentries</code><br/>tableId + operation"]
LOG --> F{"Filter je Job"}
F -->|"tableId 5050 (Kontakt)"| A["<code>BCAccountsDelete</code><br/><code>BCContactsDelete</code>"]
F -->|"tableId 72077781 (Artikel)"| P["<code>BCProductsDelete</code>"]
F -->|"tableId 36 (Angebot)"| Q["<code>BCSalesQuotesDelete</code>"]
F -->|"tableId 72077783 (Kalkulation)"| K["<code>BCSalesCalculationElementsDelete</code>"]
A --> X["Mapping setzt<br/><code>statecode</code> / <code>statuscode</code><br/>→ Datensatz wird <b>deaktiviert</b>"]
P --> X
Q --> Y["Job-Feld <code>Action = Delete</code><br/>→ Datensatz wird <b>gelöscht</b>"]
K --> YDiese Jobs unterscheiden sich in zwei Punkten von den übrigen:
- Die Quelle ist immer
acdlogentries, nie die Fachtabelle. Der Filter grenzt
über tableId die betroffene BC-Tabelle ab, z. B.
{{lastModifiedDateTime gt %watermark%}} and tableId eq 5050 für Kontakte/Firmen.
Als Schlüssel dient recordId → wysa_bcsystemid. - Es gibt zwei Varianten, wie im Ziel reagiert wird:
| Variante | Jobs | Verhalten in CE |
|---|
Deaktivieren (kein Action-Feld) | accountsfrombcdelete, contactsfrombcdelete, productsfrombcdelete | Das Mapping setzt per DefaultValue den statecode auf 1 und den statuscode auf einen Inaktiv-Wert — der Datensatz bleibt erhalten, wird aber inaktiv gesetzt. Firma und Kontakt verwenden den lösungseigenen Statusgrund 799840001, das Produkt den Dataverse-Standardwert 2 |
Schließen (kein Action-Feld) | salesquotesfrombcdelete | Das Mapping setzt statecode = 3 (Geschlossen) und statuscode = 6 (Storniert) — das Angebot bleibt erhalten |
Löschen (Action = Delete) | salescalculationelementsfrombcdelete | Die DataBridge löscht den Datensatz im Ziel |
Stammdaten wie Firma, Kontakt und Produkt werden also nie hart gelöscht — für
Historie und referenzielle Integrität in CE ist das wichtig. Angebote werden storniert,
nur Angebotspositionen werden entfernt.
Sonderfall — Angebot aktivieren
BCSalesQuotesActivate (Order 625) ist kein Datenabgleich, sondern eine
Statusänderung. Der Job liest ebenfalls acdlogentries, filtert aber auf
tableId eq 36 and operation eq 'TRANSFERRED' — also auf den Moment, in dem in
BC aus einem Angebot ein Auftrag wird — und setzt daraufhin den Status des
zugehörigen quote in CE.
Ausführungsreihenfolge und Takt
Die Jobs tragen eine Ordnungsnummer (Order), die festlegt, in welcher Folge sie
innerhalb eines Durchlaufs abgearbeitet werden. Darauf beruhen die
Reihenfolgeabhängigkeiten der Integration: Stammdaten vor Belegen, Firma vor Kontakt,
Kontakt vor Verkaufschance.
| Order | Job | Bereich | Takt |
|---|
| 110 | countriesfrombc | Stammdaten — Länder | 2 Min |
| 115 | languagesfrombc | Stammdaten — Sprachen | 2 Min |
| 120 | salutationsfrombc | Stammdaten — Anreden | 2 Min |
| 125 | customerdiscountgroupsfrombc | Stammdaten — Rabattgruppen | 2 Min |
| 130 | salespersonsfrombc | Stammdaten — Verkäufer | 2 Min |
| 135 | positionsfrombc | Stammdaten — Organisationsebenen | 2 Min |
| 190 | opportunityelementsfrombc | Verkaufschance — Kalkulationselemente | 2 Min |
| 220 | accountsnewfromce | Firma — neu nach BC | 2 Min |
| ↳ 221 | accountsresponsefrombc | Firma — Rückmeldung | nach 220 |
| 240 | contactsnewfromce | Kontakt — neu nach BC | 2 Min |
| ↳ 241 | contactsresponsefrombc | Kontakt — Rückmeldung | nach 240 |
| 260 | opportunitiesnewfromce | Verkaufschance — neu nach BC | 2 Min |
| ↳ 261 | opportunitiesresponsefrombc | Verkaufschance — Rückmeldung | nach 260 |
| 410 | accountsfrombc | Firma — aus BC | 2 Min |
| 420 | accountsfrombcdelete | Firma — Löschung | 2 Min |
| 430 | contactsfrombc | Kontakt — aus BC | 2 Min |
| 440 | contactsfrombcdelete | Kontakt — Löschung | 2 Min |
| 450 | productsfrombcdelete | Stammdaten — Produkte deaktivieren | 2 Min |
| 520 | accountupdatesfromce | Firma — Änderungen nach BC | 2 Min |
| 530 | contactupdatesfromce | Kontakt — Änderungen nach BC | 2 Min |
| 550 | serviceobjectsfrombc | Abonnement — Abonnements | 2 Min |
| 560 | servicecommitmentsfrombc | Abonnement — Zeilen | 2 Min |
| 610 | salesquotesfrombc | Angebot — Angebote aus BC | 2 Min |
| 620 | salescalculationelementsfrombc | Angebot — Positionen aus BC | 2 Min |
| 621 | salescalculationelementsfrombcdelete | Angebot — Positionen löschen | 2 Min |
| 625 | activatesalesquotesfrombc | Angebot — gewonnene Angebote | 3 Min |
| 690 | salesquotesfrombcdelete | Angebot — Angebote stornieren | 2 Min |
| 710 | opportunityproductsnewfromce | Verkaufschance — Positionen neu | 3 Min |
| 750 | opportunityproductsupdatesfromce | Verkaufschance — Positionen ändern | 3 Min |
| ↳ 760 | opportunityproductsresponsefrombc | Verkaufschance — Rückmeldung | nach 710 |
Mit ↳ gekennzeichnet sind die vier Response-Jobs. Sie haben keinen eigenen
Zeitplan, sondern werden unmittelbar von ihrem auslösenden Job gestartet und folgen
damit dessen Takt.
Die Ordnungsnummer sortiert nur innerhalb eines Takts
Das ist die wichtigste Einschränkung an der Tabelle oben: Es gibt zwei Zeitpläne.
23 Jobs laufen alle zwei Minuten, drei alle drei Minuten — und diese drei sind fett
hervorgehoben.
flowchart TB
subgraph M0["Minute 0, 6, 12, 18 …"]
A0["<b>alle</b> Jobs<br/>2-Minuten- und 3-Minuten-Gruppe<br/>→ Ordnungsnummer gilt durchgehend"]
end
subgraph M2["Minute 2, 4, 8, 10 …"]
A2["nur die 23 Jobs der<br/><b>2-Minuten-Gruppe</b>"]
end
subgraph M3["Minute 3, 9, 15, 21 …"]
A3["nur die 3 Jobs der<br/><b>3-Minuten-Gruppe</b><br/>625, 710, 750"]
endDie Ordnungsnummer legt also nur die Folge der Jobs fest, die im selben Tick
laufen. Die beiden Gruppen treffen sich alle sechs Minuten.
Praktisch bedeutet das für die drei Jobs im Drei-Minuten-Takt:
| Job | Braucht Vorarbeit von | Konsequenz |
|---|
| 710 · Positionen neu nach BC | 190 (Kalkulationselemente) und 260 / 261 (Verkaufschance) | läuft in einem eigenen Tick — die Vorarbeit stammt aus einem früheren Durchlauf |
| 750 · Positionen ändern | 710, 760 | läuft im selben Tick wie 710, hier gilt die Ordnungsnummer |
| 625 · gewonnene Angebote | 610 (Angebote aus BC) | anderer Takt als 610 |
Weil die Vorgänger-Jobs häufiger laufen als die abhängigen, ist die Vorarbeit in der
Praxis immer schon erledigt — nur eben aus einem früheren Durchlauf, nicht aus demselben.
Wer eine Reihenfolgeabhängigkeit prüft, sollte deshalb nicht allein auf die
Ordnungsnummer schauen, sondern auch auf den Takt.
Beim Ändern eines Zeitplans beachten
Würde ein Job aus dem Zwei-Minuten-Takt in den Drei-Minuten-Takt verschoben (oder
umgekehrt), ändert sich damit auch, ob seine Ordnungsnummer gegenüber anderen Jobs
überhaupt noch wirkt. Ein Zeitplanwechsel ist also keine reine Performancefrage,
sondern kann Reihenfolgeabhängigkeiten aufheben.
Die Operationen im Überblick
Sieben Operationen kommen in den Mappings vor. Sie sind das eigentliche Werkzeug der
DataBridge — alles, was über eine reine Feld-zu-Feld-Zuordnung hinausgeht, ist eine
dieser Operationen.
| Operation | Richtung | Was sie tut | Wo sie vorkommt |
|---|
Lookup | BC → CE | macht aus einem BC-Kürzel eine Dataverse-Verknüpfung | überall in den BC→CE-Mappings |
LookupValue | CE → BC | löst eine Dataverse-Verknüpfung zum BC-Kürzel auf | überall in den CE→BC-Mappings |
DefaultValue | beide | schreibt einen festen Wert ohne Quellfeld | Freigaben, Statuswerte, Kontaktarten, feste GUIDs |
ReadFromMessage | BC → CE | liest einen Wert aus der Antwortnachricht statt aus einer Tabelle | alle vier Response-Jobs |
OptionMapping | BC → CE | übersetzt einen BC-Textwert in einen Dataverse-Auswahlwert | nur BCServiceCommitments |
LinkToRecord | CE → BC | baut aus der Datensatz-GUID einen aufrufbaren Deep Link | nur CEOpportunities |
SetNullIfEqualsValueOfField | BC → CE | Parameter von Lookup: leert die Referenz bei Selbstbezug | nur BCAccounts |
Die letzten drei sind Einzelfälle — jede kommt in genau einem Mapping vor. Wer die
Konfiguration erweitert, findet dort das jeweilige Muster.
Nächster Schritt
Die Feldzuordnungen der einzelnen Mappings sind in der
Mapping-Übersicht gelistet. Die Detailseiten sind nach Datenbereich gegliedert:
Stammdaten, Firma, Kontakt,
Verkaufschance, Angebot und
Abonnement.
2 - Stammdaten
Die Wertelisten aus Business Central — Grundlage für fast jede Zuordnung in den Belegketten.
Bevor eine Firma, ein Kontakt oder ein Angebot abgeglichen werden kann, müssen die
Wertelisten stimmen. Business Central schickt in seinen Belegen keine Klartexte,
sondern Kürzel: DE für Deutschland, DEU für die Sprache, HERR für die Anrede,
MM für den Verkäufer. Aus diesen Kürzeln macht die Integration in Customer Engagement
echte Verknüpfungen — und das kann sie nur, wenn die passende Werteliste dort schon
vorhanden ist.
Genau dafür gibt es die Stammdaten-Abgleiche. Sie laufen mit den Ordnungsnummern
110 – 190 und damit vor allen Belegketten.
Die Kalkulationselemente sind fachlich ebenfalls ein Stammdaten-Abgleich, stehen aber
bei der Verkaufschance, weil sie nur dort und im Angebot verwendet
werden.
Warum die Reihenfolge zählt
flowchart LR
subgraph S["Stammdaten · 110 – 190"]
A["Länder"]
B["Sprachen"]
C["Anreden"]
D["Rabattgruppen"]
E["Verkäufer"]
F["Organisationsebenen"]
end
subgraph B1["Belegketten · ab 220"]
G["Firma"]
H["Kontakt"]
I["Verkaufschance"]
J["Angebot"]
end
S ==>|"Kürzel werden zu<br/>Verknüpfungen"| B1Alle Stammdaten-Jobs laufen im selben Zwei-Minuten-Takt wie die Belegketten, aber mit
niedrigerer Ordnungsnummer — sie sind innerhalb eines Durchlaufs also immer zuerst dran.
Fehlt ein Stammdatum, bleibt das Feld leer
Findet ein Abgleich das passende Stammdatum nicht, wird der Beleg trotzdem übertragen —
nur bleibt das betroffene Feld leer. Es gibt keine Fehlermeldung und keinen Abbruch.
Ein neu in BC angelegter Verkäufer erscheint deshalb innerhalb desselben Durchlaufs auch
an der Firma. Wird ein Stammdatum dagegen in BC nie angelegt, bleiben die
zugehörigen Felder dauerhaft leer, ohne dass es auffällt.
Alle Abgleiche folgen demselben Muster
Die sechs Wertelisten-Jobs sind bemerkenswert einheitlich aufgebaut:
| |
|---|
| Richtung | immer Business Central → Customer Engagement |
| Takt | immer alle 2 Minuten |
| Abgrenzung | immer über den Änderungszeitstempel lastModifiedDateTime |
| Erkennungsmerkmal | immer die BC System-ID |
| Felder | drei bis vier: System-ID, Kürzel, Bezeichnung |
| Löschverarbeitung | keine — in BC gelöschte Wertelisteneinträge bleiben in CE stehen |
Es gibt keinen Rückweg: Wertelisten werden in Business Central gepflegt, Customer
Engagement folgt. Ein in CE angelegter Ländereintrag bleibt dort und wird von keinem Job
nach BC übertragen.
Zwei Namenskonventionen für dasselbe Feld
Beim Feld für das BC-Kürzel gibt es zwei Schreibweisen — je nach Werteliste:
| Feld für das BC-Kürzel | Wertelisten |
|---|
wysa_bccode | Länder, Sprachen, Debitorrabattgruppen |
wysa_code | Anreden, Verkäufer, Organisationsebenen |
Das ist keine Kleinigkeit, denn die Belegketten müssen diese Unterscheidung mitmachen.
Jeder Lookup nennt das Nachschlagefeld ausdrücklich:
| Auflösung in der Belegkette | Nachschlagefeld |
|---|
| Land | wysa_bccode |
| Sprache | wysa_bccode |
| Debitorrabattgruppe | wysa_bccode |
| Anrede (BC) | wysa_code |
| Verkäufer (BC) | wysa_code |
| Position (BC) | wysa_code |
Beim Anlegen weiterer Wertelisten beachten
Wer eine neue Werteliste ergänzt, muss die Schreibweise des Codefelds und den Lookup im
Mapping aufeinander abstimmen. Ein wysa_bccode in der Tabelle und ein wysa_code im
Mapping führt nicht zu einem Fehler, sondern zu einem stillschweigend leeren Feld.
Was nicht abgeglichen wird
Nicht jede Tabelle des Datenmodells hat einen Abgleich. Diese hier werden von keinem
aktiven Job gefüllt:
| Tabelle | Anzeigename | Zustand |
|---|
wysa_bcClient | Mandant (BC) | kein Job vorhanden — wird manuell gepflegt |
wysa_bcProducer | Hersteller (BC) | kein Abgleich — bleibt am Produkt leer |
wysa_bcProductCategory | Produktkategorie (BC) | kein Abgleich — bleibt am Produkt leer |
product | Produkt | keine Artikel aus BC — nur Kalkulationselemente, siehe unten |
wysa_title | Titel | kein Abgleich — reine CE-Stammdaten |
wysa_salutation | Anredevorlage | kein Abgleich — reine CE-Stammdaten |
Der Mandant (BC) ist dabei der auffälligste Fall: Er wird an Firma, Kontakt,
Verkaufschance und Angebot verwendet, kommt aber nicht aus Business Central. Da ihn auch
kein Beleg-Mapping schreibt, bleibt das Feld an den übertragenen Datensätzen leer, wenn
es nicht in CE gesetzt wird.
Die Produkttabelle wird nur teilweise gefüllt
Artikel werden nicht aus BC übernommen
Es gibt keinen Abgleich, der Artikel aus Business Central nach CE bringt. Die
Produkttabelle wird ausschließlich über die
Kalkulationselemente (190) gefüllt; alles
andere darin ist manuell erfasst. Die Felder Hersteller (BC) und Produktkategorie (BC)
werden entsprechend in CE gepflegt. Die
Löschverarbeitung für Produkte (450) betrifft nur Produkte mit einer
BC System-ID aus der Artikeltabelle.
Technische Zuordnung
Jobs und Mappings
| Order | Job | Mapping | Zieltabelle | Felder |
|---|
| 110 | countriesfrombc | BCCountries | wysa_country | 4 |
| 115 | languagesfrombc | BCLanguages | wysa_language | 3 |
| 120 | salutationsfrombc | BCSalutations | wysa_bcsalutation | 3 |
| 125 | customerdiscountgroupsfrombc | BCCustomerDiscountGroups | wysa_bccustomerdiscountgroup | 3 |
| 130 | salespersonsfrombc | BCSalesPersons | wysa_bcsalesperson, wysa_salesperson | 4 |
| 135 | positionsfrombc | BCPositions | wysa_bcposition | 3 |
| 190 | opportunityelementsfrombc | BCOpportunityElements | product | 10 |
| 450 | productsfrombcdelete | BCProductsDelete | product | 3 |
Alle Quellen sind API Pages unter singhammerITConsulting/dyce/v2.0/; die
Löschverarbeitung liest acdlogentries.
Key-Auflösung — einheitlich über die BC System-ID
Alle sechs Wertelisten-Jobs verwenden denselben Schlüssel:
{
"KeyType": "CustomKey",
"KeyName": "wysa_bcsystemidkey",
"KeyValues": [
{ "keyName": "wysa_bcsystemid", "attributeName": "id", "rank": 1 }
]
}
Das unterscheidet sie von den Belegketten: Firma und Kontakt werden über die
BC Kontaktnummer gefunden, das Angebot über die Angebotsnummer. Bei den Wertelisten ist
der Schlüssel immer die technische System-ID — das Kürzel selbst ist nur ein Datenfeld
und könnte sich in BC theoretisch ändern, ohne dass die Zuordnung verloren geht.
Ausnahme ist der Kalkulationselemente-Abgleich (190), der über den Code auflöst.
2.1 - Wertelisten aus Business Central übernehmen
Länder, Sprachen, Anreden, Debitorrabattgruppen und Organisationsebenen kommen aus dem ERP nach Customer Engagement.
| |
|---|
| Richtung | Business Central → Customer Engagement |
| Wann | alle 2 Minuten |
| Betrifft | fünf Wertelisten, je ein eigener Abgleich |
| Technisch | Jobs countriesfrombc (110), languagesfrombc (115), salutationsfrombc (120), customerdiscountgroupsfrombc (125), positionsfrombc (135) |
Der sechste Wertelisten-Abgleich, der Verkäufer (130), hat wegen
einer Besonderheit eine eigene Seite.
Was passiert hier?
Jeder dieser fünf Abgleiche holt eine Werteliste aus Business Central nach Customer
Engagement — Kürzel und Bezeichnung. Danach kann die Integration in den Belegketten aus
einem BC-Kürzel eine echte Verknüpfung machen.
Alle fünf sind gleich aufgebaut: Sie kommen mit drei bis vier Feldern aus, erkennen
Einträge über die BC System-ID, laufen im Zwei-Minuten-Takt und übertragen nur, was
sich seit dem letzten Lauf geändert hat. Es gibt keinen Rückweg und keine
Löschverarbeitung.
Länder
Job countriesfrombc (110) · Zieltabelle Land (wysa_country)
| Feld in Business Central | Feld in Customer Engagement |
|---|
| id | BC System-ID |
| Code | BC Code |
| Name | Name |
| ISO-Code | ISO 3166-1 alpha-2 |
Die einzige Werteliste mit einem vierten Feld: Neben dem BC-Kürzel kommt der
ISO-Code mit. Damit lassen sich Länder in CE auch dort korrekt darstellen, wo eine
normierte Kennung gebraucht wird — etwa in Serienbriefen oder Exporten.
Gebraucht wird die Liste für das Feld Land an Firma, Kontakt und Lead.
Einträge ohne Code werden übersprungen
Dieser Abgleich hat als einziger einen zusätzlichen Filter: Länder ohne Kürzel werden
nicht übertragen. Ein Ländereintrag ohne Code wäre in CE nutzlos, weil die Zuordnung aus
den Belegen genau über dieses Kürzel läuft.
Sprachen
Job languagesfrombc (115) · Zieltabelle Sprache (wysa_language)
| Feld in Business Central | Feld in Customer Engagement |
|---|
| id | BC System-ID |
| Code | BC Code |
| Name | Name |
Gebraucht wird die Liste für das Feld Sprache am Kontakt und am Lead — und darüber
hinaus für die Anredebildung: Anredevorlagen
und Titel hängen jeweils an einer Sprache.
Anreden
Job salutationsfrombc (120) · Zieltabelle Anrede (BC) (wysa_bcsalutation)
| Feld in Business Central | Feld in Customer Engagement |
|---|
| id | BC System-ID |
| Code | Code |
| Beschreibung | Name |
Gebraucht wird die Liste für das Feld Anrede (BC) am Kontakt.
Nicht zu verwechseln mit den Anredevorlagen
Die Lösung kennt zwei verschiedene Anrede-Konzepte:
- Anrede (BC) (
wysa_bcsalutation) — der Anredeschlüssel aus Business Central, den
dieser Abgleich liefert. Er geht mit dem Kontakt nach BC zurück. - Anredevorlage (
wysa_salutation) — die Regeln, aus denen CE formelle, informelle
und persönliche Anredetexte erzeugt. Reine CE-Stammdaten, kein Abgleich.
Beide sind unabhängig voneinander zu pflegen. Siehe
Anrede, Titel und Sprache.
Debitorrabattgruppen
Job customerdiscountgroupsfrombc (125) · Zieltabelle Debitorrabattgruppe (BC)
(wysa_bccustomerdiscountgroup)
| Feld in Business Central | Feld in Customer Engagement |
|---|
| id | BC System-ID |
| Code | BC Code |
| Beschreibung | Name |
Gebraucht wird die Liste für das Feld Debitorrabattgruppe an der Firma. Dieses Feld
gehört zu denen, die nur aus BC kommen und nie zurückgeschrieben werden — siehe
Firma.
Organisationsebenen
Job positionsfrombc (135) · Zieltabelle Position (BC) (wysa_bcposition)
| Feld in Business Central | Feld in Customer Engagement |
|---|
| id | BC System-ID |
| Code | Code |
| Beschreibung | Name |
Gebraucht wird die Liste für das Feld Position (BC) am Kontakt und am Lead — die
Entscheidungsebene eines Ansprechpartners.
Position und Position (BC) sind zwei Felder
Am Kontakt gibt es Position (Standardfeld, freier Text, die Funktion) und
Position (BC) (Verweis auf diese Werteliste). Sie laufen sogar in entgegengesetzte
Richtungen — siehe Kontakt.
Worauf zu achten ist
Gelöschte Einträge bleiben in CE stehen
Keiner dieser Abgleiche hat eine Löschverarbeitung. Wird eine Anrede oder ein Land in
Business Central gelöscht, bleibt der Eintrag in Customer Engagement bestehen und
weiterhin auswählbar. Bei Firma, Kontakt und Produkt gibt es dafür eigene Löschjobs —
bei den Wertelisten nicht.
Änderungen am Kürzel sind unkritisch
Weil die Zuordnung über die BC System-ID läuft und nicht über das Kürzel, überlebt ein
Eintrag eine Umbenennung in BC: Beim nächsten Lauf wird derselbe CE-Datensatz gefunden
und sein Codefeld aktualisiert.
Die Belegketten lösen allerdings über das Kürzel auf. Wird ein Code in BC geändert,
zeigen bestehende CE-Datensätze also weiter auf den richtigen Eintrag — neue Belege aus
BC bringen aber das neue Kürzel mit, das nach dem Wertelisten-Abgleich ebenfalls stimmt.
Weil die Wertelisten vor den Belegen laufen, greift das innerhalb desselben Durchlaufs.
Zwei Schreibweisen für das Codefeld
Länder, Sprachen und Debitorrabattgruppen legen das Kürzel in wysa_bccode ab, Anreden
und Organisationsebenen in wysa_code. Die Lookups in den Belegketten berücksichtigen
das — siehe Stammdaten.
Technische Details
Die vollständigen technischen Mapping-Tabellen mit Feldzuordnungen, Key-Auflösung und
Transformationen stehen auf den technischen Seiten der einzelnen Jobs:
2.2 - Verkäufer aus Business Central übernehmen
Die Verkäufer aus dem ERP kommen nach Customer Engagement und werden dort automatisch CRM-Benutzern zugeordnet.
| |
|---|
| Richtung | Business Central → Customer Engagement |
| Wann | alle 2 Minuten |
| Betrifft | die Verkäufer aus BC |
| Technisch | Job salespersonsfrombc (130), Mapping BCSalesPersons |
Was passiert hier?
Business Central kennt Verkäufer als Kürzel — MM, SK, LB. Dieser Abgleich holt sie
nach Customer Engagement, damit die Belegketten aus dem Kürzel eine echte Verknüpfung
machen können.
Der Verkäufer ist die meistgenutzte Werteliste der Integration: Er wird an Firma,
Kontakt, Verkaufschance und Angebot aufgelöst — und bei Firma und Kontakt sogar in beide
Richtungen.
Die E-Mail-Adresse ist mehr als ein Datenfeld
Neben Kürzel und Bezeichnung überträgt dieser Abgleich die E-Mail-Adresse des
Verkäufers. Sie ist der Schlüssel zu einer Automatik in Customer Engagement: Über die
E-Mail-Adresse wird der BC-Verkäufer dem passenden CRM-Benutzer zugeordnet.
flowchart LR
A["Verkäufer in BC<br/>Code + E-Mail"] --> B["Verkäufer (BC) in CE"]
B -->|"Zuordnung über<br/>die E-Mail-Adresse"| C["CRM-Benutzer<br/>oder Team"]
C --> D["Besitzer von Firma,<br/>Kontakt, Verkaufschance"]
Das ist der Grund, warum dieser Abgleich fachlich mehr Gewicht hat als die übrigen
Wertelisten: Aus ihm folgt, wem ein Datensatz in CE gehört. Beschrieben ist die Automatik
unter Stammdaten und Anzeige.
Ohne E-Mail-Adresse keine Benutzerzuordnung
Ist am Verkäufer in Business Central keine E-Mail-Adresse hinterlegt, oder stimmt sie
nicht mit der des CRM-Benutzers überein, bleibt der Verweis auf den Benutzer leer. Der
Verkäufer selbst wird trotzdem angelegt und ist auswählbar.
Welche Felder kommen an?
| Feld in Business Central | Feld in Customer Engagement |
|---|
| id | BC System-ID |
| Code | Code |
| E-Mail | E-Mail |
| Anzeigename | Name |
Die E-Mail-Adresse landet im Feld wysa_emailaddress. An diesem Feld hängt die
automatische Benutzerzuordnung, siehe Datenmodell.
Die Telefonnummer wird nicht übertragen
Das Feld Telefon am Verkäufer (BC) ist nicht Teil dieses Mappings. Es kann in CE
gepflegt werden und wird vom Abgleich nicht überschrieben.
Gelöschte Verkäufer bleiben stehen
Wie bei allen Wertelisten gibt es keine Löschverarbeitung. Ein in Business Central
gelöschter Verkäufer bleibt in CE bestehen und weiterhin auswählbar.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → salespersonsfrombc.
2.3 - Produkte deaktivieren
In Business Central gelöschte Artikel werden in Customer Engagement inaktiv gesetzt.
| |
|---|
| Richtung | Business Central → Customer Engagement |
| Wann | alle 2 Minuten |
| Betrifft | Artikel, die in BC gelöscht wurden |
| Technisch | Job productsfrombcdelete (450), Mapping BCProductsDelete |
Was passiert hier?
Wird in Business Central ein Artikel gelöscht, wird das zugehörige Produkt in Customer
Engagement deaktiviert — es bleibt erhalten und wird nur inaktiv gesetzt.
Der Weg führt über das Änderungsprotokoll von BC, weil ein gelöschter Artikel in der
normalen Schnittstelle nicht mehr auftaucht. Wiedererkannt wird das Produkt über die
BC System-ID.
flowchart LR
A["Artikel in BC gelöscht"] --> B["Eintrag im<br/>Änderungsprotokoll"]
B --> C["Produkt in CE über die<br/>BC System-ID gefunden"]
C --> D["Produkt wird <b>deaktiviert</b>"]
Damit folgt das Produkt dem Muster von Firma und
Kontakt: deaktivieren, nicht löschen. An einem Produkt
hängen Angebotspositionen und Verkaufschancenpositionen — ein hartes Löschen würde diese
Historie zerstören.
Was sich am Produkt ändert
| Feld | Wert danach |
|---|
| Status | Inaktiv |
| Statusgrund | Inaktiv (Dataverse-Standardwert) |
Anderer Statusgrund als bei Firma und Kontakt
Firma und Kontakt erhalten den lösungseigenen Statusgrund 799840001 („in Business
Central gelöscht"). Das Produkt bekommt stattdessen den Dataverse-Standardwert.
Praktische Folge: Am Produkt ist nicht erkennbar, warum es inaktiv ist — ob es in BC
gelöscht wurde oder jemand es in CE zurückgezogen hat. Bei Firma und Kontakt lässt sich
das am Statusgrund ablesen.
Artikel werden nicht übernommen
Artikel aus Business Central werden nicht nach Customer Engagement übertragen. Die
Produkttabelle wird ausschließlich über die
Kalkulationselemente aus BC (190) gefüllt;
alles andere ist manuell erfasst. Dieser Schritt betrifft deshalb nur Produkte, die eine
BC System-ID aus der Artikeltabelle tragen — in der Praxis also keine manuell erfassten
Produkte und keine Kalkulationselemente.
Worauf zu achten ist
Reaktivieren erfolgt in CE
Ein in CE deaktiviertes Produkt wird vom Abgleich nicht wieder aktiviert. Soll es weiter
verwendet werden, wird es in CE manuell reaktiviert.
Deaktivierte Produkte in bestehenden Positionen
Ein inaktives Produkt bleibt in bereits erfassten Verkaufschancen- und
Angebotspositionen verknüpft. Es lässt sich nur nicht mehr neu auswählen. Das ist der
Zweck des Deaktivierens gegenüber dem Löschen.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → productsfrombcdelete.
3 - Firma
Wie Firmen zwischen Customer Engagement und Business Central abgeglichen werden — Gesamtbild und die fünf Schritte im Detail.
Firmen werden zwischen Customer Engagement und Business Central in beide Richtungen
abgeglichen. Der Vertrieb legt eine Firma in CE an, gibt sie frei, und sie erscheint im
ERP — oder ein Debitor entsteht in BC und taucht kurz darauf in CE auf. Beides ist
möglich, und beides greift ineinander.
Diese Seite zeigt das Gesamtbild. Die fünf Schritte, aus denen der Abgleich besteht,
sind je auf einer eigenen Seite beschrieben:
Kontakt und Verkaufschance funktionieren nach demselben Muster.
Der Kreislauf
flowchart TB
START(["Firma entsteht"]) --> Q{"Wo?"}
Q -->|"in CE angelegt"| C1["Feld <b>BC System-ID</b><br/>ist noch leer"]
Q -->|"in BC angelegt"| B1["<b>Aus BC übernehmen</b><br/>Firma erscheint in CE"]
C1 --> C2{"<b>Sync zu BC</b><br/>freigegeben?"}
C2 -->|nein| WAIT["Firma bleibt in CE —<br/>nichts wird übertragen"]
C2 -->|ja| C3["<b>Neu nach BC</b><br/>Firma wird in BC angelegt"]
C3 --> C4["<b>Rückmeldung aus BC</b><br/>Kontaktnummer und<br/>BC System-ID kommen zurück"]
B1 --> SYNC["Firma existiert in beiden Systemen"]
C4 --> SYNC
SYNC --> U1["Änderung in CE<br/><b>Änderungen nach BC</b>"]
SYNC --> U2["Änderung in BC<br/><b>Aus BC übernehmen</b>"]
U1 --> SYNC
U2 --> SYNC
SYNC --> D1["Firma in BC gelöscht"]
D1 --> D2["<b>Löschung aus BC</b><br/>Firma in CE wird deaktiviert"]Die entscheidende Weiche: das Feld „BC System-ID"
Zwei Schritte übertragen Firmen von CE nach BC — welcher greift, entscheidet allein die
Frage, ob Business Central die Firma schon kennt. Erkennbar ist das am Feld
BC System-ID (wysa_bcsystemid):
| Feld ist … | Bedeutung | Es greift |
|---|
| leer | BC kennt die Firma noch nicht | Neu nach BC — die Firma wird angelegt |
| gefüllt | BC kennt die Firma | Änderungen nach BC — die Firma wird aktualisiert |
Beide Schritte setzen zusätzlich voraus, dass Sync zu BC auf „Ja" steht. Ohne diese
Freigabe passiert gar nichts — siehe
Freigabe nach Business Central.
Gefüllt wird die BC System-ID nur durch die Rückmeldung aus BC
oder beim Übernehmen aus BC. Genau deshalb ist sie der verlässliche
Nachweis, dass eine Firma im ERP angekommen ist — und genau darauf baut die
Freigaberegel für Kontakte auf: Ein Kontakt darf erst freigegeben werden, wenn die
BC System-ID seiner Firma gefüllt ist.
Welche Felder laufen in welche Richtung?
Der Abgleich ist nicht symmetrisch. Einige Felder gehören fachlich ins ERP und
kommen nur von dort; zwei werden nur beim ersten Anlegen gesetzt.
| Feld in CE | Aus BC übernehmen | Neu nach BC | Änderungen nach BC |
|---|
| Name 1 (BC) | ✓ | ✓ | ✓ |
| Name 2 (BC) | ✓ | ✓ | ✓ |
| Straße 1 / Straße 2 | ✓ | ✓ | ✓ |
| Postleitzahl / Ort | ✓ | ✓ | ✓ |
| Land | ✓ | ✓ | ✓ |
| Telefon | ✓ | ✓ | ✓ |
| E-Mail | ✓ | ✓ | ✓ |
| Website | ✓ | ✓ | ✓ |
| Verkäufer (BC) | ✓ | ✓ | ✓ |
| BC Debitorennummer | ✓ | – | – |
| BC Kreditorennummer | ✓ | – | – |
| Debitorrabattgruppe | ✓ | – | – |
| Übergeordnete Firma | ✓ | – | – |
| Sync zu BC | ✓ | – | – |
| BC Kontaktnummer | ✓ | – | – |
| BC System-ID | ✓ | – | – |
Vier Aussagen lassen sich daraus ableiten:
Adresse, Kommunikation, Name und Verkäufer laufen in beide Richtungen. Wer zuletzt
speichert, gewinnt. Es gibt keine Konfliktauflösung.
Debitornummer, Kreditornummer, Debitorrabattgruppe und übergeordnete Firma gehören
Business Central. Sie entstehen im ERP und werden nur nach CE übertragen. Wer sie in
CE ändert, ändert nichts in BC — und die Änderung wird beim nächsten Abgleich wieder
überschrieben.
Der Firmenname in CE wird nicht abgeglichen. Der BC-Name landet im Feld
Name 1 (BC), nicht im Standardfeld Firmenname. Beide dürfen also voneinander
abweichen — in CE kann ein Marketingname stehen, in BC der Handelsregistername.
Kontaktart und Anrede werden nur beim Anlegen gesetzt. Werden sie später in BC
geändert, bleibt die Änderung erhalten — der Schritt
Änderungen nach BC fasst diese Felder nicht an.
Was in der Praxis zu beachten ist
Änderungen brauchen bis zu zwei Minuten
Alle Schritte laufen im Zwei-Minuten-Takt. Wer eine Firma freigibt und sofort in BC
nachsieht, findet sie noch nicht. Bei einer Neuanlage sind es faktisch zwei Durchläufe,
bis auch Kontaktnummer und BC System-ID zurückgemeldet sind.
Aus BC übernommene Firmen sind automatisch freigegeben
Kommt eine Firma aus Business Central, setzt der Abgleich Sync zu BC direkt auf
„Ja". Das ist folgerichtig — die Firma existiert im ERP ja bereits — bedeutet aber, dass
für diese Firmen keine bewusste Freigabeentscheidung mehr getroffen wird. Ihre Kontakte
können sofort freigegeben werden.
Deaktivierte Firmen bleiben im Abgleich
Wird eine Firma in BC gelöscht, wird sie in CE nur deaktiviert — die BC System-ID und die
Freigabe bleiben stehen. Der Schritt Änderungen nach BC prüft nur
diese beiden Felder und erfasst den Datensatz deshalb weiterhin.
Technische Zuordnung
Jobs und Mappings dieser Kette
Beteiligte Tabellen: Dataverse account ⇄ BC API Page
singhammerITConsulting/dyce/v2.0/acdcontactscomp; Löschungen über
singhammerITConsulting/dyce/v2.0/acdlogentries.
Schlüssel je Schritt
Jeder Schritt findet den Zieldatensatz über einen anderen Schlüssel:
| Schritt | Schlüssel im Ziel | Typ |
|---|
| Aus BC übernehmen | wysa_bccontactnumber ← BC number | CustomKey wysa_bccodekey |
| Neu nach BC | BC dataverseId ← CE accountid | Filter |
| Rückmeldung aus BC | CE accountid aus der Antwortnachricht | PrimaryKey |
| Änderungen nach BC | BC id ← CE wysa_bcsystemid | Id |
| Löschung aus BC | wysa_bcsystemid ← Log recordId | CustomKey wysa_bcsystemidkey |
Der Wechsel der Schlüsselstrategie hat einen Grund: Beim ersten Übertragen aus CE gibt
es noch keine BC-Id. Deshalb legt der Anlage-Schritt die CE-GUID im BC-Feld
dataverseId ab und findet den Datensatz darüber wieder — das macht ihn wiederholbar,
ohne Dubletten zu erzeugen. Sobald die wysa_bcsystemid zurückgemeldet ist, wird
direkt über sie adressiert.
Auflösung von Referenzen (Land, Verkäufer, Rabattgruppe)
| Richtung | Operation | Wirkung |
|---|
| BC → CE | Lookup | BC-Code (z. B. DE) wird zur Dataverse-Referenz auf wysa_country |
| CE → BC | LookupValue | Dataverse-Referenz wird über wysa_bccode zum BC-Code aufgelöst |
Beide arbeiten über den Alternate Key wysa_bccodekey bzw. das Feld wysa_bccode der
jeweiligen Werteliste. Der Verkäufer bildet die Ausnahme: dort heißt das Codefeld
wysa_code.
Daraus folgt eine harte Reihenfolgeabhängigkeit: Die Stammdaten-Jobs für Länder (110),
Rabattgruppen (125) und Verkäufer (130) müssen vor den Firmen-Jobs laufen — sonst
läuft der Lookup ins Leere und das Feld bleibt in CE leer.
3.1 - Firmen aus Business Central übernehmen
Neue und geänderte Firmen aus dem ERP erscheinen in Customer Engagement.
| |
|---|
| Richtung | Business Central → Customer Engagement |
| Wann | alle 2 Minuten |
| Betrifft | alle Firmenkontakte, die in BC seit dem letzten Lauf geändert wurden |
| Technisch | Job accountsfrombc (410), Mapping BCAccounts |
Was passiert hier?
Wird in Business Central ein Firmenkontakt angelegt oder geändert, erscheint er kurz
darauf in Customer Engagement. Existiert die Firma dort schon, werden ihre Felder
aktualisiert; existiert sie noch nicht, wird sie neu angelegt.
Wiedererkannt wird eine Firma an ihrer BC Kontaktnummer. Sie ist die Klammer
zwischen beiden Systemen — nicht der Firmenname.
Der Abgleich holt bei jedem Lauf nur, was sich seit dem letzten Mal geändert hat.
Ein Vollabgleich findet nicht statt.
Welche Felder kommen an?
| Feld in Business Central | Feld in Customer Engagement | Anmerkung |
|---|
| Nr. | BC Kontaktnummer | Erkennungsmerkmal — verbindet beide Systeme |
| id | BC System-ID | technischer Schlüssel des ERP |
| Name | Name 1 (BC) | nicht das Feld Firmenname — siehe unten |
| Name 2 | Name 2 (BC) | |
| Adresse | Straße 1 | |
| Adresse 2 | Straße 2 | |
| PLZ | Postleitzahl | |
| Ort | Ort | |
| Länder-/Regionscode | Land | wird zur Verknüpfung auf die Länderliste aufgelöst |
| Telefonnr. | Telefon | |
| E-Mail | E-Mail | |
| Homepage | Website | |
| Debitor Nr. | BC Debitorennummer | nur aus BC — CE ändert das nie |
| Kreditor Nr. | BC Kreditorennummer | nur aus BC |
| Debitorrabattgruppe | Debitorrabattgruppe | nur aus BC, als Verknüpfung |
| Verkäufercode | Verkäufer (BC) | wird zur Verknüpfung auf den Verkäufer aufgelöst |
| Unternehmensname | Übergeordnete Firma | als Verknüpfung, siehe unten |
| — | Sync zu BC | wird automatisch auf „Ja" gesetzt |
Worauf zu achten ist
Der Firmenname wird nicht überschrieben
Der Name aus BC landet im Feld Name 1 (BC) — nicht im Standardfeld Firmenname.
Was in CE als Firmenname gepflegt ist, bleibt also unangetastet. Das ist gewollt: In CE
darf der geläufige Marktname stehen, in BC der vollständige Name aus dem
Handelsregister.
Die Firma wird automatisch für BC freigegeben
Das Feld Sync zu BC wird auf „Ja" gesetzt. Das ist folgerichtig — die Firma
existiert im ERP ja bereits — hat aber eine Konsequenz: Ab sofort werden auch
Änderungen aus CE zurück nach BC übertragen, und die Kontakte dieser Firma dürfen
freigegeben werden.
Vier Felder kommen nur aus BC
Debitornummer, Kreditornummer, Debitorrabattgruppe und die übergeordnete Firma sind
ERP-Daten. Sie werden nie von CE nach BC zurückgeschrieben. Eine Änderung in CE hat
keine Wirkung und wird beim nächsten Abgleich überschrieben.
Verknüpfungen brauchen aktuelle Stammdaten
Land, Verkäufer und Debitorrabattgruppe kommen aus BC als Kürzel und werden in CE zu
echten Verknüpfungen aufgelöst. Fehlt das passende Stammdatum in CE — etwa ein neu in
BC angelegter Verkäufer —, bleibt das Feld an der Firma leer. Die Stammdatenlisten
werden vor den Firmen abgeglichen, sodass das normalerweise innerhalb desselben Laufs
zusammenfindet.
Firmen sind nie ihre eigene übergeordnete Firma
In Business Central trägt ein Firmenkontakt sich selbst als Unternehmen ein. Ohne
Sonderbehandlung entstünde in CE eine Firma, die auf sich selbst verweist. Der Abgleich
erkennt diesen Fall und lässt das Feld Übergeordnete Firma dann leer.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → accountsfrombc.
3.2 - Neue Firmen nach Business Central übertragen
In Customer Engagement angelegte und freigegebene Firmen werden im ERP angelegt.
| |
|---|
| Richtung | Customer Engagement → Business Central |
| Wann | alle 2 Minuten |
| Betrifft | Firmen, die freigegeben sind und in BC noch nicht existieren |
| Technisch | Job accountsnewfromce (220), Mapping CEAccounts |
Was passiert hier?
Der Vertrieb legt eine Firma in Customer Engagement an. Zunächst bleibt sie dort — das
ERP erfährt nichts davon. Erst wenn das Feld Sync zu BC auf „Ja" gesetzt wird, wird
die Firma beim nächsten Lauf in Business Central angelegt.
Zwei Bedingungen müssen gleichzeitig erfüllt sein:
- Sync zu BC steht auf „Ja"
- das Feld BC System-ID ist noch leer — BC kennt die Firma also noch nicht
Ist die BC System-ID bereits gefüllt, greift stattdessen
Änderungen nach BC.
Unmittelbar nach dem Anlegen läuft die Rückmeldung aus BC und
trägt Kontaktnummer und BC System-ID in CE nach. Erst danach gilt die Firma als
„in BC angekommen".
flowchart LR
A["Firma in CE angelegt"] --> B{"Sync zu BC<br/>= Ja?"}
B -->|nein| C["nichts passiert"]
B -->|ja| D{"BC System-ID<br/>leer?"}
D -->|nein| E["Änderungen nach BC<br/>greift stattdessen"]
D -->|ja| F["Firma wird in BC angelegt"]
F --> G["Rückmeldung aus BC<br/>füllt Kontaktnummer<br/>und BC System-ID"]Welche Felder gehen nach BC?
| Feld in Customer Engagement | Feld in Business Central | Anmerkung |
|---|
| Name 1 (BC) | Name | nicht das Feld Firmenname |
| Name 2 (BC) | Name 2 | |
| Straße 1 | Adresse | |
| Straße 2 | Adresse 2 | |
| Postleitzahl | PLZ | |
| Ort | Ort | |
| Land | Länder-/Regionscode | die Verknüpfung wird zum BC-Kürzel aufgelöst |
| Telefon | Telefonnr. | |
| E-Mail | E-Mail | |
| Website | Homepage | |
| Verkäufer (BC) | Verkäufercode | die Verknüpfung wird zum BC-Kürzel aufgelöst |
| (Firma-Datensatz) | Dataverse Id | technische Klammer, siehe unten |
| — | Kontaktart | fest auf „Company" |
| — | Anredecode | fest auf „MANDANT" |
Worauf zu achten ist
Der Name muss in „Name 1 (BC)" stehen
Übertragen wird Name 1 (BC), nicht das Standardfeld Firmenname. Ist Name 1 (BC)
leer, kommt die Firma ohne Namen in BC an. Wer eine Firma für BC freigibt, sollte dieses
Feld also gefüllt haben.
Debitornummer und Rabattgruppe werden nicht mitgeschickt
Debitornummer, Kreditornummer, Debitorrabattgruppe und die übergeordnete Firma werden
nicht nach BC übertragen. Diese Daten entstehen im ERP und fließen nur von dort nach
CE zurück. Was in CE in diesen Feldern steht, spielt für die Übertragung keine Rolle.
Kontaktart und Anrede werden nur einmal gesetzt
Beim Anlegen wird die Kontaktart fest auf „Company" gesetzt, damit BC den Datensatz als
Firmenkontakt und nicht als Person führt; der Anredecode wird auf „MANDANT" gesetzt.
Beide Felder werden später nie wieder angefasst — eine spätere Änderung in BC bleibt
also erhalten.
Doppelte Anlage ist ausgeschlossen
Läuft der Abgleich zweimal, bevor die Rückmeldung eingetroffen ist, entsteht in BC
trotzdem keine zweite Firma. Der Datensatz wird über die in BC hinterlegte Dataverse Id
wiedererkannt.
Erst die Firma, dann der Kontakt
Ein Kontakt kann in BC nur angelegt werden, wenn seine Firma dort bereits existiert.
Die Freigabe eines Kontakts wird deshalb abgelehnt, solange die BC System-ID seiner Firma
leer ist — siehe Freigabe nach Business Central.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → accountsnewfromce.
3.3 - Rückmeldung aus Business Central
Nach der Anlage im ERP kommen Kontaktnummer und BC System-ID zurück nach Customer Engagement.
| |
|---|
| Richtung | Business Central → Customer Engagement |
| Wann | unmittelbar nach jeder Neuanlage — kein eigener Zeitplan |
| Betrifft | genau die Firmen, die gerade in BC angelegt wurden |
| Technisch | Job accountsresponsefrombc (221), Mapping BCAccountsResponse |
Was passiert hier?
Wenn eine Firma neu nach BC übertragen wird, vergibt Business Central
dabei zwei Werte, die Customer Engagement noch nicht kennen kann:
- die BC Kontaktnummer aus dem Nummernkreis des ERP
- die BC System-ID, den technischen Schlüssel des Datensatzes
Dieser Schritt trägt beides in CE nach. Er läuft direkt im Anschluss an die Anlage und
wertet dabei die Antwort von Business Central aus — es ist keine erneute Abfrage.
sequenceDiagram
participant CE as Customer Engagement
participant BC as Business Central
CE->>BC: neue Firma anlegen
BC-->>CE: Antwort mit Kontaktnummer und BC System-ID
Note over CE: Rückmeldung trägt beides<br/>an der Firma nach
Warum das der wichtigste Schritt der Kette ist
Die BC System-ID ist mehr als eine technische Kennung — sie ist der Nachweis, dass die
Firma im ERP angekommen ist. Solange sie leer ist, gilt die Firma als „noch nicht in
BC". Erst wenn sie gefüllt ist, ändert sich das Verhalten der gesamten Kette:
| vorher | nachher |
|---|
| BC Kontaktnummer | leer | gefüllt |
| BC System-ID | leer | gefüllt |
| Zuständig für Übertragungen | Neu nach BC | Änderungen nach BC |
| Kontakte dieser Firma | dürfen nicht freigegeben werden | dürfen freigegeben werden |
Genau darauf baut die Freigaberegel auf: Ein gesetztes Häkchen bei Sync zu BC bedeutet
nur „soll übertragen werden". Eine gefüllte BC System-ID bedeutet „ist übertragen".
Siehe Freigabe nach Business Central.
Welche Felder kommen zurück?
| Feld in Business Central | Feld in Customer Engagement |
|---|
| Nr. | BC Kontaktnummer |
| id | BC System-ID |
Mehr nicht. Alle fachlichen Daten hat CE ja bereits — sie wurden gerade erst
dorthin übertragen.
Worauf zu achten ist
Es dauert zwei Durchläufe
Anlage und Rückmeldung gehören zusammen, laufen aber nacheinander. Wer eine Firma
freigibt und gleich danach in CE nachsieht, findet die BC System-ID unter Umständen noch
nicht — und kann die zugehörigen Kontakte deshalb noch nicht freigeben. Nach spätestens
zwei Durchläufen ist der Zustand stabil.
Bleibt die Rückmeldung aus, hängt die Firma fest
Ohne gefüllte BC System-ID gilt die Firma weiterhin als „nicht in BC vorhanden". Sie
würde beim nächsten Lauf erneut zur Anlage angeboten — dass dabei keine Dublette
entsteht, verhindert die Wiedererkennung über die Dataverse Id. Bleibt der Zustand über
mehrere Läufe bestehen, ist das ein Hinweis auf einen Fehler bei der Übertragung und
sollte geprüft werden.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → accountsresponsefrombc.
3.4 - Änderungen nach Business Central übertragen
Änderungen an bereits im ERP bekannten Firmen werden von Customer Engagement nach Business Central übertragen.
| |
|---|
| Richtung | Customer Engagement → Business Central |
| Wann | alle 2 Minuten |
| Betrifft | freigegebene Firmen, die in BC bereits existieren |
| Technisch | Job accountupdatesfromce (520), Mapping CEAccountUpdates |
Was passiert hier?
Sobald eine Firma in beiden Systemen existiert, hält dieser Schritt Business Central auf
dem Stand von Customer Engagement. Er ist das Gegenstück zu
Aus BC übernehmen — dieselben Felder, nur andersherum.
Erfasst werden Firmen, bei denen beides zutrifft:
- Sync zu BC steht auf „Ja"
- das Feld BC System-ID ist gefüllt — BC kennt die Firma also
Ist die BC System-ID leer, greift stattdessen Neu nach BC. Die beiden
Schritte schließen sich gegenseitig aus.
Welche Felder gehen nach BC?
| Feld in Customer Engagement | Feld in Business Central |
|---|
| Name 1 (BC) | Name |
| Name 2 (BC) | Name 2 |
| Straße 1 | Adresse |
| Straße 2 | Adresse 2 |
| Postleitzahl | PLZ |
| Ort | Ort |
| Land | Länder-/Regionscode |
| Telefon | Telefonnr. |
| E-Mail | E-Mail |
| Website | Homepage |
| Verkäufer (BC) | Verkäufercode |
Elf fachliche Felder — dieselben, die auch in die Gegenrichtung laufen.
Worauf zu achten ist
Es gibt keine Konfliktauflösung
Diese elf Felder werden in beide Richtungen abgeglichen. Wird dieselbe Firma
gleichzeitig in CE und in BC geändert, gewinnt schlicht der spätere Schreibvorgang. Ein
Abgleich Feld für Feld oder eine Warnung findet nicht statt.
Anrede und Kontaktart werden bewusst nicht überschrieben
Anders als beim Anlegen schickt dieser Schritt Kontaktart und Anredecode nicht mit.
Wird die Anrede in BC angepasst, bleibt sie erhalten. Würde sie mitgeschickt, würde sie
bei jedem Lauf wieder auf den Vorgabewert zurückgesetzt.
ERP-Felder bleiben unberührt
Debitornummer, Kreditornummer, Debitorrabattgruppe und übergeordnete Firma werden nicht
zurückgeschrieben. Wer diese Felder in CE ändert, ändert nichts in BC — und die
Änderung wird beim nächsten Abgleich aus BC überschrieben.
Deaktivierte Firmen bleiben erfasst
Wurde eine Firma in BC gelöscht und daraufhin in CE
deaktiviert, bleiben Freigabe und BC System-ID stehen. Da dieser
Schritt nur diese beiden Felder prüft, fällt der Datensatz weiterhin in seinen
Zuständigkeitsbereich.
Änderungserkennung über Change Tracking
Anders als die Schritte aus BC arbeitet dieser Schritt nicht mit einem Watermark-Feld,
sondern mit dem Change Tracking von Dataverse: Er erhält von der Plattform nur die
seit dem letzten Lauf geänderten Datensätze und filtert diese zusätzlich über Freigabe
und BC System-ID.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → accountupdatesfromce.
3.5 - Löschung in Business Central nachvollziehen
Wird eine Firma im ERP gelöscht, wird sie in Customer Engagement deaktiviert — nicht gelöscht.
| |
|---|
| Richtung | Business Central → Customer Engagement |
| Wann | alle 2 Minuten |
| Betrifft | Firmen, die in BC gelöscht wurden |
| Technisch | Job accountsfrombcdelete (420), Mapping BCAccountsDelete |
Was passiert hier?
Wird eine Firma in Business Central gelöscht, wird sie in Customer Engagement
deaktiviert — sie bleibt also erhalten und wird nur inaktiv gesetzt. Als Statusgrund
wird festgehalten, dass die Löschung aus BC kam.
flowchart LR
A["Firma in BC gelöscht"] --> B["Eintrag im<br/>Änderungsprotokoll von BC"]
B --> C["Abgleich liest das Protokoll"]
C --> D["Firma in CE wird<br/><b>deaktiviert</b>"]
Der Weg über das Änderungsprotokoll ist notwendig, weil eine gelöschte Firma in der
normalen Schnittstelle nicht mehr auftaucht — sie könnte durch Abgleich gar nicht mehr
gefunden werden. Das Protokoll hält dagegen fest, dass etwas gelöscht wurde.
Wiedererkannt wird die Firma über die BC System-ID — anders als beim
Übernehmen aus BC, das über die BC Kontaktnummer geht. Das Protokoll
kennt nur die System-ID des gelöschten Datensatzes.
Warum nicht gelöscht wird
An einer Firma hängen Kontakte, Verkaufschancen, Angebote und Aktivitäten. Ein hartes
Löschen würde diese Historie zerstören oder von Dataverse ohnehin abgelehnt. Die Firma
inaktiv zu setzen erhält den Zusammenhang und macht zugleich sichtbar, dass sie im ERP
nicht mehr existiert.
Anders verhalten sich Angebotspositionen: Sie werden tatsächlich gelöscht, weil sie
vollständig aus BC nachgeführt werden. Angebote selbst werden storniert. Siehe
Datenfluss.
Was sich an der Firma ändert
| Feld | Wert danach |
|---|
| Status | Inaktiv |
| Statusgrund | „in Business Central gelöscht" |
Alle übrigen Felder bleiben unverändert — auch Sync zu BC und die
BC System-ID.
Worauf zu achten ist
Die Firma bleibt im Abgleich nach BC
Da Freigabe und BC System-ID stehen bleiben, fällt die deaktivierte Firma weiterhin in
den Zuständigkeitsbereich von Änderungen nach BC — dieser Schritt
prüft nur diese beiden Felder, nicht den Status.
Reaktivieren geht nicht automatisch
Wird die Firma in BC erneut angelegt, bekommt sie dort eine neue System-ID und
Kontaktnummer. Sie kommt dann als neue Firma nach CE — die deaktivierte bleibt
daneben stehen. Eine automatische Zusammenführung gibt es nicht.
Dasselbe Verhalten bei Kontakt und Produkt
Kontakte (contactsfrombcdelete, 440) und Produkte (productsfrombcdelete, 450) werden
nach demselben Muster deaktiviert statt gelöscht.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → accountsfrombcdelete.
4 - Kontakt
Wie Kontakte zwischen Customer Engagement und Business Central abgeglichen werden — Gesamtbild und die fünf Schritte im Detail.
Kontakte werden nach demselben Muster abgeglichen wie Firmen: in beide
Richtungen, im Zwei-Minuten-Takt, gesteuert über die Freigabe Sync zu BC und die
BC System-ID.
Ein Unterschied ist aber grundlegend: Ein Kontakt hängt an seiner Firma. Business
Central kann einen Kontakt nur anlegen, wenn dessen Firma dort bereits existiert.
Das prägt den gesamten Ablauf.
Der Kreislauf
flowchart TB
START(["Kontakt entsteht"]) --> Q{"Wo?"}
Q -->|"in CE angelegt"| C0{"Firma bereits<br/>in BC?"}
Q -->|"in BC angelegt"| B1["<b>Aus BC übernehmen</b><br/>Kontakt erscheint in CE"]
C0 -->|nein| BLOCK["Freigabe wird abgelehnt —<br/>erst die Firma übertragen"]
C0 -->|ja| C1["Feld <b>BC System-ID</b><br/>ist noch leer"]
C1 --> C2{"<b>Sync zu BC</b><br/>freigegeben?"}
C2 -->|nein| WAIT["Kontakt bleibt in CE"]
C2 -->|ja| C3["<b>Neu nach BC</b><br/>Kontakt wird in BC angelegt"]
C3 --> C4["<b>Rückmeldung aus BC</b><br/>BC Kontaktnummer, BC System-ID<br/>und Adressdaten kommen zurück"]
B1 --> SYNC["Kontakt existiert in beiden Systemen"]
C4 --> SYNC
SYNC --> U1["Änderung in CE<br/><b>Änderungen nach BC</b>"]
SYNC --> U2["Änderung in BC<br/><b>Aus BC übernehmen</b>"]
U1 --> SYNC
U2 --> SYNC
SYNC --> D1["Kontakt in BC gelöscht"]
D1 --> D2["<b>Löschung aus BC</b><br/>Kontakt in CE wird deaktiviert"]Erst die Firma, dann der Kontakt
Das ist die zentrale Regel — und der wichtigste Unterschied zur Firma:
Ein Kontakt darf erst freigegeben werden, wenn die BC System-ID seiner Firma
gefüllt ist.
Ein gesetztes Häkchen bei Sync zu BC an der Firma genügt nicht. Es bedeutet nur
„soll übertragen werden". Erst die gefüllte BC System-ID beweist, dass die Firma im ERP
angekommen ist. Die Lösung setzt das aktiv durch: Die Freigabe eines Kontakts wird
abgelehnt, solange die Firma nicht nachweislich in BC existiert. Dasselbe gilt beim
Umhängen eines Kontakts an eine andere Firma.
Ausführlich beschrieben ist die Regel unter
Freigabe nach Business Central.
Die Weiche: das Feld „BC System-ID"
Wie bei der Firma entscheidet die BC System-ID, welcher Schritt greift:
Beide setzen zusätzlich die Freigabe über Sync zu BC voraus.
Welche Felder laufen in welche Richtung?
| Feld in CE | Aus BC übernehmen | Neu nach BC | Änderungen nach BC |
|---|
| Vorname, Zweiter Vorname, Nachname | ✓ | ✓ | ✓ |
| Anrede (BC) | ✓ | ✓ | ✓ |
| Sprache | ✓ | ✓ | ✓ |
| Straße 1 / Straße 2 | ✓ | ✓ | ✓ |
| Postleitzahl / Ort | ✓ | ✓ | ✓ |
| Land | ✓ | ✓ | ✓ |
| Geschäftlich (Telefon) | ✓ | ✓ | ✓ |
| Mobiltelefon | ✓ | ✓ | ✓ |
| E-Mail | ✓ | ✓ | ✓ |
| Firmenname (übergeordnete Firma) | ✓ | ✓ | ✓ |
| Position (BC) | ✓ | – | – |
| Verkäufer (BC) | – | ✓ | ✓ |
| Sync zu BC | ✓ | – | – |
| BC Kontaktnummer | ✓ | – | – |
| BC System-ID | ✓ | – | – |
Zwölf Felder laufen glatt in beide Richtungen. Die drei hervorgehobenen verdienen einen
zweiten Blick.
Die übergeordnete Firma ist hier bidirektional
Beim Kontakt wird die Zuordnung zur Firma in beide Richtungen abgeglichen — anders
als bei der Firma, wo die übergeordnete Firma nur aus BC kommt. Wird ein Kontakt in CE
an eine andere Firma gehängt, geht das nach BC; und umgekehrt.
Aufgelöst wird über die BC Kontaktnummer der Firma. Fehlt sie — weil die Firma noch
nicht in BC ist —, kann die Zuordnung nicht gebildet werden. Genau deshalb greift die
Freigaberegel oben.
Zwei Felder laufen nur in eine Richtung
| Feld | Richtung | Konsequenz |
|---|
| Position (BC) — die Organisationsebene aus BC | nur BC → CE | Eine Änderung in CE geht nicht nach BC und wird beim nächsten Abgleich überschrieben |
| Verkäufer (BC) | nur CE → BC | Der in BC hinterlegte Verkäufer wird beim Übernehmen nicht nach CE geholt |
Die Funktion (Position) wird nicht übertragen
Das Standardfeld Position (die Funktion als Freitext) ist in keinem der Kontakt-Schritte
gemappt. Es bleibt in Customer Engagement und wird weder angelegt noch geändert nach BC
geschickt.
Was in der Praxis zu beachten ist
Zwei Felder heißen fast gleich
Am Kontakt gibt es Position (Standardfeld, freier Text, die Funktion im Unternehmen)
und Position (BC) (Verweis auf die Organisationsebenen aus Business Central). Nur
Position (BC) wird abgeglichen (BC → CE); die Funktion als Freitext bleibt in CE.
Beim Prüfen eines Kontakts also genau hinsehen, welches der beiden gemeint ist.
Aus BC übernommene Kontakte sind automatisch freigegeben
Wie bei der Firma wird Sync zu BC beim Übernehmen aus BC auf „Ja" gesetzt. Für diese
Kontakte gibt es also keine bewusste Freigabeentscheidung mehr.
Deaktivierte Kontakte bleiben im Abgleich
Wird ein Kontakt in BC gelöscht, wird er in CE nur deaktiviert — Freigabe und
BC System-ID bleiben stehen. Änderungen nach BC prüft nur diese
beiden Felder und erfasst den Datensatz deshalb weiterhin.
Unterschiede zur Firma auf einen Blick
| Firma | Kontakt |
|---|
| Kontaktart in BC | Company | Person |
| Übergeordnete Firma | nur BC → CE | bidirektional |
| Name | Name 1 / Name 2 (BC), Firmenname bleibt unberührt | Vorname / Zweiter Vorname / Nachname, Standardfelder |
| Rückmeldung aus BC | 2 Felder (Nummer, Id) | 9 Felder — zusätzlich Adressdaten |
| Freigabe abhängig von | — | BC System-ID der Firma |
| Anrede | fester Vorgabewert MANDANT | Verweis auf die BC-Anredeschlüssel |
Technische Zuordnung
Jobs und Mappings dieser Kette
Beteiligte Tabellen: Dataverse contact ⇄ BC API Page
singhammerITConsulting/dyce/v2.0/acdcontacts; Löschungen über
singhammerITConsulting/dyce/v2.0/acdlogentries.
Schlüssel je Schritt
| Schritt | Schlüssel im Ziel | Typ |
|---|
| Aus BC übernehmen | wysa_bccontactnumber ← BC number | CustomKey wysa_bccodekey |
| Neu nach BC | BC dataverseId ← CE contactid | Filter |
| Rückmeldung aus BC | CE contactid aus der Antwortnachricht | PrimaryKey |
| Änderungen nach BC | BC id ← CE wysa_bcsystemid | Id |
| Löschung aus BC | wysa_bcsystemid ← Log recordId | CustomKey wysa_bcsystemidkey |
Identisch zur Firma.
Auflösung von Referenzen
Der Kontakt löst mehr Referenzen auf als die Firma — fünf statt drei:
| CE-Feld | Werteliste | Codefeld | Stammdaten-Job |
|---|
Land (wysa_address1_countryid) | wysa_country | wysa_bccode | countriesfrombc (110) |
Sprache (wysa_language) | wysa_language | wysa_bccode | languagesfrombc (115) |
Anrede BC (wysa_salutationbcid) | wysa_bcsalutation | wysa_code | salutationsfrombc (120) |
Verkäufer BC (wysa_bcsalespersonid) | wysa_bcsalesperson | wysa_code | salespersonsfrombc (130) |
Position BC (wysa_bcpositionid) | wysa_bcposition | wysa_code | positionsfrombc (135) |
Firma (parentcustomerid) | account | wysa_bccontactnumber | — |
Die Stammdaten-Jobs 110 – 135 laufen vor den Kontakt-Jobs (240 / 430), sodass die
Wertelisten innerhalb desselben Laufs aktuell sind.
4.1 - Kontakte aus Business Central übernehmen
Neue und geänderte Kontakte aus dem ERP erscheinen in Customer Engagement.
| |
|---|
| Richtung | Business Central → Customer Engagement |
| Wann | alle 2 Minuten |
| Betrifft | alle Kontakte, die in BC seit dem letzten Lauf geändert wurden |
| Technisch | Job contactsfrombc (430), Mapping BCContacts |
Was passiert hier?
Wird in Business Central ein Kontakt angelegt oder geändert, erscheint er kurz darauf in
Customer Engagement. Existiert der Kontakt dort schon, werden seine Felder aktualisiert;
existiert er noch nicht, wird er neu angelegt.
Wiedererkannt wird ein Kontakt an seiner BC Kontaktnummer — nicht am Namen.
Der Abgleich holt bei jedem Lauf nur, was sich seit dem letzten Mal geändert hat.
Welche Felder kommen an?
| Feld in Business Central | Feld in Customer Engagement | Anmerkung |
|---|
| Nr. | BC Kontaktnummer | Erkennungsmerkmal — verbindet beide Systeme |
| id | BC System-ID | technischer Schlüssel des ERP |
| Vorname | Vorname | |
| Zweiter Vorname | Zweiter Vorname | |
| Nachname | Nachname | |
| Anredecode | Anrede (BC) | wird zur Verknüpfung auf die BC-Anredeschlüssel aufgelöst |
| Sprachcode | Sprache | wird zur Verknüpfung auf die Sprachliste aufgelöst |
| Organisationsebene | Position (BC) | wird zur Verknüpfung aufgelöst — nur aus BC |
| Unternehmensname | Firmenname (übergeordnete Firma) | wird über die BC Kontaktnummer der Firma aufgelöst |
| Adresse | Straße 1 | |
| Adresse 2 | Straße 2 | |
| PLZ | Postleitzahl | |
| Ort | Ort | |
| Länder-/Regionscode | Land | wird zur Verknüpfung auf die Länderliste aufgelöst |
| Telefonnr. | Geschäftlich (Telefon) | |
| Mobiltelefonnr. | Mobiltelefon | |
| E-Mail | E-Mail | |
| — | Sync zu BC | wird automatisch auf „Ja" gesetzt |
Worauf zu achten ist
Die Firma muss zuerst da sein
Die Zuordnung zur Firma wird über deren BC Kontaktnummer hergestellt. Ist die Firma
in CE noch nicht vorhanden — etwa weil der Firmen-Abgleich noch nicht gelaufen ist —,
bleibt das Feld Firmenname am Kontakt leer. Da die Firmen-Jobs (410) vor den
Kontakt-Jobs (430) laufen, findet das normalerweise innerhalb desselben Laufs zusammen.
Der Verkäufer wird nicht mitgeholt
Anders als bei der Firma holt dieser Schritt den Verkäufer (BC) nicht aus BC ab —
obwohl er in der Gegenrichtung übertragen wird. Was in CE im Feld Verkäufer (BC) steht,
stammt also aus CE selbst, nicht aus dem ERP.
Die Funktion wird nicht mitgeholt
Auch das Standardfeld Position (die Funktion als Freitext) wird nicht aus BC geholt.
Übertragen wird nur Position (BC), die Organisationsebene — das ist ein anderes
Feld. Siehe die Warnung in der Kontakt-Übersicht.
Der Kontakt wird automatisch für BC freigegeben
Das Feld Sync zu BC wird auf „Ja" gesetzt. Ab sofort werden also auch Änderungen aus
CE zurück nach BC übertragen.
Verknüpfungen brauchen aktuelle Stammdaten
Anrede, Sprache, Organisationsebene und Land kommen aus BC als Kürzel und werden in CE
zu Verknüpfungen aufgelöst. Fehlt das passende Stammdatum, bleibt das Feld leer. Die
Stammdatenlisten werden vorher abgeglichen.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → contactsfrombc.
4.2 - Neue Kontakte nach Business Central übertragen
In Customer Engagement angelegte und freigegebene Kontakte werden im ERP angelegt.
| |
|---|
| Richtung | Customer Engagement → Business Central |
| Wann | alle 2 Minuten |
| Betrifft | Kontakte, die freigegeben sind und in BC noch nicht existieren |
| Technisch | Job contactsnewfromce (240), Mapping CEContacts |
Was passiert hier?
Der Vertrieb legt einen Kontakt in Customer Engagement an. Sobald das Feld
Sync zu BC auf „Ja" gesetzt ist, wird er beim nächsten Lauf in Business Central
angelegt — als Personenkontakt, zugeordnet zu seiner Firma.
Zwei Bedingungen müssen erfüllt sein:
- Sync zu BC steht auf „Ja"
- das Feld BC System-ID ist noch leer
Ist die BC System-ID bereits gefüllt, greift stattdessen
Änderungen nach BC.
Vorher: die Firma muss in BC sein
Business Central kann einen Kontakt nur anlegen, wenn dessen Firma dort schon existiert.
Deshalb lässt sich ein Kontakt gar nicht erst freigeben, solange die BC System-ID
seiner Firma leer ist — die Lösung lehnt die Freigabe ab.
flowchart LR
A["Kontakt in CE angelegt"] --> B{"BC System-ID<br/>der <b>Firma</b> gefüllt?"}
B -->|nein| C["Freigabe wird abgelehnt"]
B -->|ja| D{"Sync zu BC<br/>= Ja?"}
D -->|nein| E["nichts passiert"]
D -->|ja| F["Kontakt wird in BC angelegt"]
F --> G["Rückmeldung aus BC"]Wird die Firma freigegeben und sind ihre Kontakte ebenfalls freigegeben, ordnet sich das
über die Ausführungsreihenfolge von selbst: Die Firma wird in Durchlauf 1 angelegt und
zurückgemeldet, die Kontakte folgen im nächsten Durchlauf. Siehe
Freigabe nach Business Central.
Welche Felder gehen nach BC?
| Feld in Customer Engagement | Feld in Business Central | Anmerkung |
|---|
| Vorname | Vorname | |
| Zweiter Vorname | Zweiter Vorname | |
| Nachname | Nachname | |
| Anrede (BC) | Anredecode | die Verknüpfung wird zum BC-Kürzel aufgelöst |
| Sprache | Sprachcode | die Verknüpfung wird zum BC-Kürzel aufgelöst |
| Firmenname (übergeordnete Firma) | Unternehmensname | wird zur BC Kontaktnummer der Firma aufgelöst |
| Verkäufer (BC) | Verkäufercode | die Verknüpfung wird zum BC-Kürzel aufgelöst |
| Straße 1 | Adresse | |
| Straße 2 | Adresse 2 | |
| Postleitzahl | PLZ | |
| Ort | Ort | |
| Land | Länder-/Regionscode | die Verknüpfung wird zum BC-Kürzel aufgelöst |
| Geschäftlich (Telefon) | Telefonnr. | |
| Mobiltelefon | Mobiltelefonnr. | |
| E-Mail | E-Mail | |
| (Kontakt-Datensatz) | Dataverse Id | technische Klammer |
| — | Kontaktart | fest auf „Person" |
Worauf zu achten ist
Die Funktion wird nicht mitgeschickt
Das Standardfeld Position (die Funktion als Freitext) ist weder bei der Neuanlage
noch beim Ändern Teil der Übertragung. Die Funktion bleibt in CE.
Die Organisationsebene wird nicht mitgeschickt
Position (BC) — die Organisationsebene — läuft nur von BC nach CE. Was in CE in
diesem Feld steht, hat auf BC keine Wirkung.
Ohne Firma keine Zuordnung
Die Zuordnung zur Firma wird über deren BC Kontaktnummer aufgelöst. Ist sie leer,
kommt der Kontakt ohne Firmenzuordnung in BC an. Die Freigaberegel verhindert das
normalerweise — beim Umhängen an eine noch nicht übertragene Firma ist aber Vorsicht
geboten.
Doppelte Anlage ist ausgeschlossen
Läuft der Abgleich zweimal, bevor die Rückmeldung eingetroffen ist, entsteht in BC
trotzdem kein zweiter Kontakt. Der Datensatz wird über die in BC hinterlegte
Dataverse Id wiedererkannt.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → contactsnewfromce.
4.3 - Rückmeldung aus Business Central
Nach der Anlage im ERP kommen Kontaktnummer, BC System-ID und die von BC ergänzten Adressdaten zurück.
| |
|---|
| Richtung | Business Central → Customer Engagement |
| Wann | unmittelbar nach jeder Neuanlage — kein eigener Zeitplan |
| Betrifft | genau die Kontakte, die gerade in BC angelegt wurden |
| Technisch | Job contactsresponsefrombc (241), Mapping BCContactsResponse |
Was passiert hier?
Wenn ein Kontakt neu nach BC übertragen wird, vergibt Business Central
zwei Werte, die Customer Engagement noch nicht kennen kann:
- die BC Kontaktnummer aus dem Nummernkreis des ERP
- die BC System-ID, den technischen Schlüssel des Datensatzes
Beim Kontakt kommt aber noch etwas hinzu: Business Central schickt auch die
Adressdaten zurück.
Warum Adressdaten zurückkommen
Legt man in Business Central einen Personenkontakt an und ordnet ihn einem Unternehmen
zu, übernimmt BC dessen Adresse, sofern der Kontakt keine eigene hat. Der Datensatz in
BC sieht danach also anders aus, als CE ihn abgeschickt hat.
Damit beide Systeme übereinstimmen, holt dieser Schritt die Adressdaten in dem Zustand
zurück, den BC ihnen gegeben hat, und schreibt sie in CE.
sequenceDiagram
participant CE as Customer Engagement
participant BC as Business Central
CE->>BC: neuer Kontakt (ggf. ohne Adresse)
Note over BC: BC ergänzt die Adresse<br/>aus dem Unternehmen
BC-->>CE: Nummer, System-ID<br/>und die ergänzte Adresse
Note over CE: Kontakt wird nachgezogen
Bei der Firma ist das nicht nötig — dort kommen nur
Nummer und Id zurück.
Welche Felder kommen zurück?
| Feld in Business Central | Feld in Customer Engagement |
|---|
| Nr. | BC Kontaktnummer |
| id | BC System-ID |
| Adresse | Straße 1 |
| Adresse 2 | Straße 2 |
| PLZ | Postleitzahl |
| Ort | Ort |
| Länder-/Regionscode | Land |
| Telefonnr. | Geschäftlich (Telefon) |
Warum das der wichtigste Schritt der Kette ist
Die BC System-ID ist der Nachweis, dass der Kontakt im ERP angekommen ist. Erst wenn
sie gefüllt ist, ändert sich das Verhalten der Kette:
Worauf zu achten ist
In CE erfasste Adressdaten können überschrieben werden
Da BC die Adresse ergänzt und zurückschickt, kann eine in CE erfasste abweichende
Adresse durch die BC-Fassung ersetzt werden. Wer eine vom Firmensitz abweichende
Kontaktadresse pflegt, sollte nach der ersten Übertragung prüfen, ob sie erhalten
geblieben ist.
Es dauert zwei Durchläufe
Anlage und Rückmeldung laufen nacheinander. Bis BC Kontaktnummer und System-ID in CE
stehen, vergeht ein weiterer Durchlauf.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → contactsresponsefrombc.
4.4 - Änderungen nach Business Central übertragen
Änderungen an bereits im ERP bekannten Kontakten werden von Customer Engagement nach Business Central übertragen.
| |
|---|
| Richtung | Customer Engagement → Business Central |
| Wann | alle 2 Minuten |
| Betrifft | freigegebene Kontakte, die in BC bereits existieren |
| Technisch | Job contactupdatesfromce (530), Mapping CEContactsUpdates |
Was passiert hier?
Sobald ein Kontakt in beiden Systemen existiert, hält dieser Schritt Business Central auf
dem Stand von Customer Engagement.
Erfasst werden Kontakte, bei denen beides zutrifft:
- Sync zu BC steht auf „Ja"
- das Feld BC System-ID ist gefüllt
Ist die BC System-ID leer, greift stattdessen Neu nach BC. Die beiden
Schritte schließen sich gegenseitig aus.
Welche Felder gehen nach BC?
| Feld in Customer Engagement | Feld in Business Central |
|---|
| Vorname | Vorname |
| Zweiter Vorname | Zweiter Vorname |
| Nachname | Nachname |
| Anrede (BC) | Anredecode |
| Sprache | Sprachcode |
| Firmenname (übergeordnete Firma) | Unternehmensname |
| Verkäufer (BC) | Verkäufercode |
| Straße 1 | Adresse |
| Straße 2 | Adresse 2 |
| Postleitzahl | PLZ |
| Ort | Ort |
| Land | Länder-/Regionscode |
| Geschäftlich (Telefon) | Telefonnr. |
| Mobiltelefon | Mobiltelefonnr. |
| E-Mail | E-Mail |
Worauf zu achten ist
Die Funktion wird nicht übertragen
Position (die Funktion als Freitext) ist weder Teil der Neuanlage
noch dieses Schritts. Die Funktion eines Kontakts wird also in keine Richtung
abgeglichen — in BC gepflegte Werte bleiben dort, in CE gepflegte bleiben in CE.
Umhängen an eine andere Firma geht nach BC
Anders als bei der Firma ist die Zuordnung zur übergeordneten Firma beim Kontakt
bidirektional. Wird ein Kontakt in CE an eine andere Firma gehängt, wird das nach BC
übertragen — aufgelöst über die BC Kontaktnummer der neuen Firma.
Ist die neue Firma noch nicht in BC, kann die Zuordnung nicht gebildet werden. Die
Lösung lehnt das Umhängen deshalb ab, solange die BC System-ID der neuen Firma leer ist
— siehe Freigabe nach Business Central.
Die Organisationsebene bleibt unberührt
Position (BC) — die Organisationsebene — wird nicht zurückgeschrieben. Sie kommt nur
aus BC. Eine Änderung in CE hat keine Wirkung und wird beim nächsten Abgleich
überschrieben.
Die Kontaktart wird bewusst nicht überschrieben
Anders als beim Anlegen schickt dieser Schritt die Kontaktart nicht mit. Eine in BC
vorgenommene Anpassung bleibt erhalten.
Es gibt keine Konfliktauflösung
Die fachlichen Felder werden in beide Richtungen abgeglichen. Wird derselbe Kontakt
gleichzeitig in CE und BC geändert, gewinnt der spätere Schreibvorgang.
Änderungserkennung über Change Tracking
Anders als die Schritte aus BC arbeitet dieser Schritt nicht mit einem Watermark-Feld,
sondern mit dem Change Tracking von Dataverse: Er erhält von der Plattform nur die
seit dem letzten Lauf geänderten Datensätze und filtert diese zusätzlich über Freigabe
und BC System-ID.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → contactupdatesfromce.
4.5 - Löschung in Business Central nachvollziehen
Wird ein Kontakt im ERP gelöscht, wird er in Customer Engagement deaktiviert — nicht gelöscht.
| |
|---|
| Richtung | Business Central → Customer Engagement |
| Wann | alle 2 Minuten |
| Betrifft | Kontakte, die in BC gelöscht wurden |
| Technisch | Job contactsfrombcdelete (440), Mapping BCContactsDelete |
Was passiert hier?
Wird ein Kontakt in Business Central gelöscht, wird er in Customer Engagement
deaktiviert — er bleibt also erhalten und wird nur inaktiv gesetzt.
Der Weg führt über das Änderungsprotokoll von BC: Ein gelöschter Kontakt taucht in
der normalen Schnittstelle nicht mehr auf und könnte durch Abgleich gar nicht gefunden
werden. Das Protokoll hält dagegen fest, dass etwas gelöscht wurde.
Wiedererkannt wird der Kontakt über die BC System-ID — anders als beim
Übernehmen aus BC, das über die BC Kontaktnummer geht. Das Protokoll
kennt nur die System-ID des gelöschten Datensatzes.
Firma und Kontakt teilen sich dieselbe BC-Tabelle
In Business Central liegen Firmenkontakte und Personenkontakte in derselben Tabelle.
Das Änderungsprotokoll unterscheidet sie nicht — beim Löschen entsteht in beiden Fällen
derselbe Eintragstyp.
Deshalb lesen zwei Jobs dieselben Protokolleinträge und sortieren sie über die
BC System-ID selbst auseinander:
flowchart LR
A["Kontakt oder Firma<br/>in BC gelöscht"] --> B["Eintrag im<br/>Änderungsprotokoll"]
B --> C["<b>Löschung aus BC (Firma)</b><br/>sucht in den Firmen"]
B --> D["<b>Löschung aus BC (Kontakt)</b><br/>sucht in den Kontakten"]
C --> E["gefunden → deaktivieren"]
C --> F["nicht gefunden →<br/>nichts passiert"]
D --> G["gefunden → deaktivieren"]
D --> H["nicht gefunden →<br/>nichts passiert"]
Ein gelöschter Personenkontakt wird nur vom Kontakt-Job gefunden, eine gelöschte Firma
nur vom Firmen-Job. Der jeweils andere läuft ins Leere und tut nichts. Das ist kein
Fehler, sondern der Mechanismus.
Warum nicht gelöscht wird
An einem Kontakt hängen Verkaufschancen, Angebote und Aktivitäten. Ein hartes Löschen
würde diese Historie zerstören. Den Kontakt inaktiv zu setzen erhält den Zusammenhang
und macht zugleich sichtbar, dass er im ERP nicht mehr existiert.
Was sich am Kontakt ändert
| Feld | Wert danach |
|---|
| Status | Inaktiv |
| Statusgrund | „in Business Central gelöscht" |
Alle übrigen Felder bleiben unverändert — auch Sync zu BC und die
BC System-ID.
Der Kontakt bleibt im Abgleich nach BC
Da Freigabe und BC System-ID stehen bleiben, fällt der deaktivierte Kontakt weiterhin in
den Zuständigkeitsbereich von Änderungen nach BC — dieser Schritt
prüft nur diese beiden Felder, nicht den Status.
Reaktivieren geht nicht automatisch
Wird der Kontakt in BC erneut angelegt, bekommt er dort eine neue System-ID und
Kontaktnummer. Er kommt dann als neuer Kontakt nach CE — der deaktivierte bleibt
daneben stehen. Eine automatische Zusammenführung gibt es nicht.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → contactsfrombcdelete.
5 - Verkaufschance
Wie Verkaufschancen und ihre Positionen nach Business Central übertragen werden — Gesamtbild und die Schritte im Detail.
Die Verkaufschance ist die dritte Stufe der Freigabekette: Firma → Kontakt →
Verkaufschance. Und sie ist der erste Datenbereich, der grundlegend anders funktioniert
als Firma und Kontakt:
Die Verkaufschance läuft nur von Customer Engagement nach Business Central.
Es gibt keine Übernahme aus BC und keine Löschverarbeitung. Verkaufschancen entstehen im
Vertrieb, nicht im ERP — Business Central braucht sie nur, um daraus Angebote zu
erzeugen.
Dazu kommt eine zweite, eigene Kette für die Positionen
(Verkaufschancenprodukte), die anders getaktet ist und ein anderes Freigabefeld nutzt.
Der Ablauf
flowchart TB
subgraph VC["Verkaufschance"]
A["Verkaufschance in CE angelegt"] --> B{"Kontakt bereits<br/>in BC?"}
B -->|nein| BLOCK["Freigabe wird abgelehnt"]
B -->|ja| C{"<b>Sync zu BC</b><br/>freigegeben?"}
C -->|nein| WAIT["bleibt in CE"]
C -->|ja| D["<b>Neu nach BC</b><br/>Verkaufschance wird angelegt"]
D --> E["<b>Rückmeldung aus BC</b><br/>BC Verkaufschancennummer<br/>und BC System-ID"]
end
subgraph POS["Positionen"]
E --> F{"<b>Sync zu BC</b> an der<br/>Position freigegeben?"}
F -->|ja| G["<b>Positionen neu nach BC</b>"]
G --> H["<b>Rückmeldung Positionen</b><br/>BC System-ID der Position"]
H --> I["<b>Positionsänderungen nach BC</b><br/>Menge und Beträge"]
end
ELEM["<b>Kalkulationselemente aus BC</b><br/>füllen die Produktliste"] -.->|"Voraussetzung"| GErst Firma, dann Kontakt, dann Verkaufschance
Business Central kann eine Verkaufschance nur anlegen, wenn ihr Kontakt dort existiert —
und den Kontakt nur, wenn dessen Firma existiert. Die Freigaberegel setzt das in beiden
Stufen durch:
| Freizugeben | Voraussetzung |
|---|
| Kontakt | BC System-ID der Firma ist gefüllt |
| Verkaufschance | BC Kontaktnummer des Kontakts ist gefüllt |
Eine Verkaufschance ohne Kontakt kann gar nicht übertragen werden — die Freigabe wird
abgelehnt. Ausführlich unter
Freigabe nach Business Central.
Was nach der Anlage passiert — und was nicht
Für die Verkaufschance selbst gibt es keinen Änderungspfad
Anders als Firma und Kontakt hat die Verkaufschance keinen laufenden Abgleich.
Praktische Folge: Was nach der ersten Übertragung in CE an Thema, Firma, Kontakt oder
Verkäufer geändert wird, kommt nicht in Business Central an. Der dortige Stand
bleibt auf dem Zeitpunkt der Anlage stehen.
Die Positionen dagegen werden laufend abgeglichen — dafür ist
Positionsänderungen nach BC aktiv.
Zwei Freigabefelder mit unterschiedlichem Namen
Verkaufschance und Position tragen jeweils ein eigenes Feld Sync zu BC — technisch
sind es aber zwei verschieden benannte Felder:
| Datensatz | Anzeigename | Logical Name |
|---|
| Verkaufschance | Sync zu BC | wysa_sync2bc |
| Verkaufschancenprodukt | Sync zu BC | wysa_SynctoBC |
Beide arbeiten mit demselben Wert für „Ja". Beim Erstellen von Auswertungen oder
Automatisierungen ist die abweichende Schreibweise zu beachten — siehe
Datenmodell.
Positionen verweisen nicht auf Artikel, sondern auf Kalkulationselemente
Eine Verkaufschancenposition zeigt in CE auf einen Datensatz der Produkttabelle. Gefüllt
wird diese Tabelle über die Kalkulationselemente aus BC (190).
Für Positionen sind nur diese Elemente verwendbar — Business Central erwartet in der
Position einen Elementcode, keine Artikelnummer. Am Produkt kennzeichnet das Feld
Verkaufschancen-Element (wysa_OppElement), welche Datensätze dafür zulässig sind.
Welche Felder gehen nach BC?
Verkaufschance
| Feld in Customer Engagement | Feld in Business Central |
|---|
| Thema | Beschreibung |
| Beschreibung | Erweiterte Beschreibung |
| Voraussichtliches Abschlussdatum | Erwartetes Abschlussdatum |
| Voraussichtlicher Umsatz | Erwarteter Umsatz |
| Firma | Unternehmensnummer des Kontakts |
| Kontakt | Kontaktnummer |
| Verkäufer (BC) | Verkäufercode |
| (Link auf den CE-Datensatz) | Dynamics-Sales-Link |
Acht Felder — deutlich weniger als bei Firma und Kontakt. Business Central braucht von
einer Verkaufschance nur das Nötigste, um daraus ein Angebot zu erzeugen.
Business Central erhält einen Link zurück ins CRM
Eine Besonderheit dieses Bereichs: Die Übertragung erzeugt einen klickbaren Link auf
den Verkaufschancen-Datensatz in Customer Engagement und legt ihn in BC ab. Wer im ERP
an einer Verkaufschance arbeitet, kommt damit direkt in den zugehörigen CRM-Datensatz.
Bei Firma und Kontakt gibt es das nicht.
Position
| Feld in Customer Engagement | Feld in Business Central | Neu nach BC | Änderungen nach BC |
|---|
| Verkaufschance | Verkaufschancennummer | ✓ | ✓ |
| Produkt | Elementcode | ✓ | ✓ |
| Menge | Menge | ✓ | ✓ |
| BC Betrag | Betrag (LW) | ✓ | ✓ |
| BC Betrag inkl. MwSt. | Betrag inkl. MwSt. (LW) | ✓ | ✓ |
| Beschreibung | Beschreibung | ✓ | ✓ |
| Marge | Deckungsbeitrag (LW) | ✓ | ✓ |
Beide Schritte übertragen denselben Feldsatz; auch Beschreibung und Marge gehen bei
späteren Änderungen mit nach BC.
Unterschiede zu Firma und Kontakt
| Firma / Kontakt | Verkaufschance | Position |
|---|
| Richtung | bidirektional | nur CE → BC | nur CE → BC |
| Übernahme aus BC | ✓ | – | – |
| Änderungspfad | ✓ | – | ✓ |
| Löschverarbeitung | ✓ deaktivieren | – | – |
| Takt | alle 2 Minuten | alle 2 Minuten | alle 3 Minuten |
| Freigabefeld | wysa_sync2bc | wysa_sync2bc | wysa_SynctoBC |
Technische Zuordnung
Jobs und Mappings dieser Ketten
Beteiligte Tabellen:
| Dataverse | Business Central API Page |
|---|
opportunity | .../acdopportunities |
opportunityproduct | .../acdopportunitycalculationelements |
product | .../acdopportunityelements |
Alle API Pages unter singhammerITConsulting/dyce/v2.0/.
Schlüssel je Schritt
| Schritt | Schlüssel im Ziel | Typ |
|---|
| Neu nach BC | BC dataverseId ← CE opportunityid | Filter |
| Rückmeldung aus BC | CE opportunityid aus der Antwortnachricht | PrimaryKey |
| Kalkulationselemente aus BC | wysa_bccode ← BC code | CustomKey |
| Positionen neu nach BC | BC systemId ← CE wysa_bcsystemid | Id |
| Rückmeldung Positionen | CE opportunityproductid aus der Antwortnachricht | PrimaryKey |
| Positionsänderungen nach BC | BC id ← CE wysa_bcsystemid | Id |
Bemerkenswert: Die Verkaufschance folgt dem bekannten Muster aus
Firma und Kontakt — Anlage über dataverseId, danach über
die BC System-ID. Die Positionen tun das nicht: Sie verwenden schon bei der Anlage
KeyType: Id auf ein Feld, das der Filter des Jobs als leer voraussetzt. Es gibt bei
ihnen also keine Wiedererkennung über eine mitgeschickte CE-GUID. Was das für
wiederholte Läufe bedeutet, steht auf
Positionen neu nach BC.
Auflösung von Referenzen
| CE-Feld | Nachschlagetabelle | Nachschlagefeld |
|---|
Firma (parentaccountid) | account | wysa_bccontactnumber |
Kontakt (parentcontactid) | contact | wysa_bccontactnumber |
Verkäufer BC (wysa_bcsalespersonid) | wysa_bcsalesperson | wysa_code |
Verkaufschance (opportunityid) | opportunity | wysa_bcopportunitynumber |
Produkt (productid) | product | wysa_bccode |
Alle mit LookupType: Attribute und UseCache: true — außer der Verkaufschance: Sie
wird ohne Cache aufgelöst (UseCache: false), damit eine gerade erst zurückgemeldete
BC Verkaufschancennummer sofort gefunden wird. Die letzten beiden erklären, warum
die Reihenfolge zählt: Eine Position kann erst übertragen werden, wenn die
Verkaufschance ihre BC Verkaufschancennummer hat und das Produkt seinen BC Code — deshalb
laufen die Positions-Jobs (710 – 760) ganz am Ende und die Kalkulationselemente (190)
ganz am Anfang.
5.1 - Neue Verkaufschancen nach Business Central übertragen
In Customer Engagement angelegte und freigegebene Verkaufschancen werden im ERP angelegt.
| |
|---|
| Richtung | Customer Engagement → Business Central |
| Wann | alle 2 Minuten |
| Betrifft | Verkaufschancen, die freigegeben sind und in BC noch nicht existieren |
| Technisch | Job opportunitiesnewfromce (260), Mapping CEOpportunities |
Was passiert hier?
Der Vertrieb arbeitet die Verkaufschance in Customer Engagement aus. Sobald sie
kaufmännisch tragfähig ist und ein Angebot entstehen soll, wird Sync zu BC auf „Ja"
gesetzt — und die Verkaufschance beim nächsten Lauf in Business Central angelegt.
Zwei Bedingungen müssen erfüllt sein:
- Sync zu BC steht auf „Ja"
- das Feld BC System-ID ist noch leer
Unmittelbar danach läuft die Rückmeldung aus BC und trägt
BC Verkaufschancennummer und BC System-ID nach.
Vorher: der Kontakt muss in BC sein
Business Central hängt eine Verkaufschance an einen Kontakt. Existiert der dort nicht,
kann die Verkaufschance nicht angelegt werden. Die Lösung lehnt die Freigabe deshalb ab,
solange die BC Kontaktnummer des Kontakts leer ist — und ganz ohne Kontakt ohnehin.
flowchart LR
A["Verkaufschance in CE"] --> B{"Kontakt vorhanden?"}
B -->|nein| X["Freigabe wird abgelehnt"]
B -->|ja| C{"BC Kontaktnummer<br/>des Kontakts gefüllt?"}
C -->|nein| X
C -->|ja| D{"Sync zu BC = Ja?"}
D -->|nein| E["nichts passiert"]
D -->|ja| F["Verkaufschance wird<br/>in BC angelegt"]Das ist die dritte Stufe der Kette Firma → Kontakt → Verkaufschance, beschrieben unter
Freigabe nach Business Central.
Welche Felder gehen nach BC?
| Feld in Customer Engagement | Feld in Business Central | Anmerkung |
|---|
| Thema | Beschreibung | der Titel der Verkaufschance |
| Beschreibung | Erweiterte Beschreibung | der Freitext der Verkaufschance |
| Voraussichtliches Abschlussdatum | Erwartetes Abschlussdatum | |
| Voraussichtlicher Umsatz | Erwarteter Umsatz | in CE je nach Konfiguration berechnet |
| Firma | Unternehmensnummer des Kontakts | wird zur BC Kontaktnummer der Firma aufgelöst |
| Kontakt | Kontaktnummer | wird zur BC Kontaktnummer des Kontakts aufgelöst |
| Verkäufer (BC) | Verkäufercode | wird zum BC-Kürzel aufgelöst |
| (der CE-Datensatz selbst) | Dynamics-Sales-Link | klickbarer Link zurück ins CRM |
| (der CE-Datensatz selbst) | Dataverse Id | technische Klammer |
Neun Zuordnungen — die schlankste Übertragung der ganzen Integration. Business Central
braucht von einer Verkaufschance nur, was es zur Angebotserstellung benötigt.
Worauf zu achten ist
Business Central erhält einen Link zurück ins CRM
Die Übertragung baut aus der Datensatz-GUID einen vollständigen Deep Link auf die
Verkaufschance in Customer Engagement und legt ihn in BC im Feld Dynamics-Sales-Link
ab. Wer im ERP an der Verkaufschance arbeitet, springt damit direkt in den
CRM-Datensatz.
Der Link enthält die Umgebungsadresse
Die Basisadresse der Umgebung und die App-ID sind Teil der Mapping-Konfiguration und
werden je Umgebung gepflegt. Bereits erzeugte Links verweisen auf die Umgebung, in der
sie entstanden sind.
Nach der Anlage stehen die Daten in BC still
Es gibt keinen aktiven Änderungspfad für die Verkaufschance. Wird das Thema, die
Firma, der Kontakt oder der Verkäufer nachträglich in CE geändert, kommt das nicht in
Business Central an. Der dortige Stand bleibt auf dem Zeitpunkt der Anlage.
Die zugehörigen Positionen werden dagegen laufend
abgeglichen.
Der voraussichtliche Umsatz kann berechnet sein
Das übertragene Feld Voraussichtlicher Umsatz wird in CE je nach Konfiguration manuell
erfasst oder aus den Positionen bzw. dem führenden Angebot berechnet — siehe
Beträge und Margen. Übertragen wird der
Wert, der beim Lauf im Feld steht.
Doppelte Anlage ist ausgeschlossen
Läuft der Abgleich zweimal, bevor die Rückmeldung eingetroffen ist, entsteht in BC
trotzdem keine zweite Verkaufschance — der Datensatz wird über die in BC hinterlegte
Dataverse Id wiedererkannt.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → opportunitiesnewfromce.
5.2 - Rückmeldung aus Business Central
Nach der Anlage im ERP kommen Verkaufschancennummer und BC System-ID zurück nach Customer Engagement.
| |
|---|
| Richtung | Business Central → Customer Engagement |
| Wann | unmittelbar nach jeder Neuanlage — kein eigener Zeitplan |
| Betrifft | genau die Verkaufschancen, die gerade in BC angelegt wurden |
| Technisch | Job opportunitiesresponsefrombc (261), Mapping BCOpportunitiesResponse |
Was passiert hier?
Wenn eine Verkaufschance neu nach BC übertragen wird, vergibt
Business Central zwei Werte, die Customer Engagement noch nicht kennen kann:
- die BC Verkaufschancennummer aus dem Nummernkreis des ERP
- die BC System-ID, den technischen Schlüssel des Datensatzes
Dieser Schritt trägt beides in CE nach. Er wertet dabei die Antwort von Business Central
aus — es ist keine erneute Abfrage.
sequenceDiagram
participant CE as Customer Engagement
participant BC as Business Central
CE->>BC: neue Verkaufschance anlegen
BC-->>CE: Antwort mit Verkaufschancennummer<br/>und BC System-ID
Note over CE: Rückmeldung trägt beides<br/>an der Verkaufschance nach
Welche Felder kommen zurück?
| Feld in Business Central | Feld in Customer Engagement |
|---|
| Nr. | BC Verkaufschancennummer |
| id | BC System-ID |
Warum dieser Schritt die Positionen erst möglich macht
Bei Firma und Kontakt ist die Rückmeldung vor allem der Nachweis, dass der Datensatz im
ERP angekommen ist. Bei der Verkaufschance hat sie darüber hinaus eine ganz konkrete
Funktion: Ohne die BC Verkaufschancennummer lässt sich keine Position übertragen.
Business Central adressiert eine Verkaufschancenposition über die Nummer ihrer
Verkaufschance. Der Schritt
Positionen neu nach BC löst dazu das Feld
BC Verkaufschancennummer auf. Ist es leer, findet die Position ihr Ziel nicht.
| vorher | nachher |
|---|
| BC Verkaufschancennummer | leer | gefüllt |
| BC System-ID | leer | gefüllt |
| Positionen | können nicht übertragen werden | können übertragen werden |
Da die Positions-Jobs mit Order 710 – 760 deutlich hinter der Verkaufschance (260 / 261)
laufen, greift das innerhalb desselben Durchlaufs.
Worauf zu achten ist
Bleibt die Rückmeldung aus, hängt die ganze Kette
Ohne BC System-ID gilt die Verkaufschance als „nicht in BC vorhanden" und würde beim
nächsten Lauf erneut zur Anlage angeboten — dass dabei keine Dublette entsteht,
verhindert die Wiedererkennung über die Dataverse Id. Gleichzeitig bleibt die
BC Verkaufschancennummer leer, sodass auch keine Position übertragen werden kann. Bleibt
der Zustand über mehrere Läufe bestehen, sollte das geprüft werden.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → opportunitiesresponsefrombc.
5.3 - Kalkulationselemente aus Business Central übernehmen
Die Bausteine, aus denen eine Verkaufschance kalkuliert wird, kommen als Produkte nach Customer Engagement.
| |
|---|
| Richtung | Business Central → Customer Engagement |
| Wann | alle 2 Minuten |
| Betrifft | die Verkaufschancen-Elemente aus BC |
| Technisch | Job opportunityelementsfrombc (190), Mapping BCOpportunityElements |
Was passiert hier?
Business Central kalkuliert eine Verkaufschance nicht aus Artikeln, sondern aus
Verkaufschancen-Elementen — gröberen Bausteinen wie „Lizenzen", „Einführung" oder
„Betrieb", die jeweils eigene buchhalterische Dimensionen tragen.
Dieser Schritt holt diese Elemente nach Customer Engagement, damit sie dort in
Verkaufschancenpositionen ausgewählt werden können.
Sie landen in der Produkttabelle
Das ist die Besonderheit dieses Schritts:
Die Kalkulationselemente werden in CE als Produkte angelegt — in der
Standard-Produkttabelle.
Am Produkt kennzeichnet das Feld Verkaufschancen-Element (wysa_OppElement), welche
Datensätze in einer Verkaufschancenposition verwendet werden dürfen. Der Abgleich schreibt
dieses Feld nicht selbst; eine Geschäftsregel am Produkt setzt es auf „Ja", sobald der
BC Dimension 1 Wert gefüllt ist — also bei jedem aus BC übernommenen Element.
Dieser Schritt ist die einzige Quelle der Produkttabelle
Artikel werden nicht aus Business Central übernommen. Alles, was in CE als Produkt
vorhanden ist, ist damit entweder ein Kalkulationselement aus BC oder manuell erfasst —
siehe Stammdaten.
Welche Felder kommen an?
| Feld in Business Central | Feld in Customer Engagement | Anmerkung |
|---|
| Code | BC Code | Erkennungsmerkmal — verbindet beide Systeme |
| systemId | BC System-ID | technischer Schlüssel des ERP |
| Beschreibung | Beschreibung | Bezeichnung des Elements |
| Dimension 1 Code | BC Dimension 1 Code | buchhalterische Dimension |
| Dimension 1 Wert | BC Dimension 1 Wert | |
| Dimension 2 Code | BC Dimension 2 Code | |
| Dimension 2 Wert | BC Dimension 2 Wert | |
| — | Standardeinheit | fester Vorgabewert |
| — | Einheitengruppe | fester Vorgabewert |
| — | Produktstruktur | fest auf „Produkt" |
Wiedererkannt wird ein Element über den BC Code.
Worauf zu achten ist
Die Dimensionen wandern mit
Jedes Element bringt bis zu zwei buchhalterische Dimensionen samt Werten mit. Sie werden
am Produkt gespeichert und laufen später mit der Position nach BC zurück — so bleibt die
Kalkulation kontierbar.
Einheit und Einheitengruppe sind Konfigurationswerte
Standardeinheit und Einheitengruppe werden mit festen Vorgabewerten aus der
Mapping-Konfiguration befüllt. Diese Werte sind umgebungsspezifisch und werden je
Umgebung gepflegt — wie die Einheit in
Angebotspositionen aus BC.
Ohne diesen Schritt keine Positionen
Eine Verkaufschancenposition wird nach BC über den Elementcode übertragen, den sie
aus dem verknüpften Produkt zieht. Fehlt das Element in CE, kann die Position nicht
angelegt werden. Dieser Schritt läuft alle zwei Minuten, die Positions-Jobs alle drei —
die Elemente sind also stets vorab verarbeitet, siehe
Ausführungsreihenfolge und Takt.
Warum dieser Schritt hier steht
Fachlich ist er ein Stammdaten-Abgleich und läuft im Stammdatenblock. Dokumentiert ist
er hier, weil die Elemente, die er liefert, ausschließlich in Verkaufschancenpositionen
und Angebotspositionen verwendet werden. Die übrigen Stammdaten-Abgleiche stehen unter
Stammdaten.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → opportunityelementsfrombc.
5.4 - Neue Positionen nach Business Central übertragen
Freigegebene Verkaufschancenpositionen werden als Kalkulationszeilen im ERP angelegt.
| |
|---|
| Richtung | Customer Engagement → Business Central |
| Wann | alle 3 Minuten |
| Betrifft | Positionen, die freigegeben sind und in BC noch nicht existieren |
| Technisch | Job opportunityproductsnewfromce (710), Mapping CEOpportunityProducts |
Was passiert hier?
Die Positionen einer Verkaufschance — in CE die Verkaufschancenprodukte — werden in
Business Central als Kalkulationszeilen der Verkaufschance angelegt. Aus ihnen
entsteht dort später das Angebot.
Zwei Bedingungen müssen erfüllt sein:
- Sync zu BC an der Position steht auf „Ja"
- das Feld BC System-ID der Position ist noch leer
Zwei Voraussetzungen an anderen Datensätzen
Eine Position adressiert ihr Ziel in BC über zwei Werte, die sie sich aus verknüpften
Datensätzen holt:
flowchart LR
P["Position in CE"] --> A["Verkaufschance<br/><b>BC Verkaufschancennummer</b>"]
P --> B["Produkt<br/><b>BC Code</b>"]
A --> Z["Kalkulationszeile in BC"]
B --> Z
Fehlt einer der beiden, findet die Position ihr Ziel nicht.
Sichergestellt ist das über den Takt: Verkaufschance und Kalkulationselemente laufen alle
zwei Minuten, dieser Schritt alle drei. Die Vorarbeit ist also stets erledigt —
allerdings aus einem früheren Durchlauf, nicht aus demselben. Siehe
Ausführungsreihenfolge und Takt.
Welche Felder gehen nach BC?
| Feld in Customer Engagement | Feld in Business Central | Anmerkung |
|---|
| Verkaufschance | Verkaufschancennummer | wird zur BC Verkaufschancennummer aufgelöst |
| Produkt | Elementcode | wird zum BC Code des Elements aufgelöst |
| Menge | Menge | |
| Beschreibung | Beschreibung | |
| BC Betrag | Betrag (LW) | Nettobetrag der Position |
| BC Betrag inkl. MwSt. | Betrag inkl. MwSt. (LW) | Bruttobetrag |
| Marge | Deckungsbeitrag (LW) | |
„LW" steht für Landeswährung — Business Central führt diese Beträge in der Währung des
Buchungskreises.
Worauf zu achten ist
Beschreibung und Marge gehen auch bei Änderungen mit
Beschreibung und Marge sind sowohl Teil dieses Schritts als auch des Schritts
Positionsänderungen nach BC. Werden sie später in CE
geändert, kommt das in Business Central an.
Wiedererkennung über die BC System-ID
Anders als Firma, Kontakt und Verkaufschance schickt dieser Schritt keine Dataverse Id
mit. Die Position wird in Business Central über die BC System-ID adressiert, die
anschließend über die Rückmeldung nach CE kommt.
Die Freigabe folgt der Verkaufschance
Das Feld Sync zu BC an der Position (wysa_SynctoBC) folgt der Freigabe der
Verkaufschance — es muss nicht je Position einzeln gesetzt werden. Zu beachten ist der
abweichende technische Feldname gegenüber der Verkaufschance (wysa_sync2bc), siehe
Übersicht.
Anderer Takt als die übrigen Schritte
Die Positions-Jobs laufen alle 3 Minuten, nicht alle 2 wie der Rest der Integration.
Zusammen mit der Reihenfolge bedeutet das: Zwischen der Freigabe einer Verkaufschance und
dem Ankommen ihrer Positionen in BC können einige Minuten liegen.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → opportunityproductsnewfromce.
5.5 - Rückmeldung der Positionen aus Business Central
Nach der Anlage der Kalkulationszeile meldet BC deren System-ID zurück.
| |
|---|
| Richtung | Business Central → Customer Engagement |
| Wann | unmittelbar nach jeder Neuanlage einer Position — kein eigener Zeitplan |
| Betrifft | genau die Positionen, die gerade in BC angelegt wurden |
| Technisch | Job opportunityproductsresponsefrombc (760), Mapping BCOpportunityProductsResponse |
Was passiert hier?
Wenn eine Position neu nach BC übertragen wird, vergibt
Business Central für die entstandene Kalkulationszeile eine System-ID. Dieser Schritt
trägt sie an der Position in Customer Engagement nach.
sequenceDiagram
participant CE as Customer Engagement
participant BC as Business Central
CE->>BC: neue Kalkulationszeile anlegen
BC-->>CE: Antwort mit System-ID
Note over CE: Rückmeldung trägt die<br/>BC System-ID an der Position nach
Welche Felder kommen zurück?
| Feld in Business Central | Feld in Customer Engagement |
|---|
| systemId | BC System-ID |
Nur ein Feld — die knappste Rückmeldung der ganzen Integration. Eine eigene Nummer
vergibt Business Central für Kalkulationszeilen nicht; sie sind über ihre
Verkaufschancennummer und den Elementcode adressierbar.
Warum dieser Schritt entscheidend ist
Die BC System-ID ist die Weiche zwischen Anlegen und Ändern:
Solange sie leer bleibt, gilt die Position als „nicht in BC vorhanden" und wird beim
nächsten Lauf erneut zur Anlage angeboten. Da die Positionen — anders als Firma, Kontakt
und Verkaufschance — keine Wiedererkennung über eine mitgeschickte CE-GUID haben, ist
diese Rückmeldung ihre einzige Absicherung gegen wiederholtes Anlegen. Siehe die
Hinweise auf Positionen neu nach BC.
Worauf zu achten ist
Der Änderungsjob läuft vor dem Anlagejob
Ein Blick auf die Reihenfolge lohnt: Der Änderungsjob trägt Order 750, der Anlagejob
710 und dieser Rückmeldeschritt 760.
| Order | Job | Rolle |
|---|
| 710 | opportunityproductsnewfromce | Positionen anlegen |
| 750 | opportunityproductsupdatesfromce | Positionen ändern |
| 760 | opportunityproductsresponsefrombc | System-ID zurückmelden |
Alle drei liegen im Drei-Minuten-Takt, laufen also tatsächlich im selben Tick — hier
greift die Ordnungsnummer. Innerhalb eines Durchlaufs wird demnach erst angelegt, dann
geändert, dann die System-ID nachgetragen.
Eine frisch angelegte Position hat beim Änderungsjob desselben Durchlaufs noch keine
System-ID und fällt dort nicht in den Filter — sie wird erst im nächsten Durchlauf für
Änderungen erfasst. Für die Praxis ist das ohne Folgen, weil die Anlage alle Werte
bereits mitgeschickt hat.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → opportunityproductsresponsefrombc.
5.6 - Positionsänderungen nach Business Central übertragen
Änderungen an bereits im ERP bekannten Verkaufschancenpositionen gehen nach Business Central.
| |
|---|
| Richtung | Customer Engagement → Business Central |
| Wann | alle 3 Minuten |
| Betrifft | freigegebene Positionen, die in BC bereits existieren |
| Technisch | Job opportunityproductsupdatesfromce (750), Mapping CEOpportunityProductsUpdates |
Was passiert hier?
Ändert sich an einer Position die Menge, die Beschreibung oder ein Betrag, geht das nach Business Central.
Dieser Schritt ist damit der einzige aktive Änderungspfad im Bereich Verkaufschance —
für die Verkaufschance selbst gibt es keinen, siehe Übersicht.
Erfasst werden Positionen, bei denen beides zutrifft:
- Sync zu BC an der Position steht auf „Ja"
- das Feld BC System-ID der Position ist gefüllt
Ist die BC System-ID leer, greift stattdessen
Positionen neu nach BC.
Welche Felder gehen nach BC?
| Feld in Customer Engagement | Feld in Business Central |
|---|
| Verkaufschance | Verkaufschancennummer |
| Produkt | Elementcode |
| Menge | Menge |
| Beschreibung | Beschreibung |
| BC Betrag | Betrag (LW) |
| BC Betrag inkl. MwSt. | Betrag inkl. MwSt. (LW) |
| Marge | Deckungsbeitrag (LW) |
Sieben fachliche Felder — dieselben wie bei der Anlage.
Worauf zu achten ist
Beschreibung und Marge gehen auch bei Änderungen mit
Anlage (710) und Änderung (750) übertragen denselben Feldsatz — inklusive Beschreibung
und Marge. Wird eine davon später in CE geändert, kommt das in Business Central an.
Die Zuordnung wird bei jedem Lauf neu aufgelöst
Verkaufschancennummer und Elementcode sind Teil jeder Übertragung — sie werden also bei
jeder Änderung erneut aus Verkaufschance und Produkt aufgelöst. Wird eine Position in CE
auf ein anderes Produkt umgestellt, geht das damit auch nach BC.
Der Änderungsjob läuft vor der Rückmeldung
Innerhalb eines Durchlaufs ist die Reihenfolge: anlegen (710) → ändern (750) →
System-ID zurückmelden (760). Da alle drei im Drei-Minuten-Takt liegen, greift die
Ordnungsnummer hier wirklich.
Eine frisch angelegte Position hat beim Änderungsjob desselben Durchlaufs noch keine
System-ID und fällt dort nicht in den Filter. Sie wird erst im nächsten Durchlauf für
Änderungen erfasst — ohne praktische Folge, weil die Anlage alle Werte bereits
mitgeschickt hat.
Änderungserkennung über Change Tracking
Anders als die Schritte aus BC arbeitet dieser Schritt nicht mit einem Watermark-Feld,
sondern mit dem Change Tracking von Dataverse: Er erhält von der Plattform nur die
seit dem letzten Lauf geänderten Datensätze und filtert diese zusätzlich über Freigabe
und BC System-ID.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → opportunityproductsupdatesfromce.
6 - Angebot
Wie Angebote und ihre Positionen aus Business Central nach Customer Engagement kommen — Gesamtbild und die Schritte im Detail.
Das Angebot schließt den großen Kreis der Integration. Die
Verkaufschance geht von Customer Engagement nach Business
Central — dort entsteht daraus das kaufmännische Dokument, und dieses kommt zurück:
Das Angebot läuft ausschließlich von Business Central nach Customer Engagement.
In CE wird kein Angebot erfasst und keines nach BC übertragen. Kalkulation, Preise,
Rabatte und Belegnummern gehören ins ERP; Customer Engagement führt das Angebot nur mit,
damit der Vertrieb Pipeline und Abschluss im CRM sieht.
flowchart LR
A["Verkaufschance in CE"] -->|"Verkaufschance<br/>nach BC"| B["Verkaufschance in BC"]
B -->|"Angebot erstellen<br/>(in BC)"| C["Angebot in BC"]
C -->|"<b>Angebot nach CE</b>"| D["Angebot in CE"]
D -.->|"verknüpft mit"| A
Der Ablauf
flowchart TB
Q["Angebot in BC angelegt<br/>oder geändert"] --> S1["<b>Angebote aus BC</b><br/>Angebotskopf nach CE"]
S1 --> V{"Verkaufschance<br/>über BC-Nummer<br/>gefunden?"}
V -->|ja| VK["Angebot hängt an<br/>der Verkaufschance"]
V -->|nein| FREI["Angebot ohne<br/>Verkaufschance"]
S1 --> S2["<b>Positionen aus BC</b><br/>Kalkulationszeilen nach CE"]
VK --> T{"In BC in einen<br/>Auftrag überführt?"}
FREI --> T
T -->|"ja — Status TRANSFERRED"| W["<b>Gewonnene Angebote aus BC</b><br/>Angebot wird <b>Gewonnen</b>"]
Q --> DEL["Angebot in BC gelöscht"]
DEL --> D1["<b>Stornierung</b><br/>Angebot wird in CE<br/><b>geschlossen / storniert</b>"]
Q --> DELP["Position in BC gelöscht"]
DELP --> D2["<b>Löschung</b><br/>Position wird in CE<br/><b>gelöscht</b>"]Zwei Besonderheiten gegenüber den anderen Bereichen
Positionen werden wirklich gelöscht
Firma, Kontakt und Produkt werden bei einer Löschung in BC nur deaktiviert — an
ihnen hängt Historie. Angebote werden geschlossen und storniert, Angebotspositionen
dagegen tatsächlich gelöscht:
| Datenbereich | Verhalten bei Löschung in BC |
|---|
| Firma, Kontakt, Produkt | deaktivieren (Status Inaktiv) |
| Angebot | schließen (Status Geschlossen, Statusgrund Storniert) |
| Angebotsposition | löschen |
Das stornierte Angebot bleibt an der Verkaufschance nachvollziehbar, zählt aber nicht mehr
als offen. Eine Position ist dagegen eine reine Kopie der BC-Kalkulationszeile; existiert
sie in BC nicht mehr, hat sie keinen Wert. Technisch trägt nur der Positions-Job
Action = Delete — siehe
Datenfluss.
Der Abschluss kommt aus dem ERP
Ob ein Angebot gewonnen ist, entscheidet Business Central: Wird der Beleg dort in einen
Auftrag überführt, meldet das Änderungsprotokoll den Vorgang TRANSFERRED. Der Schritt
Gewonnene Angebote aus BC setzt das Angebot in CE daraufhin auf
Gewonnen.
Der Vertrieb muss den Abschluss also nicht doppelt pflegen. Was daraus weiter folgt —
etwa das optionale Gewinnen der verknüpften Verkaufschance — steht unter
Abschluss von Angebot und Verkaufschance.
Wie ein Angebot seine Zuordnungen findet
Ein Angebotskopf bringt aus BC nur Nummern und Codes mit. Drei davon werden in CE zu
Verknüpfungen aufgelöst:
flowchart LR
Q["Angebot aus BC"] -->|"Verkaufschancennummer"| O["Verkaufschance"]
Q -->|"<b>Kontaktnummer</b>"| A["Firma"]
Q -->|"Verkäufercode"| S["Verkäufer (BC)"]
| Zuordnung | Aufgelöst über | Voraussetzung |
|---|
| Verkaufschance | BC Verkaufschancennummer | die Verkaufschance wurde nach BC übertragen und zurückgemeldet |
| Firma | BC Kontaktnummer | die Firma wurde nach BC übertragen und hat ihre Kontaktnummer zurückgemeldet |
| Verkäufer (BC) | Verkäufercode | Stammdaten-Job 130 ist gelaufen |
Die Firma wird über die BC Kontaktnummer gefunden
Wie in allen übrigen Bereichen wird die Firma über die BC Kontaktnummer
(wysa_bcContactNumber) zugeordnet; das Angebot liefert dafür die
Verkauf-an-Unternehmenskontaktnr.. Die Debitorennummer spielt nicht mehr mit — die
Zuordnung klappt damit auch für Firmen, die in BC noch kein Debitor sind.
Solange die Kontaktnummer an der Firma leer ist (die Firma also noch nicht nach BC
übertragen und zurückgemeldet wurde), kommt ein Angebot in CE ohne Kundenzuordnung an.
Positionen enthalten Kalkulationselemente, keine Artikel
Die Angebotspositionen in CE werden aus den Kalkulationselementen des BC-Belegs
gefüllt — denselben Bausteinen, die auch die
Verkaufschancenpositionen verwenden.
Die eigentlichen Artikelzeilen eines BC-Angebots werden nicht übertragen. Angebote in
CE zeigen also die Kalkulation, nicht die Artikelaufstellung.
Welche Felder kommen an?
Angebotskopf
| Feld in Business Central | Feld in Customer Engagement |
|---|
| Nr. | Angebotsnummer |
| id | BC System-ID |
| Buchungsbeschreibung | Name |
| Verkaufschancennummer | Verkaufschance |
| Verkauf an Unternehmenskontaktnr. | Kunde |
| Verkäufercode | Verkäufer (BC) |
| Auftragsdatum | Gültig ab |
| Angebot gültig bis | Gültig bis |
| Betrag inkl. MwSt. | BC Gesamtbetrag inkl. MwSt. |
| Status | BC Status |
Angebotsposition
| Feld in Business Central | Feld in Customer Engagement |
|---|
| systemId | BC System-ID |
| Belegnummer | Angebot |
| Elementcode | Produkt |
| Beschreibung | Beschreibung |
| Menge | Menge |
| Zeilenbetrag (LW) | BC Betrag |
| Zeilenbetrag inkl. MwSt. (LW) | BC Betrag inkl. MwSt. |
| — | Einheit (fester Vorgabewert) |
Was der Abgleich nicht liefert
Mehrere Felder des Datenmodells werden von diesen Schritten nicht gefüllt. Sie
entstehen in Customer Engagement selbst:
| Feld | Woher es kommt |
|---|
| BC Gesamtbetrag (netto) | aus den Positionen aufsummiert |
| Marge | aus den Zeilenmargen aufsummiert |
| Angebotsklassifizierung | beim Anlegen in CE bestimmt (Erst- oder weiteres Angebot) |
| Archivierte Versionen | Standard-Funktion von Dynamics 365 Sales bei Angebots-Revisionen, keine DataBridge-Funktion — es gibt nichts zu übertragen |
| BC Deckungsbeitrag (Position) | wird von keinem Job befüllt — Marge steht deshalb bei aus BC übernommenen Angeboten immer auf 0,00, siehe Angebotspositionen aus Business Central |
Die ersten drei sind unter Beträge und Margen
und Abschluss beschrieben.
Technische Zuordnung
Jobs und Mappings dieser Kette
Beteiligte Tabellen:
| Business Central API Page | Dataverse |
|---|
.../acdsalesheaders | quote |
.../acdsalescalculationelements | quotedetail |
.../acdlogentries | quote, quotedetail |
Alle unter singhammerITConsulting/dyce/v2.0/.
Schlüssel je Schritt
| Schritt | Schlüssel im Ziel | Alternate Key |
|---|
| Angebote aus BC | quotenumber ← BC number | wysa_quotenumberkey |
| Positionen aus BC | wysa_bcsystemid ← BC systemId | wysa_bcsystemidkey |
| Gewonnene Angebote aus BC | wysa_bcsystemid ← Log recordId | wysa_bcsystemidkey |
| Positionen löschen | wysa_bcsystemid ← Log recordId | wysa_bcsystemidkey |
| Angebote stornieren | wysa_bcsystemid ← Log recordId | wysa_bcsystemidkey |
Der Angebotskopf ist der einzige Datensatz der ganzen Integration, der über eine
fachliche Belegnummer adressiert wird und nicht über die BC System-ID — die
Angebotsnummer in CE ist dieselbe wie in BC. Die Löschjobs müssen dagegen über die
System-ID gehen, weil das Änderungsprotokoll nur diese kennt.
Protokoll-Tabellen der Log-basierten Jobs
| Job | tableId | BC-Tabelle | zusätzlicher Filter |
|---|
625 activatesalesquotesfrombc | 36 | Verkaufskopf | operation eq 'TRANSFERRED' |
690 salesquotesfrombcdelete | 36 | Verkaufskopf | operation eq 'DELETE' |
621 salescalculationelementsfrombcdelete | 72077783 | Kalkulationselemente | operation eq 'DELETE' |
Die Jobs 625 und 690 lesen dieselben Protokolleinträge und trennen sich allein über das
Feld operation: TRANSFERRED führt zum Gewinnen, DELETE zum Stornieren.
6.1 - Angebote aus Business Central übernehmen
Angebotsköpfe aus dem ERP erscheinen in Customer Engagement und hängen sich an ihre Verkaufschance.
| |
|---|
| Richtung | Business Central → Customer Engagement |
| Wann | alle 2 Minuten |
| Betrifft | alle BC-Verkaufsbelege der Art Angebot, die seit dem letzten Lauf geändert wurden |
| Technisch | Job salesquotesfrombc (610), Mapping BCSalesQuotes |
Was passiert hier?
Sobald in Business Central ein Angebot angelegt oder geändert wird, erscheint es in
Customer Engagement — mit Nummer, Betrag, Gültigkeit und Zuordnung zu Verkaufschance und
Kunde. Existiert das Angebot in CE schon, werden seine Felder aktualisiert.
Wiedererkannt wird ein Angebot über die Angebotsnummer. Sie ist in beiden Systemen
dieselbe — das Angebot ist damit der einzige Datensatz der Integration, der über eine
fachliche Belegnummer verbunden ist und nicht über einen technischen Schlüssel.
Der Job liest ausschließlich Belege der Art Angebot; Aufträge und Rechnungen bleiben
außen vor.
Welche Felder kommen an?
| Feld in Business Central | Feld in Customer Engagement | Anmerkung |
|---|
| Nr. | Angebotsnummer | Erkennungsmerkmal — in beiden Systemen gleich |
| id | BC System-ID | technischer Schlüssel des ERP |
| Buchungsbeschreibung | Name | die Bezeichnung des Angebots in CE |
| Verkaufschancennummer | Verkaufschance | wird zur Verknüpfung aufgelöst |
| Verkauf an Unternehmenskontaktnr. | Kunde | wird zur Verknüpfung auf die Firma aufgelöst |
| Verkäufercode | Verkäufer (BC) | wird zur Verknüpfung aufgelöst |
| Auftragsdatum | Gültig ab | |
| Angebot gültig bis | Gültig bis | |
| Betrag inkl. MwSt. | BC Gesamtbetrag inkl. MwSt. | Bruttosumme des Belegs |
| Status | BC Status | steuert das automatische Gewinnen |
Worauf zu achten ist
So schließt sich der Kreis zur Verkaufschance
Das Angebot findet seine Verkaufschance über die BC Verkaufschancennummer — genau
jenes Feld, das die Rückmeldung aus BC
an der Verkaufschance gefüllt hat.
Damit ist der Weg vollständig: Die Verkaufschance geht von CE nach BC, bekommt dort eine
Nummer, aus ihr entsteht ein Angebot, und das Angebot kommt über dieselbe Nummer zurück
und hängt sich an die richtige Verkaufschance.
Wird in Business Central ein Angebot ohne Bezug zu einer Verkaufschance erstellt, kommt
es in CE ohne diese Verknüpfung an — es ist dann ein freistehendes Angebot.
Der Kunde wird über die BC Kontaktnummer gefunden
Ohne BC Kontaktnummer kein Kunde am Angebot
Die Zuordnung zur Firma läuft über die BC Kontaktnummer der Firma — dieselbe
Verknüpfung wie in allen anderen Bereichen. Das Angebot liefert dafür die
Verkauf-an-Unternehmenskontaktnummer; die Debitorennummer wird nicht mehr verwendet.
Damit funktioniert die Zuordnung auch für Firmen, die in BC noch kein Debitor sind: Eine
in CE angelegte und nach BC übertragene Firma hat ihre Kontaktnummer bereits durch die
Rückmeldung.
Ist das Feld an der Firma leer, kommt das Angebot in CE ohne Kundenzuordnung an. Der
Kunde erscheint dann auch nicht nachträglich von selbst — erst eine erneute Änderung des
Angebots in BC löst einen neuen Abgleich aus.
Der Nettobetrag kommt nicht mit
Übertragen wird nur der Bruttobetrag (BC Gesamtbetrag inkl. MwSt.). Das Feld
BC Gesamtbetrag (netto) und die Marge werden in CE aus den
Angebotspositionen aufsummiert — siehe
Beträge und Margen.
Der Status entscheidet über den Abschluss
Das Feld BC Status trägt den Bearbeitungsstand des Belegs aus BC. Meldet Business
Central den Wert TRANSFERRED — das Angebot wurde in einen Auftrag überführt —, wird das
Angebot in CE gewonnen. Das erledigt der Schritt
Gewonnene Angebote aus BC; die Folgewirkungen sind unter
Abschluss von Angebot und Verkaufschance
beschrieben.
Angebote werden nicht nach BC zurückgeschrieben
Es gibt keinen Weg von CE nach BC. Was am Angebot in CE geändert wird, bleibt dort und
wird beim nächsten Abgleich aus BC überschrieben. Das Angebot ist eine Kopie des
BC-Belegs.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → salesquotesfrombc.
6.2 - Angebotspositionen aus Business Central übernehmen
Die Kalkulationszeilen eines BC-Angebots erscheinen als Angebotspositionen in Customer Engagement.
| |
|---|
| Richtung | Business Central → Customer Engagement |
| Wann | alle 2 Minuten |
| Betrifft | die Kalkulationselemente von BC-Belegen der Art Angebot |
| Technisch | Job salescalculationelementsfrombc (620), Mapping BCSalesCalculationElements |
Was passiert hier?
Ein Angebot in Business Central wird aus Kalkulationselementen aufgebaut — Bausteinen
wie „Lizenzen", „Einführung" oder „Betrieb", die jeweils Menge und Betrag tragen. Dieser
Schritt holt sie als Angebotspositionen nach Customer Engagement.
Wiedererkannt wird eine Position über die BC System-ID der Kalkulationszeile.
Es sind Kalkulationselemente, keine Artikelzeilen
Das ist der wichtigste Punkt zum Verständnis:
In Customer Engagement zeigt ein Angebot die Kalkulation des BC-Belegs, nicht seine
Artikelaufstellung.
Ein BC-Angebot hat beides: Verkaufszeilen mit Artikeln und darüber die Kalkulation aus
Elementen. Übertragen wird nur die Kalkulation.
Die Elemente sind dieselben, die auch die
Verkaufschancenpositionen verwenden. Sie
kommen über Kalkulationselemente aus BC
(Job 190) als Produkte nach CE. Damit ist die Kalkulation über die gesamte Kette hinweg
vergleichbar: dieselben Bausteine in der Verkaufschance wie später im Angebot.
Welche Felder kommen an?
| Feld in Business Central | Feld in Customer Engagement | Anmerkung |
|---|
| systemId | BC System-ID | Erkennungsmerkmal |
| Belegnummer | Angebot | wird über die Angebotsnummer aufgelöst |
| Elementcode | Produkt | wird über den BC Code des Elements aufgelöst |
| Beschreibung | Beschreibung | |
| Menge | Menge | |
| Zeilenbetrag (LW) | BC Betrag | Nettobetrag der Position |
| Zeilenbetrag inkl. MwSt. (LW) | BC Betrag inkl. MwSt. | Bruttobetrag |
| — | Einheit | fester Vorgabewert |
„LW" steht für Landeswährung.
Worauf zu achten ist
Zwei Zuordnungen müssen gelingen
flowchart LR
P["Kalkulationszeile aus BC"] -->|"Belegnummer"| Q["Angebot in CE"]
P -->|"Elementcode"| E["Produkt in CE"]
Beide Vorgänger-Jobs laufen früher (190 und 610 gegenüber 620), sodass das innerhalb
desselben Durchlaufs zusammenfindet. Fehlt eines der beiden Ziele, kann die Position nicht
korrekt eingehängt werden.
Der Deckungsbeitrag kommt nicht mit
Das Datenmodell führt an der Angebotsposition ein Feld BC Deckungsbeitrag
(wysa_bcProfit). Dieser Abgleich füllt es nicht — die Position kommt nur mit Netto-
und Bruttobetrag an.
Marge bei Angeboten aus BC
Die Marge des Angebots (wysa_Margin) wird aus den Zeilenmargen (wysa_bcProfit)
aufsummiert. Da der Deckungsbeitrag nicht aus Business Central übernommen wird, steht
die Marge bei aus BC übernommenen Angeboten auf 0,00.
Eine feste Einheiten-GUID
Die Einheit der Position wird mit einem fest hinterlegten Wert gesetzt.
Umgebungsabhängig
Der Wert ist umgebungsspezifisch und wird je Umgebung in der Mapping-Konfiguration
gepflegt. Es ist derselbe Wert, den auch
Kalkulationselemente aus BC verwenden.
Löschungen laufen über einen eigenen Job
Wird eine Kalkulationszeile in BC gelöscht, verschwindet sie aus dieser Schnittstelle und
kann durch Abgleich nicht mehr gefunden werden. Das erledigt
Positionen löschen (621) über das
Änderungsprotokoll — und zwar durch echtes Löschen, nicht durch Deaktivieren.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → salescalculationelementsfrombc.
6.3 - Gewonnene Angebote aus Business Central
Wird ein Angebot im ERP in einen Auftrag überführt, wird es in Customer Engagement gewonnen.
| |
|---|
| Richtung | Business Central → Customer Engagement |
| Wann | alle 3 Minuten |
| Betrifft | Angebote, die in BC in einen Auftrag überführt wurden |
| Technisch | Job activatesalesquotesfrombc (625), Mapping BCSalesQuotesActivate |
Was passiert hier?
Wird ein Angebot in Business Central in einen Auftrag überführt, ist es kaufmännisch
gewonnen. Business Central schreibt diesen Vorgang in sein Änderungsprotokoll — als
Vorgang TRANSFERRED. Dieser Schritt liest das Protokoll und setzt das Angebot in
Customer Engagement auf Gewonnen.
flowchart LR
A["Angebot in BC<br/>in Auftrag überführt"] --> B["Eintrag im Änderungsprotokoll<br/>Vorgang <b>TRANSFERRED</b>"]
B --> C["Angebot in CE über die<br/>BC System-ID gefunden"]
C --> D["<b>BC Status</b> = TRANSFERRED<br/>Angebot wird <b>Gewonnen</b>"]
Der Abschluss wird nicht doppelt gepflegt
Das ist die fachliche Kernaussage dieses Schritts:
Führendes System für den Auftrag ist Business Central. Customer Engagement folgt.
Der Vertrieb muss ein gewonnenes Angebot in CE nicht von Hand abschließen. Der Abschluss
im ERP genügt — und weil er dort an die Auftragserstellung gebunden ist, kann in CE kein
Angebot als gewonnen gelten, dem im ERP kein Auftrag gegenübersteht.
Was sich am Angebot ändert
| Feld | Wert danach |
|---|
| Status | Gewonnen |
| BC Status | TRANSFERRED |
Alle übrigen Felder bleiben unverändert.
Was daraus weiter folgt
Das Feld BC Status ist mehr als eine Notiz — an ihm hängt weitere Logik in Customer
Engagement:
- Ist die Einstellung
wysa_WinQuoteAndOpportunity aktiv, wird zusätzlich die
verknüpfte Verkaufschance gewonnen, mit dem Angebotsbetrag als tatsächlichem Umsatz. - Ohne diese Einstellung bleibt der Abschluss der Verkaufschance eine bewusste Handlung
des Vertriebs.
Beschrieben ist das unter
Abschluss von Angebot und Verkaufschance
und Konfiguration.
Worauf zu achten ist
Zwei Jobs lesen dasselbe Protokoll
Dieser Schritt und Angebote stornieren lesen beide die
Protokolleinträge zur BC-Tabelle Verkaufskopf. Sie trennen sich allein über die Art des
Vorgangs:
| Vorgang im Protokoll | Job | Wirkung in CE |
|---|
TRANSFERRED | dieser Schritt (625) | Angebot wird gewonnen |
DELETE | Angebote stornieren (690) | Angebot wird storniert |
Andere Vorgangsarten werden von keinem der beiden Jobs verarbeitet.
Der Takt weicht ab
Dieser Job läuft alle 3 Minuten, die übrigen Angebots-Jobs alle 2. Zwischen der
Auftragserstellung in BC und dem gewonnenen Angebot in CE können damit einige Minuten
liegen.
Ein Rückweg existiert nicht
Wird der Auftrag in BC storniert, gibt es keinen Job, der das Angebot in CE wieder
öffnet. Der Vorgang ist einseitig.
Verlieren funktioniert anders
Der Verlust kommt nicht aus BC, sondern wird in Customer Engagement entschieden: Wird eine
Verkaufschance auf Verloren gesetzt, schließt die Lösung ihre Angebote mit — siehe
Abschluss. Ein Mapping ist daran
nicht beteiligt.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → activatesalesquotesfrombc.
6.4 - Angebotspositionen löschen
In Business Central gelöschte Kalkulationszeilen werden in Customer Engagement gelöscht.
| |
|---|
| Richtung | Business Central → Customer Engagement |
| Wann | alle 2 Minuten |
| Betrifft | Kalkulationszeilen, die in BC gelöscht wurden |
| Technisch | Job salescalculationelementsfrombcdelete (621), Mapping BCSalesCalculationElementsDelete |
Was passiert hier?
Wird in Business Central eine Kalkulationszeile aus einem Angebot entfernt, wird die
zugehörige Angebotsposition in Customer Engagement gelöscht.
flowchart LR
A["Kalkulationszeile<br/>in BC gelöscht"] --> B["Eintrag im Änderungsprotokoll<br/>Vorgang <b>DELETE</b>"]
B --> C["Position in CE über die<br/>BC System-ID gefunden"]
C --> D["Position wird <b>gelöscht</b>"]
Der Weg über das Änderungsprotokoll ist nötig, weil eine gelöschte Zeile in der normalen
Schnittstelle nicht mehr auftaucht und durch Abgleich nicht gefunden werden könnte.
Hier wird wirklich gelöscht
Anders als bei Firma, Kontakt und Produkt wird nicht deaktiviert, sondern gelöscht:
| Datenbereich | Verhalten bei Löschung in BC |
|---|
| Firma, Kontakt, Produkt | deaktivieren |
| Angebotsposition | löschen |
Das ist folgerichtig. Eine Angebotsposition in CE ist eine reine Kopie der BC-Zeile — sie
trägt keine eigene Information, an ihr hängt keine Historie, und eine inaktive Position
würde die Summenbildung des Angebots nur verfälschen. Ohne Löschen bliebe eine in BC
gestrichene Leistung im CE-Angebot stehen.
Worauf zu achten ist
Das Angebot wird neu summiert
Gesamtbetrag und Marge eines Angebots werden in CE aus den Positionen aufsummiert. Nach
dem Löschen einer Position ändern sich diese Summen — siehe
Beträge und Margen.
Ein Wiederherstellen gibt es nicht
Die Position ist in CE endgültig entfernt. Wird die Zeile in BC erneut angelegt, kommt sie
über Positionen aus BC als neue Position mit neuer
BC System-ID zurück.
Beim Löschen des ganzen Angebots
Wird in BC nicht eine Zeile, sondern das ganze Angebot gelöscht, greift
Angebote stornieren (690). Das Angebot wird in CE nicht
gelöscht, sondern geschlossen — seine Positionen bleiben daher erhalten, sofern BC nicht
für jede Zeile einen eigenen Protokolleintrag schreibt und dieser Job anspringt.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → salescalculationelementsfrombcdelete.
6.5 - In BC gelöschte Angebote stornieren
In Business Central gelöschte Angebote werden in Customer Engagement geschlossen und als storniert markiert.
| |
|---|
| Richtung | Business Central → Customer Engagement |
| Wann | alle 2 Minuten |
| Betrifft | Angebote, die in BC gelöscht wurden |
| Technisch | Job salesquotesfrombcdelete (690), Mapping BCSalesQuotesDelete |
Was passiert hier?
Wird ein Angebot in Business Central gelöscht, bleibt es in Customer Engagement
erhalten, wird aber geschlossen und bekommt den Statusgrund Storniert. Es ist
danach schreibgeschützt und taucht in keiner Auswertung offener Angebote mehr auf.
flowchart LR
A["Angebot in BC gelöscht"] --> B["Eintrag im Änderungsprotokoll<br/>Vorgang <b>DELETE</b>"]
B --> C["Angebot in CE über die<br/>BC System-ID gefunden"]
C --> D["Angebot wird <b>geschlossen</b><br/>Statusgrund <b>Storniert</b>"]
Stornieren statt Löschen
| Datenbereich | Verhalten bei Löschung in BC |
|---|
| Firma, Kontakt, Produkt | deaktivieren — an ihnen hängt Historie |
| Angebot | schließen / stornieren — der Vorgang bleibt nachvollziehbar |
| Angebotsposition | löschen — sie ist eine Kopie der BC-Kalkulationszeile |
Früher wurde das Angebot in CE hart gelöscht. Jetzt bleibt es als stornierter Datensatz
stehen: Man sieht an der Verkaufschance weiterhin, dass es ein Angebot gab und dass es
in BC verworfen wurde. Weil das Angebot geschlossen ist, zählt es in der Pipeline nicht
mehr als offen.
Worauf zu achten ist
Die Positionen bleiben am Angebot
Da das Angebot nicht mehr gelöscht wird, werden seine Positionen auch nicht mehr
automatisch mit entfernt. Löscht BC beim Löschen des Angebots auch die Kalkulationszeilen
einzeln, greift zusätzlich Positionen löschen;
sonst bleiben die Positionen am stornierten Angebot sichtbar.
Was mit der Verkaufschance passiert
Die Verkaufschance bleibt unberührt. Das stornierte Angebot bleibt mit ihr verknüpft.
Führendes Angebot
War das stornierte Angebot als führendes Angebot eingetragen, bleibt es das auch nach
der Stornierung. Der daraus berechnete voraussichtliche Umsatz ändert sich dadurch nicht.
Siehe Beträge und Margen.
Kein Wiederöffnen aus BC
Ein in BC gelöschtes Angebot kommt nicht zurück. Wird in BC ein neues Angebot angelegt,
kommt es mit neuer Nummer und neuer BC System-ID als eigenständiger Datensatz nach CE.
Zwei Jobs lesen dasselbe Protokoll
Dieser Schritt und Gewonnene Angebote aus BC lesen beide die
Protokolleinträge zur BC-Tabelle Verkaufskopf und trennen sich über die Art des
Vorgangs:
| Vorgang | Job | Wirkung |
|---|
DELETE | dieser Schritt (690) | Angebot wird storniert |
TRANSFERRED | Gewonnene Angebote (625) | Angebot wird gewonnen |
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → salesquotesfrombcdelete.
7 - Abonnement
Wie wiederkehrend abgerechnete Leistungen und ihre Vertragsdetails aus Business Central nach Customer Engagement kommen.
Ein Abonnement bildet eine wiederkehrend abgerechnete Leistung ab: eine Lizenz, einen
Cloud-Service, einen Wartungsvertrag. Diese Daten entstehen in der Abonnementverwaltung
von Business Central — Customer Engagement führt sie mit, damit der Vertrieb Bestand,
Laufzeiten und Kündigungsfristen im Blick hat.
Abonnements laufen ausschließlich von Business Central nach Customer Engagement.
Es gibt keinen Rückweg und keine Löschverarbeitung. Der Bereich besteht aus zwei
Schritten, die aufeinander aufbauen:
Zwei Ebenen
flowchart TB
BC["Abonnementverwaltung<br/>in Business Central"]
BC -->|"550 · <b>Abonnements aus BC</b>"| A["<b>Abonnement</b><br/>Was ist abonniert?<br/>Produkt, Menge, Seriennummer,<br/>Bereitstellungszeitraum"]
BC -->|"560 · <b>Abonnementzeilen aus BC</b>"| Z["<b>Abonnementzeile</b><br/>Zu welchen Bedingungen?<br/>Laufzeit, Preis, Rabatt,<br/>Kündigungsfrist"]
Z -->|"über die<br/>Abonnementnummer"| A
Ein Abonnement kann mehrere Zeilen mit unterschiedlichen Laufzeiten und
Abrechnungsrhythmen haben. Die Zeile findet ihr Abonnement über die
Abonnementnummer — deshalb muss Schritt 550 vor Schritt 560 laufen, was die
Ordnungsnummern sicherstellen.
Rechnungsempfänger und Leistungsnehmer
Die fachlich interessanteste Eigenschaft dieses Bereichs: Das Abonnement trennt zwei
Rollen, die in Konzernstrukturen auseinanderfallen.
| Rolle | Bedeutung | Kommt aus BC von |
|---|
| Rechnungsempfänger | wer bezahlt | Rechnungsadresse des Belegs |
| Leistungsnehmer | wer die Leistung nutzt | Lieferadresse des Belegs |
Beide werden je als Firma und Kontakt übertragen — vier Verknüpfungen pro
Abonnement. Business Central liefert dafür vier Kontaktnummern, die in CE aufgelöst
werden.
Aufgelöst wird über die BC Kontaktnummer
Alle vier Zuordnungen laufen über die BC Kontaktnummer — auch die auf Firmen. Das
unterscheidet diesen Bereich vom Angebot, das die Firma über
die BC Debitorennummer sucht.
Praktisch ist das die günstigere Variante: Die BC Kontaktnummer ist an jeder nach BC
übertragenen Firma vorhanden, die Debitorennummer erst, wenn die Firma im ERP zum
Debitor gemacht wurde.
Was in Customer Engagement bleibt
Nicht alle Felder der beiden Tabellen kommen aus Business Central. Diese werden
CE-seitig gepflegt oder durch Automatik gefüllt:
| Feld | Tabelle | Bemerkung |
|---|
| Verkaufschance | Abonnement | Ursprung des Abonnements — Zuordnung in CE |
| Mitbewerber | Abonnement | aktueller Anbieter, falls die Leistung abgelöst werden soll |
| Leaderstellung | Abonnement | Stichtag der Leadgenerierung |
| Anzahl Zeilen | Abonnement | Anzahl der zugehörigen Abonnementzeilen |
| Produkt (Verweis) | Abonnement | siehe unten |
| Abzurechnendes Produkt | Abonnementzeile | — |
| Währung | Abonnementzeile | — |
Das passt zum Zweck des Bereichs: Business Central liefert den Vertragsbestand, Customer
Engagement ergänzt die Vertriebssicht — aus einem auslaufenden Abonnement kann ein Lead
entstehen, und dazu gehören Verkaufschance und Mitbewerber.
Der Produktverweis wird nicht gesetzt
Das Abonnement führt Produktnummer und Produktbeschreibung als Text. Der Verweis
auf einen Produktdatensatz (Produkt) wird nicht befüllt, weil Artikel nicht aus
Business Central übernommen werden — siehe Stammdaten.
Worauf zu achten ist
Keine Löschverarbeitung
Für Abonnements und Abonnementzeilen gibt es keinen Löschjob. Wird ein Abonnement in
Business Central gelöscht, bleibt es in Customer Engagement mit dem letzten übertragenen
Stand erhalten.
Die Abonnementart wird fest gesetzt
Das Feld Abonnementart wird bei jedem Lauf auf einen festen Vorgabewert gesetzt —
Business Central liefert dazu nichts. Eine Unterscheidung nach Ausprägung findet über
diesen Abgleich also nicht statt; eine in CE geänderte Abonnementart wird beim nächsten
Lauf überschrieben.
Die Quellen liegen außerhalb der dyce-Schnittstelle
Alle übrigen Abgleiche lesen API Pages der Singhammer-Erweiterung unter
singhammerITConsulting/dyce/v2.0/. Die beiden Abonnement-Jobs lesen stattdessen
serviceObjects und serviceCommitments — die Schnittstelle der
Abonnementverwaltung von Business Central selbst.
Praktische Folge: Dieser Bereich hängt an einer anderen Erweiterung als der Rest der
Integration. Wird sie in BC nicht bereitgestellt, laufen die beiden Jobs ins Leere,
während alles andere weiterarbeitet.
Kündigung möglich bis ist das wichtigste Datum
Von den 27 Feldern der Abonnementzeile ist eines für den Vertrieb entscheidend:
Kündigung möglich bis. Es nennt den konkreten Stichtag, bis zu dem der Kunde
kündigen kann — und damit den Zeitpunkt, an dem eine Verlängerung spätestens verhandelt
sein muss. Alle übrigen Laufzeit- und Fristenfelder sind die Herleitung dazu.
Technische Zuordnung
Jobs und Mappings dieser Kette
| Order | Job | Mapping | Zieltabelle | Felder | Seite |
|---|
| 550 | serviceobjectsfrombc | BCServiceObjects | wysa_bcserviceobject | 17 | Abonnements aus BC |
| 560 | servicecommitmentsfrombc | BCServiceCommitments | wysa_bcserviceobjectcommitment | 27 | Abonnementzeilen aus BC |
Mit 44 Feldzuordnungen ist das der umfangreichste Datenbereich der Integration.
Quellen: serviceObjects und serviceCommitments — nicht unter
singhammerITConsulting/dyce/v2.0/ wie alle übrigen Abgleiche.
Schlüssel je Schritt
| Schritt | Schlüssel im Ziel | Alternate Key |
|---|
| Abonnements aus BC | wysa_number ← BC no | wysa_numberkey |
| Abonnementzeilen aus BC | wysa_bcsystemid ← BC systemId | wysa_bcsystemidkey |
Auffällig ist die Uneinheitlichkeit: Das Abonnement wird über seine fachliche Nummer
adressiert — wie das Angebot —, die Zeile über die
BC System-ID, wie die Angebotsposition. Beide Konventionen kommen also innerhalb
desselben Bereichs vor.
Auflösung von Referenzen
| Feld | Zieltabelle | Nachschlagefeld | Alternate Key |
|---|
| Rechnungsempfänger Kontakt | contact | wysa_bccontactnumber | wysa_bccodekey |
| Rechnungsempfänger Firma | account | wysa_bccontactnumber | wysa_bccodekey |
| Leistungsnehmer Kontakt | contact | wysa_bccontactnumber | wysa_bccodekey |
| Leistungsnehmer Firma | account | wysa_bccontactnumber | wysa_bccodekey |
| Abonnement (an der Zeile) | wysa_bcserviceobject | wysa_number | wysa_numberkey |
Damit setzen die Abonnements voraus, dass Firmen und Kontakte bereits abgeglichen sind.
Die Ordnungsnummern 550 und 560 liegen hinter den Kontakt-Jobs (430 / 440), sodass das
innerhalb desselben Durchlaufs zusammenfindet.
Feldnamen im Datenmodell
Das Datenmodell schreibt Logical Names in einer
lesefreundlichen Schreibweise (z. B. wysa_NextBilling für wysa_nextbillingdate). Die
folgende Übersicht ordnet die Felder dieses Mappings den Bezeichnungen im Datenmodell zu —
getrennt nach Abonnementzeile und dem übergeordneten Abonnement, da beide Entitäten hier
zusammenkommen.
Felder der Abonnementzeile (wysa_bcServiceObjectCommitment, dieses Mapping):
| Feld | Im Mapping | Im Datenmodell |
|---|
| Zeilennummer | wysa_contractlinenumber | wysa_LineNumber |
| Verlängerungslaufzeit | wysa_extensionterm | wysa_RenewalTerm |
| Leistungsbeginn / -ende | wysa_servicestartdate / wysa_serviceenddate | wysa_ServiceStart / wysa_ServiceEnd |
| Nächste Berechnung | wysa_nextbillingdate | wysa_NextBilling |
| Abrechnungszeitraum | wysa_billingbaseperiod | wysa_BillingPeriod |
| Berechnungsbasis | wysa_calculationbaseamount | wysa_CalculationBase |
Felder des übergeordneten Abonnements (wysa_bcServiceObject, aus
Abonnements aus BC übernehmen):
| Feld | Im Mapping | Im Datenmodell |
|---|
| Einheit | wysa_uom | wysa_Uom |
| Bereitstellung von | wysa_provisionstartdate | wysa_ProvisioningStart |
| Bereitstellung bis | wysa_provisionenddate | wysa_ProvisioningEnd |
| Rechnungsempfänger Firma | wysa_billtocustomerid | wysa_BillToAccountId |
| Leistungsnehmer Firma | wysa_endusercustomerid | wysa_EndUserAccountId |
Einheit ist ein reines Textfeld, kein Verweis auf einen Einheiten-Datensatz.
Zusätzlich schreibt das Mapping ein Feld wysa_entrynumber an der Abonnementzeile, das
im Datenmodell nicht aufgeführt ist.
7.1 - Abonnements aus Business Central übernehmen
Die abonnierten Leistungen kommen aus der Abonnementverwaltung des ERP nach Customer Engagement.
| |
|---|
| Richtung | Business Central → Customer Engagement |
| Wann | alle 2 Minuten |
| Betrifft | alle Abonnements, die in BC seit dem letzten Lauf geändert wurden |
| Technisch | Job serviceobjectsfrombc (550), Mapping BCServiceObjects |
Was passiert hier?
Dieser Schritt holt die abonnierten Leistungen aus Business Central: was abonniert
ist, in welcher Menge, mit welcher Seriennummer, für welchen Bereitstellungszeitraum —
und für wen.
Die kaufmännischen Bedingungen dazu, also Laufzeiten, Preise und Kündigungsfristen,
kommen im zweiten Schritt: Abonnementzeilen aus BC.
Wiedererkannt wird ein Abonnement über die Abonnementnummer.
Welche Felder kommen an?
| Feld in Business Central | Feld in Customer Engagement | Anmerkung |
|---|
| Nr. | Nummer | Erkennungsmerkmal |
| Nr. | (Name des Datensatzes) | dieselbe Nummer, zusätzlich als Anzeigename |
| systemId | BC System-ID | technischer Schlüssel des ERP |
| Herkunftsnr. | Produktnummer | als Text — kein Verweis, siehe unten |
| Beschreibung | Produktbeschreibung | |
| Menge | Menge | |
| Einheit | Einheit | |
| Seriennr. | Seriennummer | |
| Version | Version | |
| Bereitstellung von | Bereitstellung von | |
| Bereitstellung bis | Bereitstellung bis | |
| Rechnung an Kontaktnr. | Rechnungsempfänger Kontakt | wird zur Verknüpfung aufgelöst |
| Rechnung an Unternehmenskontaktnr. | Rechnungsempfänger Firma | wird zur Verknüpfung aufgelöst |
| Liefern an Kontaktnr. | Leistungsnehmer Kontakt | wird zur Verknüpfung aufgelöst |
| Liefern an Unternehmenskontaktnr. | Leistungsnehmer Firma | wird zur Verknüpfung aufgelöst |
| Kundenreferenz | Kundenreferenz | |
| — | Abonnementart | fester Vorgabewert |
Worauf zu achten ist
Vier Verknüpfungen für zwei Rollen
Das Abonnement trennt, wer bezahlt und wer nutzt — in Konzernstrukturen sind das
verschiedene Firmen. Business Central liefert dafür die Rechnungs- und die
Lieferadresse des Belegs, jeweils als Kontakt- und als Unternehmenskontaktnummer:
flowchart LR
BC["Abonnement in BC"] -->|"Rechnung an<br/>Kontaktnr."| A["Rechnungsempfänger<br/>Kontakt"]
BC -->|"Rechnung an<br/>Unternehmenskontaktnr."| B["Rechnungsempfänger<br/>Firma"]
BC -->|"Liefern an<br/>Kontaktnr."| C["Leistungsnehmer<br/>Kontakt"]
BC -->|"Liefern an<br/>Unternehmenskontaktnr."| D["Leistungsnehmer<br/>Firma"]
Alle vier werden über die BC Kontaktnummer aufgelöst — auch die beiden auf Firmen.
Das ist die zuverlässigere Variante gegenüber der Debitorennummer, die das
Angebot verwendet: Die Kontaktnummer ist an jeder nach BC
übertragenen Firma vorhanden.
Ist eine Firma oder ein Kontakt in CE nicht auffindbar, bleibt die entsprechende
Verknüpfung leer — das Abonnement wird trotzdem angelegt. Da die Kontakt-Jobs (430) vor
diesem Schritt laufen, findet das normalerweise innerhalb desselben Durchlaufs zusammen.
Die Produktnummer kommt als Text, nicht als Verweis
Produktnummer und Produktbeschreibung werden als Text übertragen. Das Feld Produkt —
der eigentliche Verweis auf den Produktdatensatz — bleibt leer.
Artikel werden nicht übernommen
Weil Artikel nicht aus Business Central übernommen werden, gibt es in CE keine
Artikel-Produkte, auf die verwiesen werden könnte. Siehe
Stammdaten.
Die Nummer steht in zwei Feldern
Die Abonnementnummer wird doppelt geschrieben: einmal in das Fachfeld Nummer, über das
auch die Zuordnung läuft, und einmal in das Namensfeld des Datensatzes. Damit erscheint
in Listen und Verknüpfungen die Nummer als Bezeichnung — das Abonnement hat keinen
sprechenden Namen.
Die Abonnementart wird bei jedem Lauf gesetzt
Das Feld Abonnementart wird mit einem festen Vorgabewert befüllt; Business Central
liefert dazu nichts. Eine in CE geänderte Abonnementart wird beim nächsten Abgleich
wieder überschrieben.
Vier Felder kommen nicht aus BC
Verkaufschance, Mitbewerber, Leaderstellung und Anzahl Zeilen sind nicht Teil
dieses Mappings — sie werden in Customer Engagement gepflegt oder durch Automatik
gefüllt. Das ist der Vertriebsteil des Abonnements: Aus einem auslaufenden Vertrag kann
ein Lead entstehen, und dazu gehört, wer der aktuelle Anbieter ist.
Keine Löschverarbeitung
Wird ein Abonnement in Business Central gelöscht, bleibt es in CE stehen — ohne
Kennzeichnung. Siehe die Warnung auf der Übersicht.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → serviceobjectsfrombc.
7.2 - Abonnementzeilen aus Business Central übernehmen
Laufzeiten, Preise, Rabatte und Kündigungsfristen der Abonnements kommen nach Customer Engagement.
| |
|---|
| Richtung | Business Central → Customer Engagement |
| Wann | alle 2 Minuten |
| Betrifft | alle Abonnementzeilen, die in BC seit dem letzten Lauf geändert wurden |
| Technisch | Job servicecommitmentsfrombc (560), Mapping BCServiceCommitments |
Was passiert hier?
Während das Abonnement sagt, was abonniert ist, sagt die
Abonnementzeile, zu welchen Bedingungen: Laufzeit, Kündigungsfrist, Preis, Rabatt und
Abrechnungsturnus.
Ein Abonnement kann mehrere Zeilen haben — etwa eine Grundlizenz mit
Zweijahreslaufzeit und einen Support-Baustein mit jährlicher Verlängerung.
Mit 27 Feldzuordnungen ist das das umfangreichste Mapping der ganzen Integration.
Wiedererkannt wird eine Zeile über die BC System-ID.
Welche Felder kommen an?
Zuordnung
| Feld in Business Central | Feld in Customer Engagement |
|---|
| systemId | BC System-ID |
| Abonnementnr. | Abonnement (Verknüpfung) |
| Vertragsnr. | Vertragsnummer |
| Vertragszeilennr. | Zeilennummer |
| Zeilennr. | Eintragsnummer |
| Beschreibung | Beschreibung |
| Paketcode | Paketcode |
Laufzeit und Fristen
| Feld in Business Central | Feld in Customer Engagement |
|---|
| Anfangslaufzeit | Anfangslaufzeit |
| Verlängerungslaufzeit | Verlängerungslaufzeit |
| Kündigungsfrist | Kündigungsfrist |
| Kündigung möglich bis | Kündigung möglich bis |
| Leistungsbeginn | Leistungsbeginn |
| Leistungsende | Leistungsende |
| Laufzeit bis | Laufzeit bis |
Abrechnung
| Feld in Business Central | Feld in Customer Engagement | Anmerkung |
|---|
| Nächstes Berechnungsdatum | Nächste Berechnung | |
| Abrechnungsrhythmus | Abrechnungsrhythmus | |
| Abrechnungsbasiszeitraum | Abrechnungszeitraum | |
| Abrechnung über | Abrechnung über | Text wird zum Auswahlwert |
| Partner | Partner | Text wird zum Auswahlwert |
Preis und Rabatt
| Feld in Business Central | Feld in Customer Engagement | Anmerkung |
|---|
| Preis | Preis | |
| Menge | Menge | |
| Rabatt | Rabatt | Ja/Nein — Text wird zum Auswahlwert |
| Rabattbetrag | Rabattbetrag | |
| Rabatt % | Rabatt Prozent | |
| Berechnungsbasisbetrag | Berechnungsbasis | |
| Berechnungsbasis | Berechnungsbasis Prozent | |
| Leistungsbetrag | Leistungsbetrag | |
Worauf zu achten ist
Kündigung möglich bis ist das entscheidende Feld
Von allen 27 Feldern ist dieses das wichtigste für den Vertrieb: Es nennt den konkreten
Stichtag, bis zu dem der Kunde kündigen kann — und damit den Zeitpunkt, an dem eine
Verlängerung spätestens verhandelt sein muss.
Anfangslaufzeit, Verlängerungslaufzeit und Kündigungsfrist sind die Regelwerke dahinter;
Business Central rechnet daraus das Datum aus und liefert es fertig. Customer Engagement
muss nichts nachrechnen.
Die Zeile hängt an der Abonnementnummer
Die Verknüpfung zum Abonnement wird über die Abonnementnummer aufgelöst. Ist das
Abonnement in CE noch nicht vorhanden, bleibt die Verknüpfung leer — die Zeile wird
trotzdem angelegt und stünde dann ohne Bezug da.
Da Abonnements aus BC mit Order 550 vor diesem Schritt (560)
läuft, findet das normalerweise innerhalb desselben Durchlaufs zusammen.
Drei Felder werden von Text in Auswahlwerte übersetzt
Business Central liefert Abrechnung über, Partner und Rabatt als Text. In Customer
Engagement sind das Auswahlfelder, weshalb hier die Operation OptionMapping zum Einsatz
kommt — die es sonst nirgends in der Integration gibt:
| Feld | Wert in BC | Wert in CE |
|---|
| Abrechnung über | Contract | Vertrag |
| Sales | Verkauf |
| Partner | Customer | Kunde |
| Vendor | Lieferant |
| Rabatt | true | Ja |
| false | Nein |
Übersetzungstabellen
Die Übersetzungstabellen sind Teil der Mapping-Konfiguration und enthalten genau die oben
aufgeführten Werte. Ein Wert, der dort nicht aufgeführt ist, wird nicht übersetzt und
lässt das Zielfeld leer.
Zwei Felder für die Berechnungsbasis, gekreuzt benannt
Hier ist beim Lesen der Konfiguration Vorsicht geboten: Das BC-Feld
Berechnungsbasisbetrag geht in das CE-Feld Berechnungsbasis, das BC-Feld
Berechnungsbasis dagegen in Berechnungsbasis Prozent. Die Namen kreuzen sich also.
Fachlich passt es — BC führt unter Berechnungsbasis einen Prozentsatz —, beim Prüfen
eines Datensatzes ist es aber leicht zu verwechseln.
Drei Nummernfelder
Die Zeile bringt drei verschiedene Nummern mit: Vertragsnummer, Zeilennummer (aus der
Vertragszeile) und Eintragsnummer (aus der Zeilennummer des Belegs). Für die Zuordnung
ist keine davon relevant — die läuft über die BC System-ID.
Währung und abzurechnendes Produkt fehlen
Die Felder Währung und Abzurechnendes Produkt sind nicht Teil dieses Mappings. Preis,
Rabattbetrag und Leistungsbetrag kommen also ohne Währungsangabe an; in CE gilt dann,
was am Datensatz voreingestellt ist.
Keine Löschverarbeitung
Wird eine Abonnementzeile in Business Central gelöscht, bleibt sie in CE stehen. Siehe
die Warnung auf der Übersicht.
Technische Details
Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und
Transformationen steht unter
Technisches Mapping → servicecommitmentsfrombc.
8 - Technisches Mapping
Rein technische Referenz aller DataBridge-Jobs in Ausführungsreihenfolge: Job, Mapping, Richtung, Zeitplan und Feldzuordnung.
Diese Sektion ist die technische Referenz zur DataBridge-Integration zwischen Business
Central und Customer Engagement — für alle, die die Konfiguration warten, erweitern oder
im Fehlerfall nachvollziehen müssen. Sie ergänzt die fachliche Doku der anderen Bereiche
um eine vollständige, tabellarische Sicht auf Jobs und Feldzuordnungen, ohne die
fachlichen Zusammenhänge zu erklären.
Sortiert nach der Ausführungsreihenfolge (Order) des jeweiligen Jobs. Response-Jobs
laufen ohne eigenen Zeitplan; sie werden vom auslösenden Job über das Feld ResponseJob
unmittelbar danach aufgerufen und stehen deshalb an ihrer Order-Position in der Kette.
| Order | Job | Mapping | Richtung | Läuft | Technische Seite | Fachliche Doku |
|---|
| 110 | countriesfrombc | BCCountries | BC → CE | Zeitplan | → | → |
| 115 | languagesfrombc | BCLanguages | BC → CE | Zeitplan | → | → |
| 120 | salutationsfrombc | BCSalutations | BC → CE | Zeitplan | → | → |
| 125 | customerdiscountgroupsfrombc | BCCustomerDiscountGroups | BC → CE | Zeitplan | → | → |
| 130 | salespersonsfrombc | BCSalesPersons | BC → CE | Zeitplan | → | → |
| 135 | positionsfrombc | BCPositions | BC → CE | Zeitplan | → | → |
| 190 | opportunityelementsfrombc | BCOpportunityElements | BC → CE | Zeitplan | → | → |
| 220 | accountsnewfromce | CEAccounts | CE → BC | Zeitplan | → | → |
| 221 | accountsresponsefrombc | BCAccountsResponse | BC → CE | per Response-Job | → | → |
| 240 | contactsnewfromce | CEContacts | CE → BC | Zeitplan | → | → |
| 241 | contactsresponsefrombc | BCContactsResponse | BC → CE | per Response-Job | → | → |
| 260 | opportunitiesnewfromce | CEOpportunities | CE → BC | Zeitplan | → | → |
| 261 | opportunitiesresponsefrombc | BCOpportunitiesResponse | BC → CE | per Response-Job | → | → |
| 410 | accountsfrombc | BCAccounts | BC → CE | Zeitplan | → | → |
| 420 | accountsfrombcdelete | BCAccountsDelete | BC → CE | Zeitplan | → | → |
| 430 | contactsfrombc | BCContacts | BC → CE | Zeitplan | → | → |
| 440 | contactsfrombcdelete | BCContactsDelete | BC → CE | Zeitplan | → | → |
| 450 | productsfrombcdelete | BCProductsDelete | BC → CE | Zeitplan | → | → |
| 520 | accountupdatesfromce | CEAccountUpdates | CE → BC | Zeitplan | → | → |
| 530 | contactupdatesfromce | CEContactsUpdates | CE → BC | Zeitplan | → | → |
| 550 | serviceobjectsfrombc | BCServiceObjects | BC → CE | Zeitplan | → | → |
| 560 | servicecommitmentsfrombc | BCServiceCommitments | BC → CE | Zeitplan | → | → |
| 610 | salesquotesfrombc | BCSalesQuotes | BC → CE | Zeitplan | → | → |
| 620 | salescalculationelementsfrombc | BCSalesCalculationElements | BC → CE | Zeitplan | → | → |
| 621 | salescalculationelementsfrombcdelete | BCSalesCalculationElementsDelete | BC → CE | Zeitplan | → | → |
| 625 | activatesalesquotesfrombc | BCSalesQuotesActivate | BC → CE | Zeitplan | → | → |
| 690 | salesquotesfrombcdelete | BCSalesQuotesDelete | BC → CE | Zeitplan | → | → |
| 710 | opportunityproductsnewfromce | CEOpportunityProducts | CE → BC | Zeitplan | → | → |
| 750 | opportunityproductsupdatesfromce | CEOpportunityProductsUpdates | CE → BC | Zeitplan | → | → |
| 760 | opportunityproductsresponsefrombc | BCOpportunityProductsResponse | BC → CE | per Response-Job | → | → |
8.1 - 110 · countriesfrombc
Technisches Mapping des Jobs countriesfrombc (BCCountries).
| Eigenschaft | Wert |
|---|
| Order | 110 |
| Job | countriesfrombc |
| Mapping | BCCountries |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | acdcountryregions aus singhammerITConsulting/dyce/v2.0 |
| Zieltabelle | wysa_country |
| Zeitplan | 0 */2 * * * * |
| Filter | {{lastModifiedDateTime gt %watermark%}} and code ne '' |
| Watermark | lastModifiedDateTime (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Wertelisten aus BC |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
code | wysa_bccode | — | — |
id | wysa_bcsystemid | — · Schlüssel | — |
isoCode | wysa_iso31661alpha2 | — | — |
name | wysa_name | — | — |
Alternate Key
{
"keyType": "CustomKey",
"keyName": "wysa_bcsystemidkey",
"keyValues": [
{
"attributeName": "id",
"keyName": "wysa_bcsystemid",
"rank": 1
}
],
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Vergleich mit anderen Wertelisten-Jobs
Alle fünf Wertelisten-Jobs (countriesfrombc, languagesfrombc, salutationsfrombc,
customerdiscountgroupsfrombc, positionsfrombc) teilen dieselbe Konfiguration —
Zeitplan, Quell- und Zielverbindung, Watermark und Basisfilter — und unterscheiden sich
nur in Quelltabelle, Zieltabelle und Filter-Zusatz:
| Order | Job | API Page | Zieltabelle | Filter-Zusatz |
|---|
| 110 | countriesfrombc | acdcountryregions | wysa_country | code ne '' |
| 115 | languagesfrombc | acdlanguages | wysa_language | — |
| 120 | salutationsfrombc | acdsalutations | wysa_bcsalutation | — |
| 125 | customerdiscountgroupsfrombc | acdcustomerdiscgroups | wysa_bccustomerdiscountgroup | — |
| 135 | positionsfrombc | acdorganizationallevels | wysa_bcposition | — |
countriesfrombc ist der einzige der fünf Jobs mit einem Filter-Zusatz (code ne '').
Keines der fünf Mappings enthält eine Transformation.
Auflösung in den Belegketten
wysa_country wird über wysa_bccode aufgelöst — in Firma und Kontakt, je in beide
Richtungen. Die BC→CE-Auflösung verwendet die Operation Lookup über den Alternate Key
wysa_bccodekey, die CE→BC-Auflösung die Operation LookupValue mit
UseCache: true.
8.2 - 115 · languagesfrombc
Technisches Mapping des Jobs languagesfrombc (BCLanguages).
| Eigenschaft | Wert |
|---|
| Order | 115 |
| Job | languagesfrombc |
| Mapping | BCLanguages |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | acdlanguages aus singhammerITConsulting/dyce/v2.0 |
| Zieltabelle | wysa_language |
| Zeitplan | 0 */2 * * * * |
| Filter | {{lastModifiedDateTime gt %watermark%}} |
| Watermark | lastModifiedDateTime (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Wertelisten aus BC |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
code | wysa_bccode | — | — |
id | wysa_bcsystemid | — · Schlüssel | — |
name | wysa_name | — | — |
Alternate Key
{
"keyType": "CustomKey",
"keyName": "wysa_bcsystemidkey",
"keyValues": [
{
"attributeName": "id",
"keyName": "wysa_bcsystemid",
"rank": 1
}
],
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Vergleich mit anderen Wertelisten-Jobs
Alle fünf Wertelisten-Jobs (countriesfrombc, languagesfrombc, salutationsfrombc,
customerdiscountgroupsfrombc, positionsfrombc) teilen dieselbe Konfiguration —
Zeitplan, Quell- und Zielverbindung, Watermark und Basisfilter — und unterscheiden sich
nur in Quelltabelle, Zieltabelle und Filter-Zusatz:
| Order | Job | API Page | Zieltabelle | Filter-Zusatz |
|---|
| 110 | countriesfrombc | acdcountryregions | wysa_country | code ne '' |
| 115 | languagesfrombc | acdlanguages | wysa_language | — |
| 120 | salutationsfrombc | acdsalutations | wysa_bcsalutation | — |
| 125 | customerdiscountgroupsfrombc | acdcustomerdiscgroups | wysa_bccustomerdiscountgroup | — |
| 135 | positionsfrombc | acdorganizationallevels | wysa_bcposition | — |
Keines der fünf Mappings enthält eine Transformation.
Auflösung in den Belegketten
wysa_language wird über wysa_bccode aufgelöst — am Kontakt, in beide Richtungen. Die
BC→CE-Auflösung verwendet die Operation Lookup über den Alternate Key
wysa_bccodekey, die CE→BC-Auflösung die Operation LookupValue mit
UseCache: true.
8.3 - 120 · salutationsfrombc
Technisches Mapping des Jobs salutationsfrombc (BCSalutations).
| Eigenschaft | Wert |
|---|
| Order | 120 |
| Job | salutationsfrombc |
| Mapping | BCSalutations |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | acdsalutations aus singhammerITConsulting/dyce/v2.0 |
| Zieltabelle | wysa_bcsalutation |
| Zeitplan | 0 */2 * * * * |
| Filter | {{lastModifiedDateTime gt %watermark%}} |
| Watermark | lastModifiedDateTime (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Wertelisten aus BC |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
code | wysa_code | — | — |
description | wysa_name | — | — |
id | wysa_bcsystemid | — · Schlüssel | — |
Alternate Key
{
"keyType": "CustomKey",
"keyName": "wysa_bcsystemidkey",
"keyValues": [
{
"attributeName": "id",
"keyName": "wysa_bcsystemid",
"rank": 1
}
],
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Vergleich mit anderen Wertelisten-Jobs
Alle fünf Wertelisten-Jobs (countriesfrombc, languagesfrombc, salutationsfrombc,
customerdiscountgroupsfrombc, positionsfrombc) teilen dieselbe Konfiguration —
Zeitplan, Quell- und Zielverbindung, Watermark und Basisfilter — und unterscheiden sich
nur in Quelltabelle, Zieltabelle und Filter-Zusatz:
| Order | Job | API Page | Zieltabelle | Filter-Zusatz |
|---|
| 110 | countriesfrombc | acdcountryregions | wysa_country | code ne '' |
| 115 | languagesfrombc | acdlanguages | wysa_language | — |
| 120 | salutationsfrombc | acdsalutations | wysa_bcsalutation | — |
| 125 | customerdiscountgroupsfrombc | acdcustomerdiscgroups | wysa_bccustomerdiscountgroup | — |
| 135 | positionsfrombc | acdorganizationallevels | wysa_bcposition | — |
Keines der fünf Mappings enthält eine Transformation.
Auflösung in den Belegketten
wysa_bcsalutation wird über wysa_code aufgelöst — am Kontakt, in beide Richtungen.
Die BC→CE-Auflösung verwendet die Operation Lookup über den Alternate Key
wysa_bccodekey, die CE→BC-Auflösung die Operation LookupValue mit
UseCache: true.
8.4 - 125 · customerdiscountgroupsfrombc
Technisches Mapping des Jobs customerdiscountgroupsfrombc (BCCustomerDiscountGroups).
| Eigenschaft | Wert |
|---|
| Order | 125 |
| Job | customerdiscountgroupsfrombc |
| Mapping | BCCustomerDiscountGroups |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | acdcustomerdiscgroups aus singhammerITConsulting/dyce/v2.0 |
| Zieltabelle | wysa_bccustomerdiscountgroup |
| Zeitplan | 0 */2 * * * * |
| Filter | {{lastModifiedDateTime gt %watermark%}} |
| Watermark | lastModifiedDateTime (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Wertelisten aus BC |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
code | wysa_bccode | — | — |
description | wysa_name | — | — |
id | wysa_bcsystemid | — · Schlüssel | — |
Alternate Key
{
"keyType": "CustomKey",
"keyName": "wysa_bcsystemidkey",
"keyValues": [
{
"attributeName": "id",
"keyName": "wysa_bcsystemid",
"rank": 1
}
],
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Vergleich mit anderen Wertelisten-Jobs
Alle fünf Wertelisten-Jobs (countriesfrombc, languagesfrombc, salutationsfrombc,
customerdiscountgroupsfrombc, positionsfrombc) teilen dieselbe Konfiguration —
Zeitplan, Quell- und Zielverbindung, Watermark und Basisfilter — und unterscheiden sich
nur in Quelltabelle, Zieltabelle und Filter-Zusatz:
| Order | Job | API Page | Zieltabelle | Filter-Zusatz |
|---|
| 110 | countriesfrombc | acdcountryregions | wysa_country | code ne '' |
| 115 | languagesfrombc | acdlanguages | wysa_language | — |
| 120 | salutationsfrombc | acdsalutations | wysa_bcsalutation | — |
| 125 | customerdiscountgroupsfrombc | acdcustomerdiscgroups | wysa_bccustomerdiscountgroup | — |
| 135 | positionsfrombc | acdorganizationallevels | wysa_bcposition | — |
Keines der fünf Mappings enthält eine Transformation.
Auflösung in den Belegketten
wysa_bccustomerdiscountgroup wird über wysa_bccode aufgelöst — an der Firma, nur
BC → CE, über die Operation Lookup mit dem Alternate Key wysa_bccodekey. Dieses Feld
gehört zu denen, die nur aus BC kommen und nie zurückgeschrieben werden.
8.5 - 130 · salespersonsfrombc
Technisches Mapping des Jobs salespersonsfrombc (BCSalesPersons).
| Eigenschaft | Wert |
|---|
| Order | 130 |
| Job | salespersonsfrombc |
| Mapping | BCSalesPersons |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | acdsalespersons aus singhammerITConsulting/dyce/v2.0 |
| Zieltabelle | wysa_bcsalesperson |
| Zeitplan | 0 */2 * * * * |
| Filter | {{lastModifiedDateTime gt %watermark%}} |
| Watermark | lastModifiedDateTime (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Verkäufer aus BC |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
id | wysa_bcsystemid | — · Schlüssel | — |
code | wysa_code | — | — |
displayName | wysa_name | — | — |
eMail | wysa_emailaddress | — | — |
Alternate Key
{
"keyType": "CustomKey",
"keyName": "wysa_bcsystemidkey",
"keyValues": [
{
"attributeName": "id",
"keyName": "wysa_bcsystemid",
"rank": 1
}
],
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Auflösung in den Belegketten
Das Nachschlagefeld ist stets wysa_code, nicht wysa_bccode:
| Mapping | Richtung | Operation |
|---|
BCAccounts | BC → CE | Lookup über wysa_bccodekey |
CEAccounts, CEAccountUpdates | CE → BC | LookupValue |
CEContacts, CEContactsUpdates | CE → BC | LookupValue |
CEOpportunities | CE → BC | LookupValue |
BCSalesQuotes | BC → CE | Lookup über wysa_bccodekey |
Beobachtungen
Auffällig ist, dass BCContacts den Verkäufer nicht aus BC abholt, obwohl beide
CE→BC-Mappings des Kontakts ihn senden.
8.6 - 135 · positionsfrombc
Technisches Mapping des Jobs positionsfrombc (BCPositions).
| Eigenschaft | Wert |
|---|
| Order | 135 |
| Job | positionsfrombc |
| Mapping | BCPositions |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | acdorganizationallevels aus singhammerITConsulting/dyce/v2.0 |
| Zieltabelle | wysa_bcposition |
| Zeitplan | 0 */2 * * * * |
| Filter | {{lastModifiedDateTime gt %watermark%}} |
| Watermark | lastModifiedDateTime (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Wertelisten aus BC |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
code | wysa_code | — | — |
description | wysa_name | — | — |
id | wysa_bcsystemid | — · Schlüssel | — |
Alternate Key
{
"keyType": "CustomKey",
"keyName": "wysa_bcsystemidkey",
"keyValues": [
{
"attributeName": "id",
"keyName": "wysa_bcsystemid",
"rank": 1
}
],
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Vergleich mit anderen Wertelisten-Jobs
Alle fünf Wertelisten-Jobs (countriesfrombc, languagesfrombc, salutationsfrombc,
customerdiscountgroupsfrombc, positionsfrombc) teilen dieselbe Konfiguration —
Zeitplan, Quell- und Zielverbindung, Watermark und Basisfilter — und unterscheiden sich
nur in Quelltabelle, Zieltabelle und Filter-Zusatz:
| Order | Job | API Page | Zieltabelle | Filter-Zusatz |
|---|
| 110 | countriesfrombc | acdcountryregions | wysa_country | code ne '' |
| 115 | languagesfrombc | acdlanguages | wysa_language | — |
| 120 | salutationsfrombc | acdsalutations | wysa_bcsalutation | — |
| 125 | customerdiscountgroupsfrombc | acdcustomerdiscgroups | wysa_bccustomerdiscountgroup | — |
| 135 | positionsfrombc | acdorganizationallevels | wysa_bcposition | — |
Keines der fünf Mappings enthält eine Transformation.
Auflösung in den Belegketten
wysa_bcposition wird über wysa_code aufgelöst — am Kontakt und am Lead, nur BC → CE,
über die Operation Lookup mit dem Alternate Key wysa_bccodekey.
8.7 - 190 · opportunityelementsfrombc
Technisches Mapping des Jobs opportunityelementsfrombc (BCOpportunityElements).
| Eigenschaft | Wert |
|---|
| Order | 190 |
| Job | opportunityelementsfrombc |
| Mapping | BCOpportunityElements |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | acdopportunityelements aus singhammerITConsulting/dyce/v2.0 |
| Zieltabelle | product |
| Zeitplan | 0 */2 * * * * |
| Filter | {{systemModifiedAt gt %watermark%}} |
| Watermark | systemModifiedAt (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Verkaufschancen-Elemente aus BC |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
code | wysa_bccode | — · Schlüssel | — |
| — | defaultuomid | DefaultValue | = 946e49c5-b59d-41c6-b47a-da4ecbfa95fc |
| — | defaultuomscheduleid | DefaultValue | = 1b706c12-f34a-4826-8b3c-0628b5df2ba2 |
| — | productstructure | DefaultValue | = 1 |
description | description | — | — |
dimension1Code | wysa_bcdimension1code | — | — |
dimension1ValueCode | wysa_bcdimension1valuecode | — | — |
dimension2Code | wysa_bcdimension2code | — | — |
dimension2ValueCode | wysa_bcdimension2valuecode | — | — |
systemId | wysa_bcsystemid | — | — |
Alternate Key
{
"keyType": "CustomKey",
"keyName": "wysa_bccode",
"keyValues": [
{
"attributeName": "code",
"keyName": "wysa_bccode",
"rank": 1
}
],
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Drei Vorgabewerte ohne Quellfeld:
{
"Operations": [{
"Name": "DefaultValue",
"Parameters": { "DefaultValue": "946e49c5-b59d-41c6-b47a-da4ecbfa95fc" }
}]
}
| Zielfeld | Wert | Bedeutung |
|---|
defaultuomid | 946e49c5-b59d-41c6-b47a-da4ecbfa95fc | Standardeinheit — umgebungsspezifische GUID |
defaultuomscheduleid | 1b706c12-f34a-4826-8b3c-0628b5df2ba2 | Einheitengruppe — umgebungsspezifische GUID |
productstructure | 1 | Dataverse-Standardwert für Produkt (nicht Produktfamilie oder Bundle) |
Die beiden GUIDs existieren nur in der Umgebung, für die das Mapping angelegt wurde, und
müssen bei jedem Umgebungswechsel angepasst werden.
Beobachtungen
- Das Watermark-Feld heißt hier
systemModifiedAt, nicht lastModifiedDateTime wie in
den übrigen BC→CE-Jobs. - Abweichend von den übrigen Mappings steht in
keyName der Feldname wysa_bccode,
nicht der Name eines Alternate Key wie wysa_bccodekey.
8.8 - 220 · accountsnewfromce
Technisches Mapping des Jobs accountsnewfromce (CEAccounts).
| Eigenschaft | Wert |
|---|
| Order | 220 |
| Job | accountsnewfromce |
| Mapping | CEAccounts |
| Richtung | CE → BC |
| Quellverbindung | CRM_Test |
| Zielverbindung | BC_Test |
| Quelltabelle (API) | account aus BC_Test-seitig, kein API-Pfad |
| Zieltabelle | acdcontactscomp |
| Zeitplan | 0 */2 * * * * |
| Filter | JSON-Filter: IsNull(wysa_bcsystemid) UND OptionSetValue(wysa_sync2bc=799840000) |
| Watermark | — |
| Response-Job | accountsresponsefrombc |
| Fachliche Doku | Neue Firma nach BC |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
accountid | dataverseId | — · Schlüssel | — |
address1_city | city | — | — |
address1_line1 | address | — | — |
address1_line2 | address2 | — | — |
address1_postalcode | postCode | — | — |
| — | contactType | DefaultValue | = Company |
| — | salutationCode | DefaultValue | = MANDANT |
emailaddress1 | eMail | — | — |
telephone1 | phoneNumber | — | — |
websiteurl | homePage | — | — |
_wysa_address1_countryid | countryRegionCode | LookupValue | liest wysa_bccode aus wysa_country über wysa_address1_countryid |
wysa_bcname1 | displayName | — | — |
wysa_bcname2 | name2 | — | — |
_wysa_bcsalespersonid | salespersonCode | LookupValue | liest wysa_code aus wysa_bcsalesperson über wysa_bcsalespersonid |
Alternate Key
{
"keyType": "Filter",
"keyValues": [
{
"attributeName": "id",
"keyName": "dataverseId",
"rank": 1
}
],
"keyAttributeFromExisting": "id",
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Filter im Detail
{
"Operations": [
{ "Name": "IsNull", "Parameters": { "SourceField": "wysa_bcsystemid" } },
{ "Name": "OptionSetValue",
"Parameters": { "SourceField": "wysa_sync2bc", "Value": 799840000 } }
]
}
Land (_wysa_address1_countryid → countryRegionCode) — Umkehrung des Lookups aus
accountsfrombc: Die Dataverse-Referenz wird über das Feld wysa_bccode der Werteliste
wysa_country zum BC-Code aufgelöst. UseCache: true sorgt dafür, dass die Werteliste
je Lauf nur einmal gelesen wird.
{
"Operations": [{
"Name": "LookupValue",
"Parameters": {
"LookupType": "Attribute",
"SourceField": "wysa_address1_countryid",
"LookupTable": "wysa_country",
"LookupField": "wysa_bccode",
"UseCache": true
}
}]
}
Verkäufer (_wysa_bcsalespersonid → salespersonCode) — identisches Muster,
Nachschlagetabelle wysa_bcsalesperson, Nachschlagefeld wysa_code.
Kontaktart und Anrede — ohne Quellfeld, feste Werte Company bzw. MANDANT per
DefaultValue. Da CEAccountUpdates diese Felder nicht enthält, werden sie
ausschließlich bei der Neuanlage gesetzt.
Beobachtungen
Die Alternate Key auf dataverseId macht den Job wiederholbar: Läuft er zweimal, bevor
der Response-Job (accountsresponsefrombc) die wysa_bcsystemid zurückgeschrieben hat,
entsteht in BC keine Dublette.
8.9 - 221 · accountsresponsefrombc
Technisches Mapping des Jobs accountsresponsefrombc (BCAccountsResponse).
| Eigenschaft | Wert |
|---|
| Order | 221 |
| Job | accountsresponsefrombc |
| Mapping | BCAccountsResponse |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | acdcontactscomp aus singhammerITConsulting/dyce/v2.0 |
| Zieltabelle | account |
| Zeitplan | —, wird von accountsnewfromce über ResponseJob ausgelöst |
| Filter | {{lastModifiedDateTime gt %watermark%}} |
| Watermark | modifiedon (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Rückmeldung aus BC (Firma) |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
_accountid | accountid | ReadFromMessage · Schlüssel | aus Antwortnachricht |
id | wysa_bcsystemid | — | — |
number | wysa_bccontactnumber | — | — |
Alternate Key
{
"keyType": "PrimaryKey",
"keyName": "_accountid",
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Die Operation ReadFromMessage ist parameterlos. Sie weist die DataBridge an, den Wert
nicht aus einer Tabelle zu lesen, sondern aus der Antwortnachricht des vorangegangenen
Aufrufs (accountsnewfromce):
{ "Operations": [{ "Name": "ReadFromMessage" }] }
Möglich ist die Primärschlüssel-Auflösung, weil CEAccounts die CE-GUID im BC-Feld
dataverseId mitgeschickt hat. BC gibt sie in der Antwort zurück, und ReadFromMessage
liest sie von dort als _accountid aus.
Vergleich mit anderen Jobs
IsActive = false ist bei Response-Jobs kein Hinweis auf einen abgeschalteten Job.
Sie laufen nicht nach eigenem Zeitplan, sondern werden vom auslösenden Job gestartet und
verarbeiten dessen Antwortnachricht. Dasselbe Muster findet sich bei mehreren
Job-Paaren:
| Auslösender Job | Order | Response-Job | Order |
|---|
accountsnewfromce | 220 | accountsresponsefrombc | 221 |
contactsnewfromce | 240 | contactsresponsefrombc | 241 |
opportunitiesnewfromce | 260 | opportunitiesresponsefrombc | 261 |
opportunityproductsnewfromce | 710 | opportunityproductsresponsefrombc | 760 |
8.10 - 240 · contactsnewfromce
Technisches Mapping des Jobs contactsnewfromce (CEContacts).
| Eigenschaft | Wert |
|---|
| Order | 240 |
| Job | contactsnewfromce |
| Mapping | CEContacts |
| Richtung | CE → BC |
| Quellverbindung | CRM_Test |
| Zielverbindung | BC_Test |
| Quelltabelle (API) | contact aus BC_Test-seitig, kein API-Pfad |
| Zieltabelle | acdcontacts |
| Zeitplan | 0 */2 * * * * |
| Filter | JSON-Filter: IsNull(wysa_bcsystemid) UND OptionSetValue(wysa_sync2bc=799840000) |
| Watermark | — |
| Response-Job | contactsresponsefrombc |
| Fachliche Doku | Neuer Kontakt nach BC |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
address1_city | city | — | — |
address1_line1 | address | — | — |
address1_line2 | address2 | — | — |
address1_postalcode | postCode | — | — |
contactid | dataverseId | — · Schlüssel | — |
| — | contactType | DefaultValue | = Person |
emailaddress1 | eMail | — | — |
firstname | firstName | — | — |
lastname | surname | — | — |
middlename | middleName | — | — |
mobilephone | mobilePhoneNumber | — | — |
_parentcustomerid | companyNumber | LookupValue | liest wysa_bccontactnumber aus account über parentcustomerid |
telephone1 | phoneNumber | — | — |
_wysa_address1_countryid | countryRegionCode | LookupValue | liest wysa_bccode aus wysa_country über wysa_address1_countryid |
_wysa_bcsalespersonid.wysa_code | salespersonCode | LookupValue | liest wysa_code aus wysa_bcsalesperson über wysa_bcsalespersonid |
_wysa_language.wysa_bccode | languageCode | LookupValue | liest wysa_bccode aus wysa_language über wysa_language |
_wysa_salutationbcid.wysa_code | salutationCode | LookupValue | liest wysa_code aus wysa_bcsalutation über wysa_salutationbcid |
Alternate Key
{
"keyType": "Filter",
"keyValues": [
{
"attributeName": "id",
"keyName": "dataverseId",
"rank": 1
}
],
"keyAttributeFromExisting": "id",
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Die CE-GUID wird in das BC-Feld dataverseId geschrieben; ein bereits angelegter
Datensatz wird über einen Filter auf dieses Feld wiedergefunden. Das macht den Job
wiederholbar, ohne Dubletten zu erzeugen.
Weitere technische Details
Alle fünf LookupValue-Operationen arbeiten mit LookupType: Attribute und
UseCache: true und unterscheiden sich nur in Nachschlagetabelle und -feld:
| Quellfeld | Nachschlagetabelle | Nachschlagefeld |
|---|
wysa_address1_countryid | wysa_country | wysa_bccode |
wysa_language | wysa_language | wysa_bccode |
wysa_salutationbcid | wysa_bcsalutation | wysa_code |
wysa_bcsalespersonid | wysa_bcsalesperson | wysa_code |
parentcustomerid | account | wysa_bccontactnumber |
Beispiel übergeordnete Firma:
{
"Operations": [{
"Name": "LookupValue",
"Parameters": {
"LookupType": "Attribute",
"SourceField": "parentcustomerid",
"LookupTable": "account",
"LookupField": "wysa_bccontactnumber",
"UseCache": true
}
}]
}
Kontaktart — ohne Quellfeld, fester Wert Person per DefaultValue. Da
CEContactsUpdates das Feld nicht enthält, wird es
ausschließlich bei der Neuanlage gesetzt.
8.11 - 241 · contactsresponsefrombc
Technisches Mapping des Jobs contactsresponsefrombc (BCContactsResponse).
| Eigenschaft | Wert |
|---|
| Order | 241 |
| Job | contactsresponsefrombc |
| Mapping | BCContactsResponse |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | acdcontacts aus singhammerITConsulting/dyce/v2.0 |
| Zieltabelle | contact |
| Zeitplan | —, wird von contactsnewfromce über ResponseJob ausgelöst |
| Filter | {{lastModifiedDateTime gt %watermark%}} |
| Watermark | modifiedon (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Rückmeldung aus BC (Kontakt) |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
address2 | address1_line2 | — | — |
address | address1_line1 | — | — |
city | address1_city | — | — |
_contactid | contactid | ReadFromMessage · Schlüssel | aus Antwortnachricht |
countryRegionCode | wysa_address1_countryid | Lookup | → wysa_country über wysa_bccodekey (countryRegionCode → wysa_bccode) |
id | wysa_bcsystemid | — | — |
number | wysa_bccontactnumber | — | — |
phoneNumber | telephone1 | — | — |
postCode | address1_postalcode | — | — |
Alternate Key
{
"keyType": "PrimaryKey",
"keyName": "_contactid",
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Möglich, weil contactsnewfromce die CE-GUID im BC-Feld
dataverseId mitgeschickt hat. BC gibt sie in der Antwort zurück; die Operation
ReadFromMessage liest sie von dort als contactid aus.
IsActive = false ist bei diesem Job kein Hinweis auf einen abgeschalteten Job —
Response-Jobs laufen nicht nach eigenem Zeitplan, sondern werden vom auslösenden Job
(contactsnewfromce, Order 240, über dessen Feld ResponseJob) gestartet.
Weitere technische Details
Vergleich mit anderen Jobs
Der Länder-Lookup (countryRegionCode → wysa_address1_countryid) ist identisch zu
dem in contactsfrombc: Zieltabelle wysa_country,
Schlüsselfeld wysa_bccode, Alternate Key wysa_bccodekey.
Dasselbe Response-Muster (auslösender Job → Response-Job) findet sich auch bei anderen
Objekten:
| Auslösender Job | Order | Response-Job | Order | Felder |
|---|
accountsnewfromce | 220 | accountsresponsefrombc | 221 | 3 |
contactsnewfromce | 240 | contactsresponsefrombc | 241 | 9 |
opportunitiesnewfromce | 260 | opportunitiesresponsefrombc | 261 | 3 |
opportunityproductsnewfromce | 710 | opportunityproductsresponsefrombc | 760 | 2 |
Beobachtungen
Der Kontakt ist der einzige Bereich, in dem die Rückmeldung mehr als die Schlüssel
zurückträgt (9 Feldzuordnungen statt 2–3 bei den anderen Objekten).
8.12 - 260 · opportunitiesnewfromce
Technisches Mapping des Jobs opportunitiesnewfromce (CEOpportunities).
| Eigenschaft | Wert |
|---|
| Order | 260 |
| Job | opportunitiesnewfromce |
| Mapping | CEOpportunities |
| Richtung | CE → BC |
| Quellverbindung | CRM_Test |
| Zielverbindung | BC_Test |
| Quelltabelle (API) | opportunity aus BC_Test-seitig, kein API-Pfad |
| Zieltabelle | acdopportunities |
| Zeitplan | 0 */2 * * * * |
| Filter | JSON-Filter: IsNull(wysa_bcsystemid) UND OptionSetValue(wysa_sync2bc=799840000) |
| Watermark | — |
| Response-Job | opportunitiesresponsefrombc |
| Fachliche Doku | Neue Verkaufschance nach BC |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
_URL | dynamicsSalesLink | LinkToRecord | Deep-Link (baseUrl konfiguriert) |
description | extendedDescription | — | — |
estimatedclosedate | expectedCloseDate | — | — |
estimatedvalue | expectedRevenue | — | — |
name | description | — | — |
opportunityid | dataverseId | — · Schlüssel | — |
_parentaccountid.wysa_bccontactnumber | contactCompanyNumber | LookupValue | liest wysa_bccontactnumber aus account über parentaccountid |
_parentcontactid.wysa_bccontactnumber | contactNumber | LookupValue | liest wysa_bccontactnumber aus contact über parentcontactid |
_wysa_bcsalespersonid.wysa_code | salespersonCode | LookupValue | liest wysa_code aus wysa_bcsalesperson über wysa_bcsalespersonid |
Alternate Key
{
"keyType": "Filter",
"keyValues": [
{
"attributeName": "id",
"keyName": "dataverseId",
"rank": 1
}
],
"keyAttributeFromExisting": "Id",
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Deep Link (_URL → dynamicsSalesLink) — die Operation LinkToRecord setzt aus
einer Basisadresse und der GUID des Datensatzes eine aufrufbare URL zusammen. Sie kommt
in der gesamten Integration nur hier vor.
{
"Operations": [{
"Name": "LinkToRecord",
"Parameters": {
"BaseUrl": "https://dsyr-salescentral.crm4.dynamics.com/main.aspx?appid=1fb84e94-89dd-ef11-8ee9-7c1e527610c5&pagetype=entityrecord"
}
}]
}
Umgebungsadresse und App-ID sind fest hinterlegt.
Firma und Kontakt — beide werden über die BC Kontaktnummer des jeweiligen
Datensatzes aufgelöst. Business Central kennt Firmen und Personen in derselben
Kontakttabelle, deshalb ist das Nachschlagefeld in beiden Fällen dasselbe:
| Quellfeld | Nachschlagetabelle | Nachschlagefeld | Zielfeld |
|---|
parentaccountid | account | wysa_bccontactnumber | contactCompanyNumber |
parentcontactid | contact | wysa_bccontactnumber | contactNumber |
wysa_bcsalespersonid | wysa_bcsalesperson | wysa_code | salespersonCode |
Alle drei mit LookupType: Attribute und UseCache: true. Beispiel Kontakt:
{
"Operations": [{
"Name": "LookupValue",
"Parameters": {
"LookupType": "Attribute",
"SourceField": "parentcontactid",
"LookupTable": "contact",
"LookupField": "wysa_bccontactnumber",
"UseCache": true
}
}]
}
Ist eines der beiden Nachschlagefelder leer, kann die Zuordnung nicht gebildet werden —
genau das verhindert die Freigaberegel.
Beobachtungen
keyAttributeFromExisting steht hier auf Id mit großem I, in den Mappings von
Firma und Kontakt auf id. Ob das eine Rolle spielt, hängt davon ab, wie die
DataBridge den Wert auswertet.
8.13 - 261 · opportunitiesresponsefrombc
Technisches Mapping des Jobs opportunitiesresponsefrombc (BCOpportunitiesResponse).
| Eigenschaft | Wert |
|---|
| Order | 261 |
| Job | opportunitiesresponsefrombc |
| Mapping | BCOpportunitiesResponse |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | acdopportunities aus singhammerITConsulting/dyce/v2.0 |
| Zieltabelle | opportunity |
| Zeitplan | —, wird von opportunitiesnewfromce über ResponseJob ausgelöst |
| Filter | {{lastModifiedDateTime gt %watermark%}} |
| Watermark | lastModifiedDateTime (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Rückmeldung aus BC (Verkaufschance) |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
id | wysa_bcsystemid | — | — |
number | wysa_bcopportunitynumber | — | — |
_opportunityid | opportunityid | ReadFromMessage · Schlüssel | aus Antwortnachricht |
Alternate Key
{
"keyType": "PrimaryKey",
"keyName": "_opportunityid",
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Vergleich mit anderen Jobs
Dasselbe Muster (Anlage-Job löst Response-Job über ResponseJob aus, PrimaryKey
über eine per ReadFromMessage zurückgelesene GUID) findet sich bei mehreren
Objekten:
| Auslösender Job | Order | Response-Job | Order | Felder |
|---|
accountsnewfromce | 220 | accountsresponsefrombc | 221 | 3 |
contactsnewfromce | 240 | contactsresponsefrombc | 241 | 9 |
opportunitiesnewfromce | 260 | opportunitiesresponsefrombc | 261 | 3 |
opportunityproductsnewfromce | 710 | opportunityproductsresponsefrombc | 760 | 2 |
Beobachtungen
IsActive = false ist bei diesem Job kein Hinweis auf einen abgeschalteten Job —
Response-Jobs laufen nicht nach eigenem Zeitplan, sondern werden vom auslösenden Job
gestartet und verarbeiten dessen Antwortnachricht.- Der
PrimaryKey funktioniert nur, weil CEOpportunities die CE-GUID im BC-Feld
dataverseId mitgeschickt hat. BC gibt sie in der Antwort zurück; die Operation
ReadFromMessage liest sie von dort als opportunityid aus.
8.14 - 410 · accountsfrombc
Technisches Mapping des Jobs accountsfrombc (BCAccounts).
| Eigenschaft | Wert |
|---|
| Order | 410 |
| Job | accountsfrombc |
| Mapping | BCAccounts |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | acdcontactscomp aus singhammerITConsulting/dyce/v2.0 |
| Zieltabelle | account |
| Zeitplan | 0 */2 * * * * |
| Filter | {{lastModifiedDateTime gt %watermark%}} |
| Watermark | lastModifiedDateTime (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Firma aus BC übernehmen |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
address2 | address1_line2 | — | — |
address | address1_line1 | — | — |
city | address1_city | — | — |
companyNumber | parentaccountid | Lookup | → account über wysa_bccodekey (companyNumber → wysa_bccontactnumber); NULL wenn = Feld number |
countryRegionCode | wysa_address1_countryid | Lookup | → wysa_country über wysa_bccodekey (countryRegionCode → wysa_bccode) |
customerDiscountGroup | wysa_bccustomerdiscountgroupid | Lookup | → wysa_bccustomerdiscountgroup über wysa_bccodekey (customerDiscountGroup → wysa_bccode) |
customerNumber | wysa_bccustomernumber | — | — |
| — | wysa_sync2bc | DefaultValue | = 799840000 |
displayName | wysa_bcname1 | — | — |
eMail | emailaddress1 | — | — |
homePage | websiteurl | — | — |
id | wysa_bcsystemid | — | — |
name2 | wysa_bcname2 | — | — |
number | wysa_bccontactnumber | — · Schlüssel | — |
phoneNumber | telephone1 | — | — |
postCode | address1_postalcode | — | — |
salespersonCode | wysa_bcsalespersonid | Lookup | → wysa_bcsalesperson über wysa_bccodekey (salespersonCode → wysa_code) |
vendorNumber | wysa_bcvendornumber | — | — |
Alternate Key
{
"keyType": "CustomKey",
"keyName": "wysa_bccodekey",
"keyValues": [
{
"attributeName": "number",
"keyName": "wysa_bccontactnumber",
"rank": 1
}
],
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Voraussetzungen der Lookups — Land (countryRegionCode), Debitorrabattgruppe
(customerDiscountGroup) und Verkäufer (salespersonCode) setzen voraus, dass die
jeweilige Stammdatentabelle bereits gefüllt ist:
| Lookup | Zieltabelle | Voraussetzung |
|---|
| Land | wysa_country | Job countriesfrombc (110) |
| Debitorrabattgruppe | wysa_bccustomerdiscountgroup | Job customerdiscountgroupsfrombc (125) |
| Verkäufer | wysa_bcsalesperson | Job salespersonsfrombc (130) |
Übergeordnete Firma (companyNumber → parentaccountid) — Lookup auf account
selbst, mit SetNullIfEqualsValueOfField. Der Parameter setzt die Referenz auf leer,
wenn companyNumber und number identisch sind — genau der Fall, in dem sich ein
BC-Firmenkontakt selbst als Unternehmen einträgt.
{
"Operations": [{
"Name": "Lookup",
"Parameters": {
"SetNullIfEqualsValueOfField": "number",
"TargetTable": "account",
"TargetKey": {
"KeyType": "CustomKey",
"KeyName": "wysa_bccodekey",
"KeyValues": [
{ "keyName": "wysa_bccontactnumber", "attributeName": "companyNumber", "rank": 1 }
]
}
}
}]
}
Freigabe (wysa_sync2bc) — ohne Quellfeld, fester Wert 799840000 („Ja"):
{
"Operations": [{
"Name": "DefaultValue",
"Parameters": { "DefaultValue": "799840000" }
}]
}
8.15 - 420 · accountsfrombcdelete
Technisches Mapping des Jobs accountsfrombcdelete (BCAccountsDelete).
| Eigenschaft | Wert |
|---|
| Order | 420 |
| Job | accountsfrombcdelete |
| Mapping | BCAccountsDelete |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | acdlogentries aus singhammerITConsulting/dyce/v2.0 |
| Zieltabelle | account |
| Zeitplan | 0 */2 * * * * |
| Filter | {{lastModifiedDateTime gt %watermark%}} and tableId eq 5050 |
| Watermark | lastModifiedDateTime (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Löschung aus BC (Firma) |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
Default | statecode | DefaultValue | = 1 |
Default | statuscode | DefaultValue | = 799840001 |
recordId | wysa_bcsystemid | — · Schlüssel | — |
Alternate Key
{
"keyType": "CustomKey",
"keyName": "wysa_bcsystemidkey",
"keyValues": [
{
"attributeName": "recordId",
"keyName": "wysa_bcsystemid",
"rank": 1
}
],
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
statecode = 1 ist der Dataverse-Standardwert für Inaktiv:
{
"Operations": [{
"Name": "DefaultValue",
"Parameters": { "DefaultValue": "1" }
}]
}
Der Statusgrund statuscode = 799840001 stammt aus dem lösungseigenen Nummernbereich
ab 799840000.
Vergleich mit anderen Jobs
Das Action-Feld dieses Jobs ist leer, deshalb wird deaktiviert statt gelöscht. Die
Der Positions-Job salescalculationelementsfrombcdelete trägt dagegen Action = Delete
und löscht tatsächlich. salesquotesfrombcdelete hat wie dieser Job kein Action-Feld
und schließt das Angebot als Storniert.
8.16 - 430 · contactsfrombc
Technisches Mapping des Jobs contactsfrombc (BCContacts).
| Eigenschaft | Wert |
|---|
| Order | 430 |
| Job | contactsfrombc |
| Mapping | BCContacts |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | acdcontacts aus singhammerITConsulting/dyce/v2.0 |
| Zieltabelle | contact |
| Zeitplan | 0 */2 * * * * |
| Filter | {{lastModifiedDateTime gt %watermark%}} |
| Watermark | lastModifiedDateTime (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Kontakt aus BC übernehmen |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
address2 | address1_line2 | — | — |
address | address1_line1 | — | — |
city | address1_city | — | — |
companyNumber | parentcustomerid | Lookup | → account über wysa_bccodekey (companyNumber → wysa_bccontactnumber) |
countryRegionCode | wysa_address1_countryid | Lookup | → wysa_country über wysa_bccodekey (countryRegionCode → wysa_bccode) |
| — | wysa_sync2bc | DefaultValue | = 799840000 |
eMail | emailaddress1 | — | — |
firstName | firstname | — | — |
id | wysa_bcsystemid | — | — |
languageCode | wysa_language | Lookup | → wysa_language über wysa_bccodekey (languageCode → wysa_bccode) |
middleName | middlename | — | — |
mobilePhoneNumber | mobilephone | — | — |
number | wysa_bccontactnumber | — · Schlüssel | — |
organizationalLevelCode | wysa_bcpositionid | Lookup | → wysa_bcposition über wysa_bccodekey (organizationalLevelCode → wysa_code) |
phoneNumber | telephone1 | — | — |
postCode | address1_postalcode | — | — |
salutationCode | wysa_salutationbcid | Lookup | → wysa_bcsalutation über wysa_bccodekey (salutationCode → wysa_code) |
surname | lastname | — | — |
Alternate Key
{
"keyType": "CustomKey",
"keyName": "wysa_bccodekey",
"keyValues": [
{
"attributeName": "number",
"keyName": "wysa_bccontactnumber",
"rank": 1
}
],
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Identisch zum Vorgehen bei der Firma.
Weitere technische Details
Alle fünf Lookups folgen demselben Aufbau — sie unterscheiden sich nur in Zieltabelle
und Schlüsselfeld:
| Quellfeld | Zieltabelle | Schlüsselfeld | Alternate Key |
|---|
countryRegionCode | wysa_country | wysa_bccode | wysa_bccodekey |
languageCode | wysa_language | wysa_bccode | wysa_bccodekey |
salutationCode | wysa_bcsalutation | wysa_code | wysa_bccodekey |
organizationalLevelCode | wysa_bcposition | wysa_code | wysa_bccodekey |
companyNumber | account | wysa_bccontactnumber | wysa_bccodekey |
Beispiel Anrede:
{
"Operations": [{
"Name": "Lookup",
"Parameters": {
"TargetTable": "wysa_bcsalutation",
"TargetKey": {
"KeyType": "CustomKey",
"KeyName": "wysa_bccodekey",
"KeyValues": [
{ "keyName": "wysa_code", "attributeName": "salutationCode", "rank": 1 }
]
}
}
}]
}
Beobachtungen
Übergeordnete Firma (companyNumber → parentcustomerid) — der Lookup zeigt auf
account und löst über die BC Kontaktnummer der Firma auf. Anders als beim
gleichnamigen Lookup der Firma gibt es hier kein SetNullIfEqualsValueOfField —
ein Personenkontakt trägt sich nicht selbst als Unternehmen ein, der Sonderfall kann
also nicht auftreten.
Freigabe (wysa_sync2bc) — fester Wert 799840000 („Ja") per DefaultValue.
8.17 - 440 · contactsfrombcdelete
Technisches Mapping des Jobs contactsfrombcdelete (BCContactsDelete).
| Eigenschaft | Wert |
|---|
| Order | 440 |
| Job | contactsfrombcdelete |
| Mapping | BCContactsDelete |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | acdlogentries aus singhammerITConsulting/dyce/v2.0 |
| Zieltabelle | contact |
| Zeitplan | 0 */2 * * * * |
| Filter | {{lastModifiedDateTime gt %watermark%}} and tableId eq 5050 |
| Watermark | lastModifiedDateTime (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Löschung aus BC (Kontakt) |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
Default | statecode | DefaultValue | = 1 |
Default | statuscode | DefaultValue | = 799840001 |
recordId | wysa_bcsystemid | — · Schlüssel | — |
Alternate Key
{
"keyType": "CustomKey",
"keyName": "wysa_bcsystemidkey",
"keyValues": [
{
"attributeName": "recordId",
"keyName": "wysa_bcsystemid",
"rank": 1
}
],
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Vergleich mit anderen Jobs
Die Quelle ist die API Page acdlogentries, gefiltert auf tableId 5050 — die
BC-Tabelle Kontakt, in der Firmen- und Personenkontakte gemeinsam liegen. Derselbe
Filter (tableId 5050) steht auch im Firmen-Job accountsfrombcdelete
(Order 420); beide Jobs lesen dieselben Protokolleinträge und sortieren sie über die
Zieltabelle bzw. den Schlüssel selbst auseinander.
Das Mapping BCContactsDelete folgt derselben Struktur wie
BCAccountsDelete — dieselben drei Feldzuordnungen,
dieselben Werte für statecode/statuscode —, adressiert aber die Zieltabelle
contact statt account.
Beobachtungen
Action ist leer konfiguriert, deshalb wird deaktiviert, nicht gelöscht.
statecode = 1 ist der Dataverse-Standardwert für Inaktiv. Der Statusgrund
799840001 stammt aus dem lösungseigenen Nummernbereich ab 799840000 — siehe
Wertelisten.
8.18 - 450 · productsfrombcdelete
Technisches Mapping des Jobs productsfrombcdelete (BCProductsDelete).
| Eigenschaft | Wert |
|---|
| Order | 450 |
| Job | productsfrombcdelete |
| Mapping | BCProductsDelete |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | acdlogentries aus singhammerITConsulting/dyce/v2.0 |
| Zieltabelle | product |
| Zeitplan | 0 */2 * * * * |
| Filter | {{lastModifiedDateTime gt %watermark%}} and tableId eq 72077781 |
| Watermark | lastModifiedDateTime (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Produkte deaktivieren |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
Default | statecode | DefaultValue | = 1 |
Default | statuscode | DefaultValue | = 2 |
recordId | wysa_bcsystemid | — · Schlüssel | — |
Alternate Key
{
"keyType": "CustomKey",
"keyName": "wysa_bcsystemidkey",
"keyValues": [
{
"attributeName": "recordId",
"keyName": "wysa_bcsystemid",
"rank": 1
}
],
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Die beiden DefaultValue-Operationen setzen den Datensatz auf inaktiv:
{
"Operations": [{
"Name": "DefaultValue",
"Parameters": { "DefaultValue": "1" }
}]
}
Anders als die Löschjobs von Firma, Kontakt und Angebot hat dieser Job keinen
Zusatzfilter auf operation eq 'DELETE'. Er verarbeitet damit jeden Protokolleintrag zu
dieser Tabelle — auch eine bloße Änderung — als Deaktivierung.
Vergleich mit anderen Jobs
| Job | statecode | statuscode |
|---|
accountsfrombcdelete (420) | 1 | 799840001 — lösungseigen |
contactsfrombcdelete (440) | 1 | 799840001 — lösungseigen |
productsfrombcdelete (450) | 1 | 2 — Dataverse-Standard |
8.19 - 520 · accountupdatesfromce
Technisches Mapping des Jobs accountupdatesfromce (CEAccountUpdates).
| Eigenschaft | Wert |
|---|
| Order | 520 |
| Job | accountupdatesfromce |
| Mapping | CEAccountUpdates |
| Richtung | CE → BC |
| Quellverbindung | CRM_Test |
| Zielverbindung | BC_Test |
| Quelltabelle (API) | account aus BC_Test-seitig, kein API-Pfad |
| Zieltabelle | acdcontactscomp |
| Zeitplan | 0 */2 * * * * |
| Filter | JSON-Filter: NotNull(wysa_bcsystemid) UND OptionSetValue(wysa_sync2bc=799840000) |
| Watermark | — |
| Response-Job | — |
| Fachliche Doku | Änderungen nach BC (Firma) |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
accountid | dataverseId | — | — |
address1_city | city | — | — |
address1_line1 | address | — | — |
address1_line2 | address2 | — | — |
address1_postalcode | postCode | — | — |
emailaddress1 | eMail | — | — |
telephone1 | phoneNumber | — | — |
websiteurl | homePage | — | — |
_wysa_address1_countryid | countryRegionCode | LookupValue | liest wysa_bccode aus wysa_country über wysa_address1_countryid |
wysa_bcname1 | displayName | — | — |
wysa_bcname2 | name2 | — | — |
_wysa_bcsalespersonid | salespersonCode | LookupValue | liest wysa_code aus wysa_bcsalesperson über wysa_bcsalespersonid |
wysa_bcsystemid | id | — · Schlüssel | — |
Alternate Key
{
"keyType": "Id",
"keyName": "wysa_bcsystemid",
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Filter im Detail
{
"Operations": [
{ "Name": "NotNull", "Parameters": { "SourceField": "wysa_bcsystemid" } },
{ "Name": "OptionSetValue",
"Parameters": { "SourceField": "wysa_sync2bc", "Value": 799840000 } }
]
}
Beide Lookups (countryRegionCode, salespersonCode) laufen mit
LookupType: Attribute und UseCache: true.
Vergleich mit anderen Jobs
| CEAccounts (220) | CEAccountUpdates (520) |
|---|
| Schlüssel | KeyType: Filter über dataverseId | KeyType: Id über wysa_bcsystemid |
contactType | ✓ DefaultValue = Company | – |
salutationCode | ✓ DefaultValue = MANDANT | – |
| Response-Job | ✓ accountsresponsefrombc | – |
| Feldzuordnungen | 14 | 13 |
8.20 - 530 · contactupdatesfromce
Technisches Mapping des Jobs contactupdatesfromce (CEContactsUpdates).
| Eigenschaft | Wert |
|---|
| Order | 530 |
| Job | contactupdatesfromce |
| Mapping | CEContactsUpdates |
| Richtung | CE → BC |
| Quellverbindung | CRM_Test |
| Zielverbindung | BC_Test |
| Quelltabelle (API) | contact aus BC_Test-seitig, kein API-Pfad |
| Zieltabelle | acdcontacts |
| Zeitplan | 0 */2 * * * * |
| Filter | JSON-Filter: NotNull(wysa_bcsystemid) UND OptionSetValue(wysa_sync2bc=799840000) |
| Watermark | — |
| Response-Job | — |
| Fachliche Doku | Änderungen nach BC (Kontakt) |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
address1_city | city | — | — |
address1_line1 | address | — | — |
address1_line2 | address2 | — | — |
address1_postalcode | postCode | — | — |
contactid | dataverseId | — | — |
emailaddress1 | eMail | — | — |
firstname | firstName | — | — |
lastname | surname | — | — |
middlename | middleName | — | — |
mobilephone | mobilePhoneNumber | — | — |
_parentcustomerid | companyNumber | LookupValue | liest wysa_bccontactnumber aus account über parentcustomerid |
telephone1 | phoneNumber | — | — |
_wysa_address1_countryid | countryRegionCode | LookupValue | liest wysa_bccode aus wysa_country über wysa_address1_countryid |
_wysa_bcsalespersonid.wysa_code | salespersonCode | LookupValue | liest wysa_code aus wysa_bcsalesperson über wysa_bcsalespersonid |
wysa_bcsystemid | id | — · Schlüssel | — |
_wysa_language.wysa_bccode | languageCode | LookupValue | liest wysa_bccode aus wysa_language über wysa_language |
_wysa_salutationbcid.wysa_code | salutationCode | LookupValue | liest wysa_code aus wysa_bcsalutation über wysa_salutationbcid |
Alternate Key
{
"keyType": "Id",
"keyName": "wysa_bcsystemid",
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Das Feld wysa_bcsystemid wird auf id gemappt und dient gleichzeitig als Schlüssel.
Der Umweg über dataverseId entfällt.
Weitere technische Details
Vergleich mit anderen Jobs
Die fünf LookupValue-Operationen sind identisch zu denen in
contactsnewfromce.
Unterschied zu contactsnewfromce (240):
| contactsnewfromce (240) | contactupdatesfromce (530) |
|---|
| Schlüssel | KeyType: Filter über dataverseId | KeyType: Id über wysa_bcsystemid |
contactType | ✓ DefaultValue = Person | – |
| Response-Job | ✓ contactsresponsefrombc | – |
| Feldzuordnungen | 17 | 17 |
8.21 - 550 · serviceobjectsfrombc
Technisches Mapping des Jobs serviceobjectsfrombc (BCServiceObjects).
| Eigenschaft | Wert |
|---|
| Order | 550 |
| Job | serviceobjectsfrombc |
| Mapping | BCServiceObjects |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | serviceObjects aus microsoft/subsBilling/v1.0 |
| Zieltabelle | wysa_bcserviceobject |
| Zeitplan | 0 */2 * * * * |
| Filter | {{lastModifiedDateTime gt %watermark%}} |
| Watermark | lastModifiedDateTime (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Abonnements aus BC |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
billToContactNo | wysa_billtocontactid | Lookup | → contact über wysa_bccodekey (billToContactNo → wysa_bccontactnumber) |
billToCompanyContactNo | wysa_billtocustomerid | Lookup | → account über wysa_bccodekey (billToCompanyContactNo → wysa_bccontactnumber) |
customerReference | wysa_customerreference | — | — |
description | wysa_productdescription | — | — |
shipToContactNo | wysa_endusercontactid | Lookup | → contact über wysa_bccodekey (shipToContactNo → wysa_bccontactnumber) |
shipToCompanyContactNo | wysa_endusercustomerid | Lookup | → account über wysa_bccodekey (shipToCompanyContactNo → wysa_bccontactnumber) |
sourceNo | wysa_productnumber | — | — |
no | wysa_name | — | — |
no | wysa_number | — · Schlüssel | — |
provisionEndDate | wysa_provisionenddate | — | — |
provisionStartDate | wysa_provisionstartdate | — | — |
quantityDecimal | wysa_quantity | — | — |
serialNo | wysa_serialnumber | — | — |
systemId | wysa_bcsystemid | — | — |
unitOfMeasure | wysa_uom | — | — |
version | wysa_version | — | — |
null | wysa_subscriptiontype | DefaultValue | = 799840000 |
Alternate Key
{
"keyType": "CustomKey",
"keyName": "wysa_numberkey",
"keyValues": [
{
"attributeName": "no",
"keyName": "wysa_number",
"rank": 1
}
],
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Vier Lookups, alle über das Feld wysa_bccontactnumber und den Alternate Key
wysa_bccodekey:
| Quellfeld | Zieltabelle | Zielfeld |
|---|
billToContactNo | contact | wysa_billtocontactid |
billToCompanyContactNo | account | wysa_billtocustomerid |
shipToContactNo | contact | wysa_endusercontactid |
shipToCompanyContactNo | account | wysa_endusercustomerid |
Beispiel Rechnungsempfänger Firma:
{
"Operations": [{
"Name": "Lookup",
"Parameters": {
"TargetTable": "account",
"TargetKey": {
"KeyType": "CustomKey",
"KeyName": "wysa_bccodekey",
"KeyValues": [
{ "keyName": "wysa_bccontactnumber", "attributeName": "billToCompanyContactNo", "rank": 1 }
]
}
}
}]
}
Abonnementart — ohne Quellfeld, fester Wert:
{
"Operations": [{
"Name": "DefaultValue",
"Parameters": { "DefaultValue": "799840000" }
}]
}
Der Wert 799840000 stammt aus dem lösungseigenen Nummernbereich — siehe
Wertelisten.
Beobachtungen
Die Quelle liegt nicht unter singhammerITConsulting/dyce/v2.0/ wie alle übrigen
Abgleiche, sondern ist die Schnittstelle der Abonnementverwaltung von Business Central
selbst.
Adressiert wird über die fachliche Abonnementnummer, nicht über die BC System-ID — anders
als bei den Wertelisten und anders als bei den
Abonnementzeilen (servicecommitmentsfrombc).
8.22 - 560 · servicecommitmentsfrombc
Technisches Mapping des Jobs servicecommitmentsfrombc (BCServiceCommitments).
| Eigenschaft | Wert |
|---|
| Order | 560 |
| Job | servicecommitmentsfrombc |
| Mapping | BCServiceCommitments |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | serviceCommitments aus microsoft/subsBilling/v1.0 |
| Zieltabelle | wysa_bcserviceobjectcommitment |
| Zeitplan | 0 */2 * * * * |
| Filter | {{lastModifiedDateTime gt %watermark%}} |
| Watermark | lastModifiedDateTime (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Abonnementzeilen aus BC |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
billingBasePeriod | wysa_billingbaseperiod | — | — |
billingRhythm | wysa_billingrhythm | — | — |
calculationBaseAmount | wysa_calculationbaseamount | — | — |
calculationBase | wysa_calculationbasepercent | — | — |
cancellationPossibleUntil | wysa_cancellationpossibleuntil | — | — |
contractLineNo | wysa_contractlinenumber | — | — |
contractNo | wysa_contractnumber | — | — |
description | wysa_description | — | — |
discountAmount | wysa_discountamount | — | — |
discountPctg | wysa_discountpercent | — | — |
discount | wysa_discount | OptionMapping | Werte: true→1, false→0 |
extensionTerm | wysa_extensionterm | — | — |
initialTerm | wysa_initialterm | — | — |
invoicingVia | wysa_invoicingvia | OptionMapping | Werte: Contract→799840000, Sales→799840001 |
lineNo | wysa_entrynumber | — | — |
nextBillingDate | wysa_nextbillingdate | — | — |
noticePeriod | wysa_noticeperiod | — | — |
packageCode | wysa_packagecode | — | — |
partner | wysa_partner | OptionMapping | Werte: Customer→799840000, Vendor→799840001 |
price | wysa_price | — | — |
quantityDecimal | wysa_quantity | — | — |
serviceAmount | wysa_serviceamount | — | — |
serviceEndDate | wysa_serviceenddate | — | — |
serviceObjectNo | wysa_serviceobjectid | Lookup | → wysa_bcserviceobject über wysa_numberkey (serviceObjectNo → wysa_number) |
serviceStartDate | wysa_servicestartdate | — | — |
systemId | wysa_bcsystemid | — · Schlüssel | — |
termUntil | wysa_termuntil | — | — |
Alternate Key
{
"keyType": "CustomKey",
"keyName": "wysa_bcsystemidkey",
"keyValues": [
{
"attributeName": "systemId",
"keyName": "wysa_bcsystemid",
"rank": 1
}
],
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Abonnement (serviceObjectNo → wysa_serviceobjectid) — Lookup auf die
Abonnementtabelle über die Abonnementnummer:
{
"Operations": [{
"Name": "Lookup",
"Parameters": {
"TargetTable": "wysa_bcserviceobject",
"TargetKey": {
"KeyType": "CustomKey",
"KeyName": "wysa_numberkey",
"KeyValues": [
{ "keyName": "wysa_number", "attributeName": "serviceObjectNo", "rank": 1 }
]
}
}
}]
}
OptionMapping — übersetzt BC-Textwerte in Dataverse-Auswahlwerte. Die Operation
kommt nur in diesem Mapping vor:
{
"Operations": [{
"Name": "OptionMapping",
"Parameters": {
"Mapping": [
{ "Key": "Contract", "Value": "799840000" },
{ "Key": "Sales", "Value": "799840001" }
]
}
}]
}
| Zielfeld | Zuordnung |
|---|
wysa_invoicingvia | Contract → 799840000, Sales → 799840001 |
wysa_partner | Customer → 799840000, Vendor → 799840001 |
wysa_discount | true → 1, false → 0 |
Bei wysa_discount sind die Zielwerte 1 und 0 — es ist ein Ja/Nein-Feld, keine
lösungseigene Werteliste.
Werte, die in der Zuordnungstabelle nicht vorkommen, sind nicht abgedeckt.
Beobachtungen
Wie beim Abonnement liegt die Quelle nicht unter singhammerITConsulting/dyce/v2.0/.
Anders als das Abonnement (serviceobjectsfrombc), das über
seine fachliche Nummer adressiert wird, wird diese Zeile über die BC System-ID
adressiert.
8.23 - 610 · salesquotesfrombc
Technisches Mapping des Jobs salesquotesfrombc (BCSalesQuotes).
| Eigenschaft | Wert |
|---|
| Order | 610 |
| Job | salesquotesfrombc |
| Mapping | BCSalesQuotes |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | acdsalesheaders aus singhammerITConsulting/dyce/v2.0 |
| Zieltabelle | quote |
| Zeitplan | 0 */2 * * * * |
| Filter | {{lastModifiedDateTime gt %watermark%}} and documentType eq 'Quote' |
| Watermark | lastModifiedDateTime (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Angebotskopf aus BC |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
amountIncludingVAT | wysa_bctotalamountvat | — | — |
id | wysa_bcsystemid | — | — |
number | quotenumber | — · Schlüssel | — |
opportunityNumber | opportunityid | Lookup | → opportunity über wysa_bcopportunitynumberkey (opportunityNumber → wysa_bcopportunitynumber) |
orderDate | effectivefrom | — | — |
postingDescription | name | — | — |
quoteValidUntilDate | effectiveto | — | — |
salespersonCode | wysa_bcsalespersonid | Lookup | → wysa_bcsalesperson über wysa_bccodekey (salespersonCode → wysa_code) |
sellToCompanyContactNumber | customerid | Lookup | → account über wysa_bccodekey (sellToCompanyContactNumber → wysa_bccontactnumber) |
status | wysa_bcstatus | — | — |
Alternate Key
{
"keyType": "CustomKey",
"keyName": "wysa_quotenumberkey",
"keyValues": [
{
"attributeName": "number",
"keyName": "quotenumber",
"rank": 1
}
],
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Drei Lookups, jeder über einen Alternate Key:
| Quellfeld | Zieltabelle | Schlüsselfeld | Alternate Key |
|---|
opportunityNumber | opportunity | wysa_bcopportunitynumber | wysa_bcopportunitynumberkey |
sellToCompanyContactNumber | account | wysa_bccontactnumber | wysa_bccodekey |
salespersonCode | wysa_bcsalesperson | wysa_code | wysa_bccodekey |
Verkaufschance:
{
"Operations": [{
"Name": "Lookup",
"Parameters": {
"TargetTable": "opportunity",
"TargetKey": {
"KeyType": "CustomKey",
"KeyName": "wysa_bcopportunitynumberkey",
"KeyValues": [
{ "keyName": "wysa_bcopportunitynumber", "attributeName": "opportunityNumber", "rank": 1 }
]
}
}
}]
}
Kunde — seit der Umstellung über die Kontaktnummer (wysa_bccontactnumber) statt über die Debitorennummer:
{
"Operations": [{
"Name": "Lookup",
"Parameters": {
"TargetTable": "account",
"TargetKey": {
"KeyType": "CustomKey",
"KeyName": "wysa_bccodekey",
"KeyValues": [
{ "keyName": "wysa_bccontactnumber", "attributeName": "sellToCompanyContactNumber", "rank": 1 }
]
}
}
}]
}
Beobachtungen
Die API Page liefert alle Verkaufsbelege; die Einschränkung auf Angebote erfolgt über
documentType eq 'Quote' im Filter.
Der Schlüssel ist das Standardfeld quotenumber — die Angebotsnummer —, aufgelöst über
den Alternate Key wysa_quotenumberkey. In allen anderen Bereichen wird über
wysa_bcsystemid oder wysa_bccontactnumber adressiert.
8.24 - 620 · salescalculationelementsfrombc
Technisches Mapping des Jobs salescalculationelementsfrombc (BCSalesCalculationElements).
| Eigenschaft | Wert |
|---|
| Order | 620 |
| Job | salescalculationelementsfrombc |
| Mapping | BCSalesCalculationElements |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | acdsalescalculationelements aus singhammerITConsulting/dyce/v2.0 |
| Zieltabelle | quotedetail |
| Zeitplan | 0 */2 * * * * |
| Filter | {{systemModifiedAt gt %watermark%}} and documentType eq 'Quote' |
| Watermark | systemModifiedAt (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Angebotspositionen aus BC |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
| — | uomid | DefaultValue | = 946e49c5-b59d-41c6-b47a-da4ecbfa95fc |
description | description | — | — |
documentNo | quoteid | Lookup | → quote über wysa_quotenumberkey (documentNo → quotenumber) |
lineAmountInclVATLCY | wysa_bcamountvat | — | — |
lineAmountLCY | wysa_bcamount | — | — |
opportunityElementCode | productid | Lookup | → product über wysa_bccode (opportunityElementCode → wysa_bccode) |
quantity | quantity | — | — |
systemId | wysa_bcsystemid | — · Schlüssel | — |
Alternate Key
{
"keyType": "CustomKey",
"keyName": "wysa_bcsystemidkey",
"keyValues": [
{
"attributeName": "systemId",
"keyName": "wysa_bcsystemid",
"rank": 1
}
],
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
| Quellfeld | Zieltabelle | Schlüsselfeld | Alternate Key |
|---|
documentNo | quote | quotenumber | wysa_quotenumberkey |
opportunityElementCode | product | wysa_bccode | wysa_bccode |
Angebot:
{
"Operations": [{
"Name": "Lookup",
"Parameters": {
"TargetTable": "quote",
"TargetKey": {
"KeyType": "CustomKey",
"KeyName": "wysa_quotenumberkey",
"KeyValues": [
{ "keyName": "quotenumber", "attributeName": "documentNo", "rank": 1 }
]
}
}
}]
}
Produkt — hier steht in KeyName der Feldname wysa_bccode statt eines
Alternate-Key-Namens; dasselbe Muster wie in
BCOpportunityElements.
Einheit:
{
"Operations": [{
"Name": "DefaultValue",
"Parameters": { "DefaultValue": "946e49c5-b59d-41c6-b47a-da4ecbfa95fc" }
}]
}
Dieselbe GUID wie defaultuomid in BCOpportunityElements.
Beobachtungen
Das Watermark-Feld heißt systemModifiedAt — wie beim Job 190, aber anders als in den
übrigen BC→CE-Jobs (lastModifiedDateTime).
8.25 - 621 · salescalculationelementsfrombcdelete
Technisches Mapping des Jobs salescalculationelementsfrombcdelete (BCSalesCalculationElementsDelete).
| Eigenschaft | Wert |
|---|
| Order | 621 |
| Job | salescalculationelementsfrombcdelete |
| Mapping | BCSalesCalculationElementsDelete |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | acdlogentries aus singhammerITConsulting/dyce/v2.0 |
| Zieltabelle | quotedetail |
| Zeitplan | 0 */2 * * * * |
| Filter | {{lastModifiedDateTime gt %watermark%}} and tableId eq 72077783 and operation eq 'DELETE' |
| Watermark | lastModifiedDateTime (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Löschung Angebotsposition aus BC |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
recordId | wysa_bcsystemid | — · Schlüssel | — |
Alternate Key
{
"keyType": "CustomKey",
"keyName": "wysa_bcsystemidkey",
"keyValues": [
{
"attributeName": "recordId",
"keyName": "wysa_bcsystemid",
"rank": 1
}
],
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Beobachtungen
Das Feld Action = Delete ist der Unterschied zu den Löschjobs von Firma und Kontakt:
Dort ist es leer, und das Mapping setzt stattdessen den Status auf inaktiv.
Eine einzige Zuordnung — mehr braucht ein Löschjob nicht. Der Schlüssel identifiziert den
Datensatz, Action = Delete erledigt den Rest. Keine Statusfelder, keine Vorgabewerte.
8.26 - 625 · activatesalesquotesfrombc
Technisches Mapping des Jobs activatesalesquotesfrombc (BCSalesQuotesActivate).
| Eigenschaft | Wert |
|---|
| Order | 625 |
| Job | activatesalesquotesfrombc |
| Mapping | BCSalesQuotesActivate |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | acdlogentries aus singhammerITConsulting/dyce/v2.0 |
| Zieltabelle | quote |
| Zeitplan | 0 */3 * * * * |
| Filter | {{lastModifiedDateTime gt %watermark%}} and tableId eq 36 and operation eq 'TRANSFERRED' |
| Watermark | lastModifiedDateTime (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Statuswechsel Angebot aus BC |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
Default | statecode | DefaultValue | = 2 |
operation | wysa_bcstatus | — | — |
recordId | wysa_bcsystemid | — · Schlüssel | — |
Alternate Key
{
"keyType": "CustomKey",
"keyName": "wysa_bcsystemidkey",
"keyValues": [
{
"attributeName": "recordId",
"keyName": "wysa_bcsystemid",
"rank": 1
}
],
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
{
"Operations": [{
"Name": "DefaultValue",
"Parameters": { "DefaultValue": "2" }
}]
}
statecode = 2 ist der Dataverse-Standardwert für ein Angebot im Status Gewonnen.
Das Feld operation wird unverändert in wysa_bcstatus geschrieben — durch den Filter
des Jobs kann dort nur der Wert TRANSFERRED ankommen. Auf dieses Feld reagiert die
Logik in Customer Engagement, die das Angebot und optional die Verkaufschance
abschließt.
Beobachtungen
Anders als salesquotesfrombc, das über die Angebotsnummer
adressiert, muss dieser Job über die BC System-ID gehen — das Änderungsprotokoll kennt
nur diese. Voraussetzung ist also, dass der Abgleich 610 die System-ID am Angebot
gefüllt hat.
8.27 - 690 · salesquotesfrombcdelete
Technisches Mapping des Jobs salesquotesfrombcdelete (BCSalesQuotesDelete).
| Eigenschaft | Wert |
|---|
| Order | 690 |
| Job | salesquotesfrombcdelete |
| Mapping | BCSalesQuotesDelete |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | acdlogentries aus singhammerITConsulting/dyce/v2.0 |
| Zieltabelle | quote |
| Zeitplan | 0 */2 * * * * |
| Filter | {{lastModifiedDateTime gt %watermark%}} and tableId eq 36 and operation eq 'DELETE' |
| Watermark | lastModifiedDateTime (Typ datetime) |
| Response-Job | — |
| Action | NewUpdate (kein Delete) |
| Fachliche Doku | Stornierung Angebot aus BC |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
recordId | wysa_bcsystemid | — · Schlüssel | — |
| — | statecode | DefaultValue | = 3 (Geschlossen) |
| — | statuscode | DefaultValue | = 6 (Storniert) |
Alternate Key
{
"keyType": "CustomKey",
"keyName": "wysa_bcsystemidkey",
"keyValues": [
{
"attributeName": "recordId",
"keyName": "wysa_bcsystemid",
"rank": 1
}
],
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Vergleich mit anderen Jobs
| Order | Job | Zieltabelle | Action | Wirkung |
|---|
| 420 | accountsfrombcdelete | account | — | deaktivieren |
| 440 | contactsfrombcdelete | contact | — | deaktivieren |
| 450 | productsfrombcdelete | product | — | deaktivieren |
| 621 | salescalculationelementsfrombcdelete | quotedetail | Delete | löschen |
| 690 | salesquotesfrombcdelete | quote | — | schließen (Storniert) |
Nur noch die Angebotspositionen werden hart gelöscht. Das Angebot selbst wird seit der
Überarbeitung der Mappings nicht mehr gelöscht, sondern über zwei Festwerte auf
Geschlossen / Storniert gesetzt.
Festwerte für den Status
statecode und statuscode haben kein Quellfeld (Default) und werden fest gesetzt —
3 = Geschlossen, 6 = Storniert (Standard-Statusgrund des Angebots in Dataverse):
{
"Operations": [{
"Name": "DefaultValue",
"Parameters": { "DefaultValue": "3" }
}]
}
{
"Operations": [{
"Name": "DefaultValue",
"Parameters": { "DefaultValue": "6" }
}]
}
Beobachtungen
Adressiert wird über die BC System-ID, nicht über die Angebotsnummer wie in
salesquotesfrombc — das Änderungsprotokoll kennt nur die
System-ID. Voraussetzung ist also, dass der Abgleich 610 sie am Angebot gefüllt hat.
8.28 - 710 · opportunityproductsnewfromce
Technisches Mapping des Jobs opportunityproductsnewfromce (CEOpportunityProducts).
| Eigenschaft | Wert |
|---|
| Order | 710 |
| Job | opportunityproductsnewfromce |
| Mapping | CEOpportunityProducts |
| Richtung | CE → BC |
| Quellverbindung | CRM_Test |
| Zielverbindung | BC_Test |
| Quelltabelle (API) | opportunityproduct aus BC_Test-seitig, kein API-Pfad |
| Zieltabelle | acdopportunitycalculationelements |
| Zeitplan | 0 */3 * * * * |
| Filter | JSON-Filter: IsNull(wysa_bcsystemid) UND OptionSetValue(wysa_synctobc=799840000) |
| Watermark | — |
| Response-Job | opportunityproductsresponsefrombc |
| Fachliche Doku | Neue Verkaufschancen-Position nach BC |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
description | description | — | — |
wysa_margin | profitLCY | — | — |
wysa_bcamount | amountLCY | — | — |
wysa_bcamountvat | amountIncludingVATLCY | — | — |
_opportunityid.wysa_bcopportunitynumber | opportunityNo | LookupValue | liest wysa_bcopportunitynumber aus opportunity über opportunityid (kein Cache) |
_productid.wysa_bccode | opportunityElementCode | LookupValue | liest wysa_bccode aus product über productid |
quantity | quantity | — | — |
wysa_bcsystemid | systemId | — · Schlüssel | — |
Alternate Key
{
"keyType": "Id",
"keyName": "wysa_bcsystemid",
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Beide Lookups mit LookupType: Attribute:
| Quellfeld | Nachschlagetabelle | Nachschlagefeld | Zielfeld |
|---|
opportunityid | opportunity | wysa_bcopportunitynumber | opportunityNo |
productid | product | wysa_bccode | opportunityElementCode |
{
"Operations": [{
"Name": "LookupValue",
"Parameters": {
"LookupType": "Attribute",
"SourceField": "opportunityid",
"LookupTable": "opportunity",
"LookupField": "wysa_bcopportunitynumber",
"UseCache": false
}
}, {
"Name": "LookupValue",
"Parameters": {
"LookupType": "Attribute",
"SourceField": "productid",
"LookupTable": "product",
"LookupField": "wysa_bccode",
"UseCache": true
}
}]
}
Die beiden Lookups unterscheiden sich im Cache-Verhalten: Die Verkaufschancennummer wird
ohne Cache aufgelöst (UseCache: false), der Produktcode mit Cache
(UseCache: true). Genau diese beiden Auflösungen begründen die Reihenfolgeabhängigkeit: opportunity
liefert die Nummer erst nach opportunitiesresponsefrombc (261), product den Code
erst nach dem Abgleich in opportunityelementsfrombc (190). Beide Vorgänger laufen im
Zwei-Minuten-Takt, dieser Job im Drei-Minuten-Takt.
Beobachtungen
- Das Feld
wysa_bcsystemid wird auf systemId gemappt und dient als Schlüssel —
obwohl der Filter des Jobs voraussetzt, dass es leer ist. Es gibt keinen
dataverseId-Umweg wie bei Firma, Kontakt und Verkaufschance. - Dieser Job schreibt den Schlüssel in das BC-Feld
systemId, der Job
opportunityproductsupdatesfromce in das Feld id — dieselbe API Page, zwei
verschiedene Feldnamen. - Der Filter verwendet
wysa_synctobc ohne „2", abweichend vom Feldnamen
wysa_sync2bc an der Verkaufschance.
8.29 - 750 · opportunityproductsupdatesfromce
Technisches Mapping des Jobs opportunityproductsupdatesfromce (CEOpportunityProductsUpdates).
| Eigenschaft | Wert |
|---|
| Order | 750 |
| Job | opportunityproductsupdatesfromce |
| Mapping | CEOpportunityProductsUpdates |
| Richtung | CE → BC |
| Quellverbindung | CRM_Test |
| Zielverbindung | BC_Test |
| Quelltabelle (API) | opportunityproduct aus BC_Test-seitig, kein API-Pfad |
| Zieltabelle | acdopportunitycalculationelements |
| Zeitplan | 0 */3 * * * * |
| Filter | JSON-Filter: NotNull(wysa_bcsystemid) UND OptionSetValue(wysa_synctobc=799840000) |
| Watermark | — |
| Response-Job | — |
| Fachliche Doku | Änderungen nach BC (Verkaufschancen-Position) |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
description | description | — | — |
wysa_margin | profitLCY | — | — |
wysa_bcamount | amountLCY | — | — |
wysa_bcamountvat | amountIncludingVATLCY | — | — |
_opportunityid | opportunityNo | LookupValue | liest wysa_bcopportunitynumber aus opportunity über opportunityid (kein Cache) |
_productid | opportunityElementCode | LookupValue | liest wysa_bccode aus product über productid |
quantity | quantity | — | — |
wysa_bcsystemid | id | — · Schlüssel | — |
Alternate Key
{
"keyType": "Id",
"keyName": "wysa_bcsystemid",
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Vergleich mit anderen Jobs
| opportunityproductsnewfromce (710) | opportunityproductsupdatesfromce (750) |
|---|
| Schlüssel-Zielfeld | systemId | id |
| Response-Job | ✓ opportunityproductsresponsefrombc | – |
| Feldzuordnungen | 8 | 8 |
Beide Lookups sind identisch zu denen in opportunityproductsnewfromce:
| Quellfeld | Nachschlagetabelle | Nachschlagefeld |
|---|
opportunityid | opportunity | wysa_bcopportunitynumber |
productid | product | wysa_bccode |
Beide mit LookupType: Attribute; die Verkaufschancennummer ohne Cache
(UseCache: false), der Produktcode mit Cache (UseCache: true) — wie in
opportunityproductsnewfromce.
Beobachtungen
- Das Feld
wysa_bcsystemid wird auf id gemappt. Der Anlage-Job
opportunityproductsnewfromce schreibt denselben Schlüssel in das Feld
systemId derselben API Page — zwei verschiedene Zielfeldnamen für denselben
Zweck.
8.30 - 760 · opportunityproductsresponsefrombc
Technisches Mapping des Jobs opportunityproductsresponsefrombc (BCOpportunityProductsResponse).
| Eigenschaft | Wert |
|---|
| Order | 760 |
| Job | opportunityproductsresponsefrombc |
| Mapping | BCOpportunityProductsResponse |
| Richtung | BC → CE |
| Quellverbindung | BC_Test |
| Zielverbindung | CRM_Test |
| Quelltabelle (API) | acdopportunitycalculationelements aus singhammerITConsulting/dyce/v2.0 |
| Zieltabelle | opportunityproduct |
| Zeitplan | —, wird von opportunityproductsnewfromce über ResponseJob ausgelöst |
| Filter | {{lastModifiedDateTime gt %watermark%}} |
| Watermark | lastModifiedDateTime (Typ datetime) |
| Response-Job | — |
| Fachliche Doku | Rückmeldung aus BC (Verkaufschancen-Position) |
Feldzuordnung
| Quellfeld | Zielfeld | Operation | Details |
|---|
systemId | wysa_bcsystemid | — | — |
_opportunityproductid | opportunityproductid | ReadFromMessage · Schlüssel | aus Antwortnachricht |
Alternate Key
{
"keyType": "PrimaryKey",
"keyName": "_opportunityproductid",
"ignoreEmptySourceKey": false,
"keyRank": 0
}
Weitere technische Details
Beobachtungen
IsActive = false ist kein Hinweis auf einen abgeschalteten Job — Response-Jobs
laufen nicht nach eigenem Zeitplan, sondern werden vom auslösenden Job
(opportunityproductsnewfromce, 710) über dessen Feld ResponseJob gestartet.- Bei Firma, Kontakt und Verkaufschance funktioniert
PrimaryKey, weil das jeweilige
Anlage-Mapping die CE-GUID im Feld dataverseId mitgeschickt hat und BC sie
zurückgibt. Das Anlage-Mapping der Positionen (CEOpportunityProducts) enthält
kein dataverseId — woraus die DataBridge hier den Primärschlüssel bezieht, geht
aus der Konfiguration nicht hervor und sollte im System nachvollzogen werden.