Das ist eine für den Ausdruck optimierte Ansicht des gesamten Kapitels inkl. Unterseiten. Druckvorgang starten.

Zur Standardansicht zurückkehren.

Anleitungen

Dokumentation der Integration zwischen Business Central und Customer Engagement.

dsyr.SalesCentral verbindet den Vertrieb in Dynamics 365 Sales (Customer Engagement) mit den Stammdaten und Belegen in Dynamics 365 Business Central. Diese Dokumentation beschreibt, wie die Lösung aufgebaut ist, wie das Datenmodell erweitert wurde, welche Automatismen greifen und welche Daten in welche Richtung übertragen werden.

Architektur

Für alle: Welche Systeme beteiligt sind, wer welche Daten führt und an welchen Stellen die Lösung eingreift.

→ Architektur-Überblick

Datenmodell

Für Key-User und IT: Welche Tabellen neu hinzugekommen sind und wie der CRM-Standard erweitert wurde.

→ Zum Datenmodell

Business-Logik

Für Anwender und IT: Welche Regeln automatisch greifen — Freigabe nach Business Central, Anreden, Beträge, Abschluss von Angebot und Verkaufschance.

→ Zur Business-Logik

Mapping

Für IT: Welche Felder zwischen Business Central und Customer Engagement übertragen werden, je Übertragungsstrecke.

→ Zu den Mappings


Technische Grundlage

Die Übertragung selbst übernimmt die dsyr.DataBridge. Jobs, Mappings, Konnektoren und Betrieb sind dort dokumentiert:

→ databridge.docs.dsyr.de

1 - Architektur-Überblick

Welche Systeme beteiligt sind, wer welche Daten führt und wo dsyr.SalesCentral eingreift.

Die beteiligten Systeme

dsyr.SalesCentral ist keine eigenständige Anwendung, sondern eine Erweiterung innerhalb von Dynamics 365. Drei Bausteine arbeiten zusammen:

BausteinRolle
Customer Engagement (Dynamics 365 Sales)Führendes System für den Vertriebsprozess: Leads, Verkaufschancen, Ausschreibungen, Aktivitäten und Beziehungspflege.
Business CentralFührendes System für kaufmännische Stammdaten und Belege — insbesondere für Angebote und Abonnements — sowie für Debitoren, Kontakte, Artikel und Fakturierung.
dsyr.DataBridgeTransportschicht: überträgt Datensätze getaktet in beide Richtungen.
flowchart LR
    subgraph CE["Customer Engagement (Sales)"]
        F["Formularlogik"]
        S["Serverlogik"]
        F --> S
    end
    subgraph BC["Business Central"]
        B["Angebote, Abonnements,<br/>Debitoren, Kontakte, Artikel"]
    end
    S -- "freigegebene Datensätze" --> DB["dsyr.DataBridge"]
    DB -- "Stammdaten und Rückmeldungen" --> S
    DB <--> B

Wer führt welche Daten?

Die Arbeitsteilung ist bewusst eindeutig:

  • Aus Business Central nach CE kommen die kaufmännisch verbindlichen Daten: Angebote und Angebotspositionen, Abonnements und Abonnementzeilen sowie die Stammdaten — Länder, Sprachen, Anreden, Verkäufer, Rabattgruppen, Artikel. Dazu die Rückmeldungen zu übertragenen Firmen, Kontakten und Verkaufschancen. Diese Daten werden in CE nicht gepflegt; sie werden bei der nächsten Übertragung überschrieben.
  • Aus CE nach Business Central gehen die im Vertrieb neu entstandenen Firmen, Kontakte und Verkaufschancen — aber nur, wenn sie ausdrücklich dafür freigegeben wurden.

Für Angebote und Abonnements heißt das konkret: Sie werden in Business Central kalkuliert, versioniert und abgerechnet. In Customer Engagement stehen sie zur Ansicht bereit, damit der Vertrieb Volumen, Laufzeiten und Kündigungsfristen im Blick hat — geändert werden sie dort nicht.

Die Freigabe steuert das Feld Sync zu BC (wysa_sync2bc). Es ist der zentrale Schalter der Integration und in der Business-Logik ausführlich beschrieben.

Wo die Lösung eingreift

dsyr.SalesCentral wirkt auf vier Ebenen. Die Unterscheidung ist wichtig, um zu verstehen, warum manche Regeln auch dann greifen, wenn nicht über ein Formular gearbeitet wird.

  1. Formularlogik — läuft im Browser, während ein Datensatz bearbeitet wird. Sie blendet Felder ein und aus, sperrt Felder, die Business Central führt, und meldet Probleme früh und verständlich. Sie wirkt nur im Formular.
  2. Serverlogik — läuft in der Plattform, unabhängig vom Weg des Datensatzes. Sie greift ebenso bei Datenimporten, Massenänderungen, Power Automate und Schnittstellenaufrufen. Alle verbindlichen Regeln liegen hier. Sie laufen synchron: Verstößt ein Datensatz gegen eine Regel, wird das Speichern mit einer Meldung abgebrochen.
  3. Konfiguration — Umgebungsvariablen und Einstellungen steuern das Verhalten je Umgebung, ohne dass etwas angepasst werden muss. Siehe Konfiguration.
  4. Übertragung — die dsyr.DataBridge liest die freigegebenen Datensätze, überträgt sie und schreibt die Schlüssel aus Business Central zurück.

Formular- und Serverlogik prüfen an einigen Stellen dasselbe. Das ist beabsichtigt: Im Formular soll ein Fehler früh sichtbar werden, verbindlich entschieden wird er auf dem Server.

Einordnung der Lösung

MerkmalWert
Modellgesteuerte Appdsyr.SalesCentral
LösungWYSABCSales
Herausgeber / PräfixWYSA GmbH / wysa
SprachenDeutsch (Basis), Englisch

Alle Erweiterungen dieser Lösung — Tabellen, Felder, Wertelisten — tragen das Präfix wysa_. Wo der Standard endet und die Erweiterung beginnt, ist damit an jedem Feld erkennbar.

2 - Datenmodell

Wie der CRM-Standard erweitert wurde: neue Tabellen, zusätzliche Felder, Wertelisten.

Das Datenmodell von dsyr.SalesCentral folgt einem einfachen Grundsatz: Der Standard bleibt Standard. Firma, Kontakt, Lead, Verkaufschance und Angebot sind die bekannten Tabellen aus Dynamics 365 Sales. Ergänzt wurden sie um Felder, die für die Zusammenarbeit mit Business Central und für das Abonnement- und Ausschreibungsgeschäft nötig sind. Zusätzlich kommen eigene Tabellen hinzu, für die es im Standard keine Entsprechung gibt.

Wiederkehrende Muster

Wer die folgenden drei Muster kennt, findet sich in jeder Tabelle zurecht:

  • Präfix wysa_ — jedes Feld und jede Tabelle aus dieser Lösung trägt es. Alles ohne Präfix ist unveränderter Microsoft-Standard.
  • Schlüsselfelder zu Business Central — wysa_bcSystemId enthält die technische ID des Datensatzes in Business Central, die Felder wysa_bc…Number (etwa wysa_bcCustomerNumber, wysa_bcContactNumber, wysa_bcOpportunityNumber) die fachliche Nummer. Sind sie gefüllt, ist der Datensatz in Business Central angekommen. Genau daran hängt die Freigabelogik.
  • Währungsfelder — zu jedem Betragsfeld gehört technisch ein zweites Feld mit der Endung _Base. Es enthält denselben Betrag in der Basiswährung der Organisation und wird von der Plattform automatisch gefüllt.

Aufbau dieses Kapitels

SeiteInhalt
Stammdaten aus Business CentralTabellen, die Business Central spiegeln und in CE nicht gepflegt werden.
Firma, Kontakt und LeadErweiterungen an den zentralen Adressdaten.
Verkaufschance und AngebotErweiterungen im Vertriebsprozess, inklusive Ausschreibungen.
Abonnements und StakeholderEigene Tabellen für wiederkehrende Leistungen und externe Beteiligte.
Anrede, Titel und SpracheDie Tabellen hinter der automatischen Anredebildung.
WertelistenAlle Auswahlfelder mit ihren Werten.

2.1 - Stammdaten aus Business Central

Tabellen, die Business Central spiegeln und in Customer Engagement nicht gepflegt werden.

Die Datensätze dieser Tabellen entstehen in Business Central und werden von dort übertragen. Manuelle Änderungen in Customer Engagement gehen bei der nächsten Übertragung verloren.

Diese Tabellen sind Nachschlagewerte. Sie stehen als Auswahlfelder auf Firma, Kontakt, Lead, Verkaufschance, Angebot und Produkt zur Verfügung und sorgen dafür, dass beide Systeme dieselben Begriffe verwenden. Jede von ihnen führt das Feld wysa_bcSystemId mit der Herkunfts-ID aus Business Central.

Die Tabellen im Überblick

TabelleAnzeigenameZweckVerwendet auf
wysa_bcClientMandant (BC)Mandant bzw. Firma in Business Central; kennzeichnet, zu welchem Buchungskreis ein Datensatz gehörtFirma, Kontakt, Verkaufschance, Angebot
wysa_bcSalesPersonVerkäufer (BC)Verkäufercode aus Business Central, verknüpft mit dem CRM-Benutzer oder TeamFirma, Kontakt, Verkaufschance, Angebot
wysa_bcSalutationAnrede (BC)Anredeschlüssel aus Business Central, je Sprache und GeschlechtKontakt
wysa_bcPositionPosition (BC)Funktion bzw. Entscheidungsebene eines AnsprechpartnersKontakt, Lead
wysa_CountryLandLänderverzeichnis inklusive ISO-CodesFirma, Kontakt, Lead
wysa_languageSpracheSprachverzeichnis für Anrede und KorrespondenzKontakt, Lead, Anrede, Titel

Ausgewählte Felder

Mandant (BC) — wysa_bcClient

AnzeigenameLogical NameTypBedeutung
Namewysa_NameTextBezeichnung des Mandanten
Präfixwysa_PrefixTextKürzel des Mandanten
URLwysa_UrlTextAdresse der Business-Central-Umgebung
Standardmandantwysa_DefaultClientJa/NeinWird verwendet, wenn kein Mandant gesetzt ist
BC System-IDwysa_bcSystemIdTextHerkunfts-ID aus Business Central

Verkäufer (BC) — wysa_bcSalesPerson

AnzeigenameLogical NameTypBedeutung
Codewysa_CodeTextVerkäufercode in Business Central
E-Mailwysa_EmailAddressTextDient der automatischen Zuordnung zum CRM-Benutzer
Telefonwysa_TelephoneTextTelefonnummer des Verkäufers
Besitzerwysa_OwnerIdVerweisZugeordneter Benutzer oder Team in CE

Die Zuordnung zum CRM-Benutzer erfolgt automatisch über die E-Mail-Adresse — siehe Stammdaten und Anzeige.

Land — wysa_Country

AnzeigenameLogical NameTypBedeutung
Codewysa_CodeTextLändercode aus Business Central
ISO Alpha-2 / Alpha-3wysa_IsoAlpha2, wysa_IsoAlpha3TextNormierte Ländercodes nach ISO 3166-1
ISO numerischwysa_IsoNumericTextNumerischer Ländercode
Top-Level-Domainwysa_TldTextLänderkennung im Internet

Das Land wird auf Firma, Kontakt und Lead als Verweis gepflegt. Weil Business Central an dieser Stelle einen Klartext erwartet, füllt die Serverlogik zusätzlich das Standard-Textfeld address1_country — siehe Stammdaten und Anzeige.

Position (BC) — wysa_bcPosition

AnzeigenameLogical NameTypBedeutung
Codewysa_CodeTextPositionsschlüssel aus Business Central
Beschreibungwysa_DescriptionTextBezeichnung der Position
Beispielewysa_ExamplesTextTypische Funktionsbezeichnungen dieser Ebene

2.2 - Firma, Kontakt und Lead

Wie die zentralen Adressdaten für die Zusammenarbeit mit Business Central erweitert wurden.

Firma (Account), Kontakt (Contact) und Lead sind unveränderte Standardtabellen. Ergänzt wurden Felder für die Schlüssel aus Business Central, für die Freigabe zur Übertragung und für die Anredebildung.

Firma

Eine Firma entspricht in Business Central je nach Ausprägung einem Debitor, einem Kreditor oder einem Kontakt. Dafür gibt es drei getrennte Nummernfelder.

AnzeigenameLogical NameTypBedeutung
Sync zu BCwysa_sync2bcAuswahl (Ja/Nein)Freigabe zur Übertragung nach Business Central
BC System-IDwysa_bcSystemIdTextHerkunfts-ID in Business Central; gefüllt, sobald die Übertragung erfolgreich war
BC Debitorennummerwysa_bcCustomerNumberTextDebitorennummer
BC Kreditorennummerwysa_bcVendorNumberTextKreditorennummer
BC Kontaktnummerwysa_bcContactNumberTextKontaktnummer in Business Central
BC Suchbegriffwysa_bcSearchNameTextSuchbegriff aus Business Central
Name 1 (BC) / Name 2 (BC)wysa_bcName1, wysa_bcName2TextZweizeiliger Firmenname aus Business Central; daraus wird der Firmenname zusammengesetzt
CRM-Firmennummerwysa_CRMAccountnumberTextFortlaufende Nummer aus Customer Engagement
USt-IdNr.wysa_VatNumberTextUmsatzsteuer-Identifikationsnummer
Firmentypwysa_AccountTypeAuswahlRechtliche Einheit oder Standort
Mandant (BC)wysa_bcClientIdVerweisZugehöriger Buchungskreis
Verkäufer (BC)wysa_bcSalesPersonIdVerweisZuständiger Verkäufer
Debitorrabattgruppewysa_bcCustomerDiscountGroupIdVerweisRabattgruppe des Debitors
Landwysa_Address1_CountryIdVerweisLand der Hauptadresse

Name 1 und Name 2 sind die Felder, die die Schnittstelle mit Business Central austauscht. Der einzeilige Firmenname des CRM-Standards wird daraus zusammengesetzt und ist auf dem Formular schreibgeschützt — siehe Stammdaten und Anzeige.

Kontakt

AnzeigenameLogical NameTypBedeutung
Sync zu BCwysa_sync2bcAuswahl (Ja/Nein)Freigabe zur Übertragung
BC System-IDwysa_bcSystemIdTextHerkunfts-ID in Business Central
BC Kontaktnummerwysa_bcContactNumberTextKontaktnummer in Business Central
BC Suchbegriffwysa_bcSearchNameTextSuchbegriff aus Business Central
CRM-Kontaktnummerwysa_CRMContactnumberTextFortlaufende Nummer aus Customer Engagement
Geschlechtwysa_genderAuswahlGrundlage für Anrede und BC-Anredeschlüssel
Bevorzugte Anredeformwysa_PreferredSalutationTypeAuswahlFormell, informell, persönlich oder individuell
Formelle / informelle / persönliche Anredewysa_Formal_Salutation, wysa_informal_salutation, wysa_personal_salutationTextAutomatisch erzeugte Anredetexte
Individuelle Anredewysa_IndividualSalutationTextManuell erfasste Anrede
Bevorzugte Anredewysa_PreferredSalutationTextDie tatsächlich verwendete Anrede
Anrede (BC)wysa_SalutationBcIdVerweisAnredeschlüssel aus Business Central
Titelwysa_TitleIdVerweisAkademischer oder sonstiger Titel
Sprachewysa_languageVerweisKorrespondenzsprache
Position (BC)wysa_bcPositionIdVerweisFunktion im Unternehmen
Mandant (BC) / Verkäufer (BC)wysa_bcClientId, wysa_bcSalesPersonIdVerweisZuordnung wie bei der Firma
Landwysa_Address1_CountryIdVerweisLand der Hauptadresse

Wie die Anredefelder zusammenwirken, ist unter Anrede, Titel und Sprache und in der Business-Logik beschrieben.

Lead

Der Lead spiegelt bewusst die Felder von Firma und Kontakt. Grund ist die Qualifizierung: Wird aus einem Lead eine Firma, ein Kontakt und eine Verkaufschance, überträgt eine hinterlegte Feldzuordnung die erfassten Werte automatisch in die neuen Datensätze. Ohne die gespiegelten Felder ginge diese Information verloren.

AnzeigenameLogical NameTypBedeutung
Name 1 (BC) / Name 2 (BC)wysa_bcName1, wysa_bcName2TextZweizeiliger Firmenname, wie in Business Central
USt-IdNr.wysa_VatNumberTextUmsatzsteuer-Identifikationsnummer
Firmentypwysa_AccountTypeAuswahlRechtliche Einheit oder Standort
Leadnummerwysa_LeadNumberTextFortlaufende Nummer
Anredeblockwysa_gender, wysa_preferredsalutationtype, wysa_formal_salutation, …Auswahl / TextWie beim Kontakt
Leadquellewysa_LeadSourceIdVerweisHerkunft des Leads
Abonnementwysa_AbonnementVerweisAbonnement, aus dem der Lead entstanden ist
Vertriebsprozesswysa_VerkaufsprozessAuswahlSteuert den nachgelagerten Prozess
Position (BC), Titel, Sprache, Landwysa_bcPositionId, wysa_titleid, wysa_language, wysa_Address1_CountryIdVerweisWie beim Kontakt

Leadquelle — wysa_LeadSource

Eine eigene Tabelle als Katalog der Herkunftskanäle. Sie steht sowohl am Lead als auch an der Verkaufschance zur Verfügung, sodass die Herkunft über die Qualifizierung hinaus auswertbar bleibt.

AnzeigenameLogical NameTypBedeutung
Namewysa_NameTextBezeichnung der Quelle
Gruppierungwysa_GroupingTextZusammenfassung mehrerer Quellen für die Auswertung
Startdatum / Enddatumwysa_StartDate, wysa_EndDateDatumGültigkeitszeitraum

2.3 - Verkaufschance, Angebot und Produkt

Erweiterungen im Vertriebsprozess — Beträge, Margen, führendes Angebot und Ausschreibungen.

Verkaufschance

AnzeigenameLogical NameTypBedeutung
Sync zu BCwysa_sync2bcAuswahl (Ja/Nein)Freigabe zur Übertragung
BC System-IDwysa_bcSystemIdTextHerkunfts-ID in Business Central
BC Verkaufschancennummerwysa_bcOpportunityNumberTextNummer in Business Central; Nachweis der erfolgreichen Übertragung
CRM-Verkaufschancennummerwysa_CRMOpportunityNumberTextFortlaufende Nummer aus Customer Engagement
Führendes Angebotwysa_LeadingQuoteIdVerweisDas Angebot, das die Verkaufschance kaufmännisch abbildet
Voraussichtliche Margewysa_EstimatedMarginBetragErwartete Marge; je nach Konfiguration manuell erfasst oder berechnet
Wiedervorlage amwysa_resetdatetoDatumTermin, zu dem die Chance erneut bewertet wird
Grund der Wiedervorlagewysa_resetreasonTextBegründung der Verschiebung
Vertriebsprozesswysa_SalesProcessAuswahlStandard oder Ausschreibung
Leadquellewysa_LeadSourceIdVerweisHerkunft, aus dem Lead übernommen
Mandant (BC) / Verkäufer (BC)wysa_bcClientId, wysa_bcSalesPersonIdVerweisZuordnung wie bei der Firma

Der Standardwert Voraussichtlicher Umsatz (estimatedvalue) und die Voraussichtliche Marge (wysa_EstimatedMargin) werden je nach Konfiguration manuell erfasst oder automatisch berechnet — aus den Verkaufschancenprodukten oder aus dem führenden Angebot. Beide sind getrennt konfigurierbar. Siehe Beträge und Margen.

Ausschreibungen

Steht der Vertriebsprozess auf Ausschreibung, wird ein zusätzlicher Block sichtbar. Er bildet die Besonderheiten öffentlicher Vergabeverfahren ab.

AnzeigenameLogical NameTypBedeutung
Verfahrensartwysa_ProcurementProcedureTypeAuswahlOffenes Verfahren, Verhandlungsverfahren, Wettbewerblicher Dialog …
EU-Verfahrenwysa_IsEuProcedureJa/NeinVergabe oberhalb des EU-Schwellenwerts
Vergabenummerwysa_AwardNumberTextAktenzeichen der Vergabestelle
Ausschreibungsvolumenwysa_TenderValueBetragGeschätztes Gesamtvolumen
Vergabeportalwysa_TenderPortalUrlURLAdresse der Bekanntmachung
Abgabefristwysa_SubmissionDeadlineDatum/ZeitFrist für die Angebotsabgabe
Frist Bieterfragenwysa_BidderQuestionDeadlineDatum/ZeitFrist für Rückfragen an die Vergabestelle
Ende Rahmenvertragwysa_FrameworkAgreementEndDateDatumLaufzeitende eines Rahmenvertrags
Verlängerungsoptionwysa_ExtensionOptionMehrzeiliger TextBeschreibung möglicher Verlängerungen
Mindestabnahmewertwysa_MinimumOrderValueBetragZugesicherte Mindestabnahme
Mindestabnahme biswysa_MinimumOrderUntilDatumFrist der Mindestabnahme

Verkaufschancenprodukt

AnzeigenameLogical NameTypBedeutung
BC System-IDwysa_BCSystemIdTextHerkunfts-ID in Business Central
BC Betragwysa_bcAmountBetragBetrag der Position aus Business Central
BC Betrag inkl. MwSt.wysa_bcAmountVatBetragBruttobetrag der Position
Margewysa_MarginBetragMarge der Position
Sync zu BCwysa_SynctoBCAuswahl (Ja/Nein)Freigabe zur Übertragung, folgt der Verkaufschance

Angebot

AnzeigenameLogical NameTypBedeutung
BC System-IDwysa_bcSystemIdTextHerkunfts-ID in Business Central
BC Statuswysa_BCStatusTextBearbeitungsstand in Business Central; steuert das automatische Gewinnen
Angebotsklassifizierungwysa_bcQuoteClassificationAuswahlErstangebot oder weiteres Angebot
Archivierte Versionenwysa_bcArchivedVersionsGanzzahlAnzahl der Versionen in Business Central
BC Gesamtbetragwysa_bcTotalAmountBetragAngebotssumme netto
BC Gesamtbetrag inkl. MwSt.wysa_bcTotalAmountVatBetragAngebotssumme brutto
Margewysa_MarginBetragSumme der Zeilenmargen
Mandant (BC) / Verkäufer (BC)wysa_bcClientId, wysa_bcSalesPersonIdVerweisZuordnung wie bei der Firma

Angebotsposition

AnzeigenameLogical NameTypBedeutung
BC System-IDwysa_bcSystemIdTextHerkunfts-ID in Business Central
BC Betragwysa_bcAmountBetragNettobetrag der Position
BC Betrag inkl. MwSt.wysa_bcAmountVatBetragBruttobetrag der Position
BC Deckungsbeitragwysa_bcProfitBetragDeckungsbeitrag der Position

Gesamtbetrag und Marge des Angebots werden aus den Positionen aufsummiert.

Produkt

Produkte werden aus Business Central übertragen — nicht der gesamte Artikelstamm, sondern die dort als Verkaufschancen-Elemente gepflegten Positionen. Übertragen wird bewusst nur ein schmaler Satz identifizierender Felder; die vertriebliche Klassifizierung wird in Customer Engagement gepflegt.

Aus Business Central übertragen

AnzeigenameLogical NameTypBedeutung
BC Codewysa_BCCodeTextSchlüssel des Elements; über ihn wird der Datensatz wiedererkannt
BC System-IDwysa_bcSystemIdTextHerkunfts-ID in Business Central
BeschreibungdescriptionTextBezeichnung aus Business Central
Dimensionenwysa_BCdimension1Code, wysa_BCdimension1ValueCode, wysa_bcDimension2Code, wysa_bcDimension2ValueCodeTextBuchhalterische Dimensionen aus Business Central

Einheitengruppe und Standardeinheit werden beim Anlegen automatisch gesetzt, damit das Produkt in Customer Engagement verwendbar ist.

In Customer Engagement gepflegt

AnzeigenameLogical NameTypBedeutung
Name 2wysa_Name2TextZweite Bezeichnungszeile
GTINwysa_bcGtinTextGlobale Artikelnummer
Preiswysa_PriceBetragHinterlegter Preis
Preis inkl. MwSt.wysa_bcPriceInclVatJa/NeinKennzeichen, ob der Preis brutto ist
Artikelartwysa_bcProductTypeAuswahlBestand, Service oder Nicht-Bestand
Abrechnungsmodellwysa_BillingModelAuswahlEinmalig, wiederkehrend, Pauschal, Aufwand, nutzungsabhängig
Leistungsartwysa_ProductServiceTypeAuswahlHardware, Software, Cloud-Service, Dienstleistung …
Herkunftwysa_SourceTypeAuswahlEigenleistung, Fremdbezug oder Mischleistung
Ziel-Marge (%)wysa_TargetMarginPctDezimalAngestrebte Marge
Verkaufschancen-Elementwysa_OppElementJa/NeinProdukt ist als Verkaufschancen-Position verwendbar
Hersteller / Produktkategoriewysa_bcProducerId, wysa_bcProductCategoryIdVerweisKlassifizierung des Produkts

2.4 - Abonnements und externe Stakeholder

Eigene Tabellen für wiederkehrende Leistungen und für externe Beteiligte an einer Verkaufschance.

Abonnement — wysa_bcServiceObject

Ein Abonnement bildet eine wiederkehrend abgerechnete Leistung ab: eine Lizenz, einen Cloud-Service, einen Wartungsvertrag. Die Datensätze entstehen in Business Central und werden nach Customer Engagement übertragen, damit der Vertrieb Bestand, Laufzeiten und Kündigungsfristen im Blick hat.

Bemerkenswert ist die Trennung zweier Rollen: Rechnungsempfänger ist, wer bezahlt, Leistungsnehmer, wer die Leistung nutzt. In Konzernstrukturen sind das unterschiedliche Firmen.

AnzeigenameLogical NameTypBedeutung
Nummerwysa_NumberTextAbonnementnummer aus Business Central
Abonnementartwysa_SubscriptionTypeAuswahlAusprägung des Abonnements; steuert die Sichtbarkeit weiterer Felder
Produktwysa_ProductIdVerweisAbonniertes Produkt
Produktnummer / -beschreibungwysa_ProductNumber, wysa_ProductDescriptionTextBezeichnung aus Business Central
Mengewysa_QuantityDezimalAbonnierte Menge
Einheitwysa_UomTextMengeneinheit, wie von Business Central geliefert (kein Verweis auf einen Einheiten-Datensatz)
Seriennummer / Versionwysa_SerialNumber, wysa_VersionTextTechnische Identifikation
Bereitstellung von / biswysa_ProvisioningStart, wysa_ProvisioningEndDatumZeitraum der Bereitstellung
Rechnungsempfänger Firma / Kontaktwysa_BillToAccountId, wysa_BillToContactIdVerweisWer die Rechnung erhält
Leistungsnehmer Firma / Kontaktwysa_EndUserAccountId, wysa_EndUserContactIdVerweisWer die Leistung nutzt
Verkaufschancewysa_OpportunityIdVerweisUrsprung des Abonnements
Mitbewerberwysa_CompetitorIdVerweisAktueller Anbieter, falls die Leistung abgelöst werden soll
Kundenreferenzwysa_CustomerReferenceTextReferenz des Kunden
Leaderstellungwysa_LeaderDateDatumStichtag der Leadgenerierung
Anzahl Zeilenwysa_AmountGanzzahlAnzahl der zugehörigen Abonnementzeilen

Abonnements können automatisch Leads erzeugen — etwa vor Ablauf einer Laufzeit. Der Lead trägt dann im Feld wysa_Abonnement den Verweis auf sein Ursprungsabonnement.

Abonnementzeile — wysa_bcServiceObjectCommitment

Die Zeile trägt die kaufmännischen Details. Ein Abonnement kann mehrere Zeilen mit unterschiedlichen Laufzeiten und Abrechnungsrhythmen haben.

AnzeigenameLogical NameTypBedeutung
Abonnementwysa_ServiceObjectIdVerweisÜbergeordnetes Abonnement
Vertrags- / Zeilennummerwysa_ContractNumber, wysa_LineNumberTextIdentifikation der Zeile
Anfangslaufzeit / Verlängerungslaufzeitwysa_InitialTerm, wysa_RenewalTermTextLaufzeitregelung
Kündigungsfristwysa_NoticePeriodTextFrist zur Kündigung
Kündigung möglich biswysa_CancellationPossibleUntilDatumKonkreter Stichtag — das für den Vertrieb wichtigste Datum
Leistungsbeginn / Leistungsendewysa_ServiceStart, wysa_ServiceEndDatumZeitraum der Leistung
Laufzeit biswysa_TermUntilDatumVertragsende
Nächste Berechnungwysa_NextBillingDatumTermin der nächsten Fakturierung
Abrechnungsrhythmus / -zeitraumwysa_BillingRhythm, wysa_BillingPeriodTextTurnus der Abrechnung
Preis / Mengewysa_Price, wysa_QuantityBetrag / DezimalKaufmännische Basis
Rabattwysa_Discount, wysa_DiscountAmount, wysa_DiscountPercentJa/Nein, Betrag, DezimalGewährter Rabatt
Berechnungsbasiswysa_CalculationBase, wysa_CalculationBasePercentBetrag / DezimalGrundlage der Preisermittlung
Leistungsbetragwysa_ServiceAmountBetragBetrag der Zeile
Abrechnung überwysa_InvoicingViaAuswahlVertrag oder Verkauf
Partnerwysa_PartnerAuswahlKunde oder Lieferant
Abzurechnendes Produktwysa_InvoicingProductIdVerweisProdukt, über das fakturiert wird
WährungTransactionCurrencyIdVerweisWährung der Zeile

Externer Stakeholder — wysa_OpportunityStakeholder

Der Standard kennt Stakeholder als Verbindungen zu Kontakten des Kunden. Diese Tabelle ergänzt bewusst eine zweite, davon getrennte Sicht: externe Beteiligte, die weder zum Kunden noch zum eigenen Unternehmen gehören — Implementierungspartner, beratende Systemhäuser, externe Projektleiter oder die Vergabestelle einer Ausschreibung.

AnzeigenameLogical NameTypBedeutung
Verkaufschancewysa_OpportunityIdVerweisBetroffene Verkaufschance
Firmawysa_AccountIdVerweisBeteiligtes Unternehmen
Kontaktwysa_ContactIdVerweisAnsprechpartner
Rollewysa_StakeholderRoleAuswahlArt der Beteiligung
Hauptansprechpartnerwysa_IsPrimaryJa/NeinKennzeichnung des führenden Beteiligten
Kommentarwysa_CommentMehrzeiliger TextEinordnung der Rolle

Der Anzeigename des Datensatzes wird automatisch aus Kontakt und Firma gebildet. Wird ein Kontakt gewählt, füllt das Formular die Firma vor.

2.5 - Anrede, Titel und Sprache

Die Tabellen hinter der automatischen Anredebildung.

Korrekte Anreden sind in der Korrespondenz kein Detail, sondern eine Frage der Verlässlichkeit — und in mehrsprachigen Kundenbeziehungen nicht trivial. Die Lösung erzeugt Anredetexte deshalb regelbasiert aus vier Bestandteilen: Geschlecht, Titel, Sprache und einer Anredevorlage.

flowchart LR
    G["Geschlecht<br/>(wysa_gender)"] --> V["Anredevorlage<br/>(wysa_salutation)"]
    T["Titel<br/>(wysa_title)"] --> V
    S["Sprache<br/>(wysa_language)"] --> V
    V --> A["Formelle / informelle /<br/>persönliche Anrede"]
    A --> P["Bevorzugte Anrede"]

Anredevorlage — wysa_salutation

Die Vorlage bestimmt, wie ein Anredetext aufgebaut wird. Pro Sprache und Geschlecht gibt es je eine Vorlage für die formelle, informelle und persönliche Form.

AnzeigenameLogical NameTypBedeutung
Formelle Anredewysa_FormalSalutationTextVorlage der förmlichen Anrede
Informelle Anredewysa_InformalSalutationTextVorlage der lockeren Anrede
Persönliche Anredewysa_PersonalSalutationTextVorlage der persönlichen Anrede
Standardanredewysa_DefaultSalutationTextFallback, wenn keine Form passt
Geschlechtwysa_GenderAuswahlGeschlecht, für das die Vorlage gilt
Geschlechtstextwysa_GenderTextTextSprachabhängiger Bestandteil, etwa „Herr" oder „Frau"
Geschlechtstext weglassenwysa_WithoutGenderTextJa/NeinUnterdrückt den Geschlechtsbestandteil
Titel weglassenwysa_WithoutTitleJa/NeinUnterdrückt den Titel
Skriptwysa_SkriptMehrzeiliger TextAufbauregel der Anrede
Sprachewysa_LanguageIdVerweisSprache der Vorlage

Titel — wysa_title

AnzeigenameLogical NameTypBedeutung
Namewysa_NameTextTitelbezeichnung, etwa „Dr."
Sprachewysa_LanguageIdVerweisSprache, in der der Titel verwendet wird

Sprache — wysa_language

AnzeigenameLogical NameTypBedeutung
Codewysa_CodeTextSprachcode
Namewysa_NameTextBezeichnung der Sprache

Die Sprache wird an Kontakt und Lead gepflegt. Ist keine gesetzt, kann je Anwendung eine Standardsprache konfiguriert werden — siehe Konfiguration.

Anrede (BC) — wysa_bcSalutation

Business Central führt eine eigene Anredetabelle. Sie wird nach Customer Engagement übertragen und am Kontakt im Feld wysa_SalutationBcId gesetzt.

AnzeigenameLogical NameTypBedeutung
Codewysa_CodeTextAnredeschlüssel in Business Central
Geschlechtwysa_GenderAuswahlZugeordnetes Geschlecht
Sprachewysa_LanguageIdVerweisSprache des Anredeschlüssels
Standardwysa_DefaultJa/NeinVorbelegung innerhalb einer Sprache
BC System-IDwysa_bcSystemIdTextHerkunfts-ID aus Business Central

Geschlecht und BC-Anrede werden in beide Richtungen synchron gehalten: Wird das eine gesetzt, ergänzt die Serverlogik das andere. Details unter Anrede und Sprache.

2.6 - Wertelisten

Alle Auswahlfelder der Lösung mit ihren möglichen Werten.

Auswahlfelder (Optionssets) legen fest, welche Werte erfasst werden können. Die folgenden Listen sind global definiert und werden an mehreren Stellen verwendet. Änderungen an ihnen wirken sich überall aus, wo das Feld eingesetzt wird.

Integration und Klassifizierung

WertelisteVerwendet aufWerte
wysa_sync2bcFirma, Kontakt, Verkaufschance, VerkaufschancenproduktJa · Nein
wysa_firmentypFirma, LeadRechtliche Einheit · Standort
wysa_quoteclassificationAngebotErstangebot · Weiteres Angebot

Person und Anrede

WertelisteVerwendet aufWerte
wysa_genderKontakt, Lead, Anrede, Anrede (BC)Männlich · Weiblich · Divers · Unbekannt
wysa_preferredsalutationtypeKontakt, LeadFormell · Informell · Persönlich · Individuell

Vertriebsprozess und Ausschreibung

WertelisteVerwendet aufWerte
wysa_salesprocessVerkaufschanceStandard · Ausschreibung
wysa_procurementproceduretypeVerkaufschanceOffenes Verfahren · Nicht-offenes Verfahren · Verhandlungsverfahren mit Teilnahmewettbewerb · Verhandlungsverfahren ohne Teilnahmewettbewerb · Wettbewerblicher Dialog
wysa_stakeholderroleExterner StakeholderImplementierungspartner · Vertriebspartner/Reseller · Beratendes Systemhaus · Externer Fachberater · Externer Projektleiter · Vergabestelle · Bedarfsträger Fachabteilung · Sonstiger

Produkt und Abrechnung

WertelisteVerwendet aufWerte
wysa_producttypeProduktBestand · Service · Nicht-Bestand
wysa_productservicetypeProduktHardware · Software (einmalig) · Softwarelizenz · Cloud-Service · Managed Service · Dienstleistung · Wartung · Schulung · Servicepaket · Sonstiges
wysa_billingmodelProduktEinmalig · Wiederkehrend · Pauschal · Aufwand (T&M) · Nutzungsabhängig
wysa_sourcetypeProduktEigenleistung · Fremdbezug (Resale) · Mischleistung
wysa_invoicingviaAbonnementzeileVertrag · Verkauf
wysa_servicepartnerAbonnementzeileKunde · Lieferant

Zusätzlich gibt es am Abonnement das tabellenbezogene Auswahlfeld Abonnementart (wysa_SubscriptionType). Es steuert, welche Felder auf dem Formular sichtbar sind, und ist nur dort verwendbar.

3 - Business-Logik

Welche Regeln automatisch greifen — und warum sie greifen, egal auf welchem Weg Daten entstehen.

dsyr.SalesCentral nimmt Anwendern Arbeit ab und verhindert Zustände, die in Business Central zu Fehlern führen würden. Dieses Kapitel beschreibt, was automatisch passiert.

Zwei Ebenen, ein Ergebnis

EbeneWo sie läuftWas sie tut
FormularlogikIm Browser, während der BearbeitungBlendet Felder ein und aus, sperrt Felder, die Business Central führt, meldet Probleme früh
ServerlogikIn der Plattform, bei jedem SpeichervorgangSetzt Werte, berechnet Summen, verweigert unzulässige Änderungen

Beide prüfen an einigen Stellen dasselbe. Der Unterschied ist die Reichweite: Die Formularlogik hilft im Formular, die Serverlogik gilt immer — auch bei Datenimporten, Massenänderungen, Power Automate und Schnittstellenaufrufen. Alles, was verbindlich sein muss, liegt deshalb auf dem Server.

Die Serverregeln laufen synchron. Verstößt eine Änderung gegen eine Regel, wird der Speichervorgang mit einer Meldung abgebrochen; es entsteht kein halb gültiger Zustand. Die Meldungen sind unter Meldungen erklärt.

Die Themen

ThemaInhalt
Freigabe nach Business CentralWann ein Datensatz übertragen werden darf und warum die Reihenfolge zählt
Anrede und SpracheAutomatische Anredetexte, Geschlecht und Standardsprache
Beträge und MargenSummen aus Positionen, voraussichtlicher Umsatz, führendes Angebot
Abschluss von Angebot und VerkaufschanceGewinnen, Verlieren, Angebots-PDF
Stammdaten und AnzeigeFirmenname, Land, Verkäuferzuordnung, Sichtbarkeiten
KonfigurationUmgebungsvariablen und Einstellungen
BerechtigungenDie mitgelieferten Sicherheitsrollen und ihre Kombination mit den Standardrollen
MeldungenFehlermeldungen mit Ursache und Lösung

3.1 - Freigabe nach Business Central

Wann ein Datensatz nach Business Central übertragen werden darf — und warum die Reihenfolge zählt.

Das Feld „Sync zu BC"

Nicht jede Firma und nicht jeder Kontakt gehört nach Business Central. Ein Interessent, der nie zum Kunden wird, hat dort nichts verloren. Deshalb ist die Übertragung kein Automatismus, sondern eine bewusste Entscheidung: Das Feld Sync zu BC (wysa_sync2bc) gibt einen Datensatz frei. Erst dann liest die dsyr.DataBridge ihn und überträgt ihn.

Das Feld steht auf Firma, Kontakt, Verkaufschance und Verkaufschancenprodukt.

Die Grundregel: erst der Vater, dann das Kind

Business Central kann einen Kontakt nur anlegen, wenn dessen Firma dort bereits existiert. Genauso wenig kann eine Verkaufschance ohne ihren Kontakt übertragen werden. Daraus folgt die zentrale Regel der Integration:

Ein untergeordneter Datensatz darf erst freigegeben werden, wenn der übergeordnete nachweislich in Business Central angekommen ist.

„Nachweislich" heißt: Business Central hat den Schlüssel zurückgemeldet. Der Nachweis ist also nicht das gesetzte Häkchen, sondern ein gefülltes Rückmeldefeld:

Übergeordneter DatensatzNachweis der Ankunft
Firmawysa_bcSystemId bzw. wysa_bcCustomerNumber
Kontaktwysa_bcContactNumber
Verkaufschancewysa_bcOpportunityNumber

Diese Unterscheidung ist der Kern: Ein Häkchen bedeutet nur „soll übertragen werden", ein gefülltes Nummernfeld bedeutet „ist übertragen".

flowchart TD
    A["Firma freigeben<br/>(Sync zu BC = Ja)"] --> B{"BC-Nummer<br/>zurückgemeldet?"}
    B -- nein --> C["Kontakt kann noch nicht<br/>freigegeben werden"]
    B -- ja --> D["Kontakt freigeben"]
    D --> E{"BC-Kontaktnummer<br/>zurückgemeldet?"}
    E -- nein --> F["Verkaufschance kann noch nicht<br/>freigegeben werden"]
    E -- ja --> G["Verkaufschance freigeben"]

Was das im Alltag bedeutet

Kontakt an eine andere Firma hängen. Wird die übergeordnete Firma eines freigegebenen Kontakts gewechselt, prüft die Lösung, ob die neue Firma bereits in Business Central existiert. Ist sie es nicht, wird die Änderung abgelehnt — sonst entstünde dort ein Kontakt ohne Firma.

Verkaufschance ohne Kontakt. Eine Verkaufschance kann nicht ohne Kontakt übertragen werden. Fehlt er, wird die Freigabe abgelehnt. Ist er vorhanden, aber selbst noch nicht in Business Central angekommen, ebenfalls.

Vererbung von der Firma auf ihre Kontakte. Wird eine Firma freigegeben und ist ihre Übertragung bestätigt, können die zugehörigen Kontakte automatisch mit freigegeben werden. Das erspart die Einzelpflege. Gesteuert wird das über die Umgebungsvariable wysa_AutomaticContactSyncBC — siehe Konfiguration. Ist sie deaktiviert, bleibt die Freigabe je Kontakt eine manuelle Entscheidung.

Verkaufschancenprodukte. Positionen einer Verkaufschance folgen ihrer Verkaufschance. Das funktioniert in beiden Entstehungsreihenfolgen: Wird eine Position zu einer bereits übertragenen Verkaufschance hinzugefügt, wird sie sofort freigegeben; wird die Verkaufschance nachträglich übertragen, werden die bestehenden Positionen nachgezogen.

Kopieren einer Verkaufschance

Wird eine Verkaufschance samt Positionen kopiert, würde die Kopie die BC-Nummer des Originals mittragen — in Business Central entstünde ein doppelter Schlüssel. Deshalb erkennt die Lösung eine Kopie daran, dass die BC-Nummer bereits bei einem anderen Datensatz vergeben ist, und löscht dann die BC-Informationen der Kopie:

DatensatzGeleert / zurückgesetzt
VerkaufschanceBC-Verkaufschancennummer, BC-System-ID, Führendes Angebot; Sync zu BC = Nein
VerkaufschancenproduktBC-System-ID; Sync zu BC = Nein

Die Kopie gilt damit als neue, noch nicht übertragene Verkaufschance und muss bewusst erneut freigegeben werden.

Im Formular

Ergänzend zur Serverprüfung verhält sich das Formular vorausschauend:

  • Sync zu BC ist nur änderbar, solange es sinnvoll ist. Ist ein Datensatz bereits übertragen, wird das Feld gesperrt.
  • Von Business Central geführte Felder sind gesperrt. Sobald ein Datensatz dort existiert, lassen sich Nummern und Stammdatenfelder in Customer Engagement nicht mehr ändern — sie würden ohnehin überschrieben.
  • Speichern wird blockiert, bevor der Server ablehnt. Beim Kontakt prüft das Formular die Freigabesituation direkt beim Speichern und meldet das Problem sofort. Auch das automatische Zwischenspeichern wird in diesem Fall unterdrückt, damit keine Fehlermeldung ohne erkennbaren Anlass erscheint.

Sämtliche dieser Prüfungen gibt es zusätzlich auf dem Server. Wer Daten importiert oder über eine Schnittstelle schreibt, unterliegt denselben Regeln.

3.2 - Anrede und Sprache

Automatisch erzeugte Anredetexte, Abgleich mit der BC-Anrede und Standardsprache.

Anredetexte entstehen automatisch

Sobald Vorname, Nachname, Geschlecht, Titel oder Sprache eines Kontakts oder Leads gesetzt oder geändert werden, erzeugt die Lösung die Anredetexte neu:

  • Formelle Anrede — für offizielle Korrespondenz
  • Informelle Anrede — für den vertrauten Schriftverkehr
  • Persönliche Anrede — für die direkte Ansprache

Welche dieser Formen tatsächlich verwendet wird, bestimmt das Feld Bevorzugte Anredeform (wysa_PreferredSalutationType). Der gewählte Text wird in das Feld Bevorzugte Anrede übernommen — dieses eine Feld ist es, das in Vorlagen und Serienbriefen verwendet wird.

Wird als Anredeform Individuell gewählt, tritt die Automatik zurück: Das Feld Individuelle Anrede wird eingeblendet, der dort erfasste Text hat Vorrang. Das ist der Ausweg für Sonderfälle, die keine Regel abbilden kann.

Grundlage der Textbildung sind die Anredevorlagen je Sprache und Geschlecht — siehe Anrede, Titel und Sprache.

Geschlecht und BC-Anrede halten sich gegenseitig aktuell

Customer Engagement arbeitet mit dem Feld Geschlecht, Business Central mit einem Anredeschlüssel. Beide beschreiben dasselbe, und beide Systeme dürfen die Information liefern. Deshalb wird sie in beide Richtungen abgeglichen:

  • Wird das Geschlecht gesetzt oder geändert, ermittelt die Lösung den passenden BC-Anredeschlüssel und trägt ihn ein.
  • Kommt aus Business Central ein Anredeschlüssel, wird daraus das Geschlecht abgeleitet.

Der Anwender pflegt also nur eine der beiden Angaben; die andere ergibt sich. Findet sich zu einem Wert keine Entsprechung, wird die Verarbeitung mit einer Meldung abgebrochen, statt einen falschen Wert zu setzen.

Standardsprache bei neuen Kontakten und Leads

Wird ein Kontakt oder Lead ohne Sprache angelegt, kann automatisch eine Standardsprache gesetzt werden. Das erspart die Pflege im Regelfall, ohne die manuelle Auswahl zu verhindern.

Die Standardsprache wird über die Einstellung wysa_DefaultLanguageGUID konfiguriert und lässt sich je Anwendung unterschiedlich festlegen. Ein Vertriebsteam, das ausschließlich im deutschsprachigen Raum arbeitet, kann so eine andere Vorbelegung erhalten als ein international arbeitendes. Der Wert 0 schaltet die Vorbelegung ab. Details unter Konfiguration.

3.3 - Beträge und Margen

Wie Summen aus Positionen entstehen und wie der voraussichtliche Umsatz ermittelt wird.

Angebotssumme und Marge

Die Beträge eines Angebots werden nicht erfasst, sondern aus den Positionen berechnet. Sobald eine Angebotsposition angelegt, geändert oder gelöscht wird, aktualisiert die Lösung am Angebot:

FeldBerechnung
BC Gesamtbetrag (wysa_bcTotalAmount)Summe der Positionsbeträge
Marge (wysa_Margin)Summe der Deckungsbeiträge der Positionen

Weil die Berechnung serverseitig läuft, stimmen die Summen auch dann, wenn Positionen über die Übertragung aus Business Central entstehen — nicht nur bei manueller Erfassung.

Voraussichtlicher Umsatz und voraussichtliche Marge

An der Verkaufschance gibt es zwei berechenbare Kennzahlen, die getrennt voneinander konfiguriert werden:

FeldEinstellungAuslieferungsstand
Voraussichtlicher Umsatz (estimatedvalue)wysa_EstimatedRevenueSourceUserProvided
Voraussichtliche Marge (wysa_EstimatedMargin)wysa_EstimatedMarginSourceUserProvided;OpportunityproductProvided

Die Trennung erlaubt unterschiedliche Arbeitsweisen: Der Umsatz kann bewusst Vertriebsschätzung bleiben, während die Marge aus den Positionen gerechnet wird.

Aufbau des Einstellungswerts

Beide Einstellungen erwarten eine Liste erlaubter Quellen, mit Semikolon getrennt. Jede zusätzlich aufgeführte Quelle erweitert die vorhergehende — sie ist keine Alternative, sondern eine höhere Priorität.

WertVerhalten
UserProvidedDer Wert wird immer manuell erfasst, es wird nichts berechnet.
UserProvided;OpportunityproductProvidedSolange die Verkaufschance keine Produkte hat, wird manuell erfasst. Sobald Produkte vorhanden sind, wird der Wert aus deren Summe berechnet und das Feld schreibgeschützt.
UserProvided;OpportunityproductProvided;QuoteProvidedZusätzlich gilt: Ist ein führendes Angebot verknüpft, hat dessen Wert Vorrang vor der Produktsumme. Das Feld ist ebenfalls schreibgeschützt.

Welche Werte konkret herangezogen werden:

QuelleFür den UmsatzFür die Marge
VerkaufschancenprodukteSumme von wysa_bcAmountSumme von wysa_Margin
Führendes Angebotwysa_bcTotalAmountwysa_Margin

Wann neu gerechnet wird

Die Berechnung läuft serverseitig, sobald sich eine der Grundlagen ändert:

AuslöserWirkung
Verkaufschancenprodukt angelegt, geändert oder gelöschtUmsatz und Marge der Verkaufschance werden neu ermittelt
Angebot angelegt oder dessen Marge geändertMarge der zugehörigen Verkaufschance wird neu ermittelt
Führendes Angebot der Verkaufschance gewechseltBeide Kennzahlen werden neu ermittelt

Im Formular

Ist eine Kennzahl berechnet, sperrt das Formular das zugehörige Feld — sowohl im Formularkörper als auch in der Kopfzeile der Verkaufschance. So ist erkennbar, dass der Wert abgeleitet und nicht verhandelbar eingetragen ist.

Umsatz und Marge werden dabei einzeln bewertet: Je nach Konfiguration kann das eine Feld gesperrt und das andere frei sein. Die Prüfung läuft beim Öffnen des Formulars, beim Wechsel des führenden Angebots und bei Änderungen im Produkt-Unterraster.

Das führende Angebot

Zu einer Verkaufschance können mehrere Angebote gehören — Nachverhandlungen, Alternativvarianten, korrigierte Fassungen. Kaufmännisch maßgeblich ist aber nur eines. Die Lösung setzt das Feld Führendes Angebot (wysa_LeadingQuoteId) automatisch: Es verweist auf das älteste der verknüpften Angebote.

Wird ein Angebot einer anderen Verkaufschance zugeordnet, wird auch die zuvor zugeordnete Verkaufschance korrigiert — sie erhält ihr nächstes gültiges führendes Angebot oder keins. So bleibt bei jeder Umhängeaktion auf beiden Seiten ein stimmiger Stand.

3.4 - Abschluss von Angebot und Verkaufschance

Gewinnen, Verlieren und das Angebots-PDF aus Business Central.

Gewinnen: Business Central gibt das Signal

Ein Angebot gilt als gewonnen, wenn es in Business Central in einen Auftrag überführt wurde. Diese Rückmeldung kommt über das Feld BC Status (wysa_BCStatus). Meldet Business Central den Wert TRANSFERRED, setzt die Lösung das Angebot in Customer Engagement automatisch auf Gewonnen.

Der Vertrieb muss den Abschluss also nicht doppelt pflegen — das führende System für den Auftrag ist Business Central, und Customer Engagement folgt.

Optional geht die Automatik einen Schritt weiter: Ist die Einstellung wysa_WinQuoteAndOpportunity aktiv, wird zusätzlich die verknüpfte Verkaufschance gewonnen. Als tatsächlicher Umsatz wird dabei der Gesamtbetrag des Angebots übernommen. Ohne diese Einstellung bleibt der Abschluss der Verkaufschance eine bewusste Handlung des Vertriebs. Siehe Konfiguration.

Verlieren: verbundene Angebote werden mitgeschlossen

Wird eine Verkaufschance auf Verloren gesetzt, schließt die Lösung alle zugehörigen Angebote ebenfalls als verloren — mit dem Grund „Automatisch geschlossen (Verloren)". Angebote im Entwurfsstatus werden dafür zunächst aktiviert, da nur aktive Angebote geschlossen werden können.

Der Zweck ist Sauberkeit der Auswertung: Ohne diesen Schritt blieben offene Angebote zu einer bereits verlorenen Verkaufschance in der Pipeline stehen und würden die Prognose verfälschen.

Die Verarbeitung erfolgt, bevor der Verlust festgeschrieben wird. Schlägt das Schließen eines Angebots fehl, wird der gesamte Vorgang abgebrochen — es entsteht kein Zustand mit verlorener Verkaufschance und offen gebliebenen Angeboten.

Angebotsklassifizierung

Beim Anlegen eines Angebots wird automatisch bestimmt, ob es sich um das Erstangebot zu einer Verkaufschance handelt oder um ein weiteres Angebot (wysa_bcQuoteClassification). Die Angabe erlaubt Auswertungen darüber, wie häufig nachverhandelt wird.

Angebots-PDF aus Business Central

Auf dem Angebotsformular steht eine Schaltfläche im Menüband bereit, die das Angebotsdokument aus Business Central anfordert und als Anlage am Angebot in Customer Engagement ablegt. Der Vertrieb erhält damit dasselbe PDF, das der Kunde bekommt, ohne das System zu wechseln.

Technisch wird dabei eine eigene Aktion (wysa_TriggerUploadQuoteDocument) aufgerufen, die den Datensatz in beiden Systemen adressiert und den Abruf anstößt.

3.5 - Stammdaten und Anzeige

Automatisch gefüllte Felder, Zuordnungen und Sichtbarkeiten im Formular.

Firmenname aus Name 1 und Name 2

Business Central führt Firmennamen zweizeilig, in den Feldern Name und Name 2. Genau diese beiden Felder beschreibt die Schnittstelle in beide Richtungen — sie sind in Customer Engagement als Name 1 (BC) (wysa_bcName1) und Name 2 (BC) (wysa_bcName2) abgebildet. Der einzeilige Firmenname des CRM-Standards ist an der Übertragung nicht beteiligt.

Damit er trotzdem stimmt, setzt ihn die Serverlogik zusammen: Name 1, ein Leerzeichen, Name 2 — führende und nachfolgende Leerzeichen werden entfernt, ist nur eines der beiden Felder gefüllt, steht auch nur dieses im Namen. Die Berechnung läuft, sobald eines der beiden Quellfelder angelegt oder geändert wird.

Der Firmenname lässt sich deshalb nicht frei vergeben: Auf dem Firmenformular ist er schreibgeschützt. Geändert wird an Name 1 und Name 2; der angezeigte Name folgt automatisch. Das hält CE und Business Central dauerhaft identisch.

Am Lead greift dieselbe Regel für den Firmennamen — damit der Name die Qualifizierung unverändert übersteht. Dort ist das Feld allerdings nicht schreibgeschützt: Ein manuell eingetragener Name bleibt stehen, bis Name 1 oder Name 2 geändert wird; dann wird er überschrieben.

Land als Verweis und als Text

Das Land wird auf Firma, Kontakt und Lead als Verweis auf die Ländertabelle gepflegt — das verhindert Schreibweisenvielfalt und erlaubt saubere Auswertungen. Business Central erwartet an dieser Stelle jedoch einen Klartext.

Die Lösung füllt deshalb bei jeder Änderung des Landverweises zusätzlich das Standard-Textfeld der Adresse mit dem Ländernamen. Der Anwender pflegt eine Angabe, beide Systeme erhalten die für sie passende Form.

Verkäufer und Benutzer

Kommt ein Verkäufer aus Business Central, wird er über seine E-Mail-Adresse dem passenden Benutzer in Customer Engagement zugeordnet. Die Zuordnung ist damit selbstpflegend: Neue Verkäufer erscheinen nach der nächsten Übertragung korrekt verknüpft, ohne dass jemand eine Zuordnungstabelle nachziehen muss.

Ergänzend kann der Besitzer von Firma, Verkaufschance und Angebot mit dem zugeordneten Verkäufer abgeglichen werden; gesteuert über wysa_SyncAccountOwnerWithSalesPerson.

Weitere Automatismen

WasVerhalten
Einheitengruppe am ProduktWird eine Mengeneinheit angelegt, wird die Standard-Einheitengruppe automatisch gesetzt.
Anzeigename externer StakeholderWird aus Kontakt und Firma gebildet, damit Listen und Verweise lesbar bleiben.
Firma am StakeholderWird ein Kontakt gewählt, füllt das Formular die zugehörige Firma vor.

Sichtbarkeiten im Formular

Formulare zeigen nur, was im jeweiligen Fall relevant ist. Das hält die Erfassungsmaske schlank, ohne Informationen zu verlieren.

FormularRegel
VerkaufschanceDer Ausschreibungsblock erscheint nur, wenn der Vertriebsprozess auf „Ausschreibung" steht. Die Felder zur Wiedervorlage erscheinen nur, wenn eine Wiedervorlage vorliegt.
KontaktDas Feld für die individuelle Anrede erscheint nur bei der Anredeform „Individuell".
LeadDie Position erscheint, sobald Kontaktdaten erfasst sind; das Land, sobald eine Firma benannt ist.
FirmaDie USt-IdNr. erscheint abhängig vom Firmentyp.
AbonnementDie Felder zu Leistungszusagen richten sich nach der Abonnementart.
ProduktFelder für Verkaufschancen-Elemente erscheinen nur bei entsprechend gekennzeichneten Produkten.

3.6 - Konfiguration

Umgebungsvariablen und Einstellungen, mit denen sich das Verhalten je Umgebung steuern lässt.

Diese Seite richtet sich an die IT-Administration. Die Werte werden je Umgebung gepflegt und wirken sofort — eine Anpassung der Lösung ist dafür nicht nötig.

Umgebungsvariablen

Umgebungsvariablen werden in der Power Platform verwaltet und unterscheiden sich typischerweise zwischen Test- und Produktivumgebung.

Verbindung zu Business Central

VariableBedeutung
wysa_BcBaseUrlBasisadresse der Business-Central-Umgebung
wysa_BcTenantIdVerzeichnis (Tenant), in dem Business Central betrieben wird
wysa_BcClientIdAnwendungskennung der registrierten Anwendung
wysa_BcClientSecretGeheimnis der registrierten Anwendung

Verhalten

VariableWirkung
wysa_AutomaticContactSyncBCSteuert, ob Kontakte automatisch mit ihrer Firma für die Übertragung freigegeben werden. Ist sie deaktiviert, entscheidet der Anwender je Kontakt. Siehe Freigabe nach BC.
wysa_SyncAccountOwnerWithSalesPersonSteuert, ob der Besitzer von Firma, Verkaufschance und Angebot mit dem zugeordneten BC-Verkäufer abgeglichen wird.

Einstellungen

Einstellungen (Settings) sind feiner steuerbar als Umgebungsvariablen: Sie können organisationsweit und abweichend je Anwendung gesetzt werden.

EinstellungStandardwertWirkung
wysa_DefaultLanguageGUID0Sprache, die neuen Kontakten und Leads vorbelegt wird. Erwartet die Kennung (GUID) eines Sprachdatensatzes; 0 schaltet die Vorbelegung ab.
wysa_EstimatedRevenueSourceUserProvidedQuelle des voraussichtlichen Umsatzes einer Verkaufschance.
wysa_EstimatedMarginSourceUserProvided;OpportunityproductProvidedQuelle der voraussichtlichen Marge einer Verkaufschance.
wysa_WinQuoteAndOpportunityfalseLegt fest, ob mit dem Gewinnen eines Angebots auch die verknüpfte Verkaufschance gewonnen wird. Siehe Abschluss.

Quellen für Umsatz und Marge

wysa_EstimatedRevenueSource und wysa_EstimatedMarginSource sind unabhängig voneinander und erwarten dieselbe Schreibweise: eine mit Semikolon getrennte Liste erlaubter Quellen, von der niedrigsten zur höchsten Priorität.

WertBedeutung
UserProvidedNur manuelle Erfassung
UserProvided;OpportunityproductProvidedZusätzlich Berechnung aus den Verkaufschancenprodukten
UserProvided;OpportunityproductProvided;QuoteProvidedZusätzlich Vorrang für das führende Angebot

Ausgeliefert wird der Umsatz als reine Vertriebsschätzung (UserProvided), die Marge berechnet aus den Positionen. Details unter Beträge und Margen.

Kennung der Standardsprache ermitteln

wysa_DefaultLanguageGUID erwartet die GUID eines Sprachdatensatzes. Sie lässt sich ablesen, indem der gewünschte Eintrag — etwa „Deutsch" — in der Sprachtabelle geöffnet und die GUID aus der Adresszeile des Browsers übernommen wird.

Vorrangregel

Für jede Einstellung gilt dieselbe Rangfolge — der zuletzt genannte Wert gewinnt:

Standardwert  <  organisationsweite Einstellung  <  Einstellung je Anwendung

Damit lässt sich ein organisationsweites Verhalten festlegen und für einzelne Anwendungen gezielt abweichend definieren. Genutzt wird das etwa bei der Standardsprache: Ein international arbeitendes Team erhält eine andere Vorbelegung als ein rein deutschsprachiges.

Die Rangfolge gilt gleichermaßen für die Serverlogik und für die Formularlogik — beide lesen die Einstellungen auf demselben Weg. Ein Wert, der im Formular wirkt, wirkt auch serverseitig.

3.7 - Berechtigungen

Die mitgelieferten Sicherheitsrollen und wie sie zu den Standardrollen von Dynamics 365 Sales passen.

Diese Seite richtet sich an die IT-Administration. Die Rollen werden in der Power Platform zugewiesen.

Drei Rollen, ein Prinzip

dsyr.SalesCentral liefert drei Sicherheitsrollen mit. Zwei davon sind Ergänzungsrollen, eine ist für ein technisches Konto gedacht.

Die Rollen tragen noch den historischen Produktnamen SalesConnect — das ist dieselbe Lösung wie dsyr.SalesCentral, nur die Rollennamen wurden bei der Umbenennung nicht mitgezogen.

RolleFür wenCharakter
SalesConnect ReaderAnwender, die mit den Daten arbeiten, sie aber nicht pflegenErgänzungsrolle, überwiegend lesend
SalesConnect AdminKey-User und Administratoren, die die Stammdaten der Lösung pflegenErgänzungsrolle, schreibend
SalesConnect DataBridgeDas Dienstkonto der DatenübertragungEigenständige Rolle für die Schnittstelle

SalesConnect Reader

Die Rolle gibt lesenden Zugriff auf sämtliche Tabellen der Lösung: die Stammdaten aus Business Central, Abonnements und Abonnementzeilen, Leadquellen sowie Anreden, Titel und Sprachen. Dazu kommt Leserecht auf die App, die Weboberflächen-Bestandteile und die Organisationseinstellungen — nötig, damit Formularlogik und Konfiguration funktionieren.

Eine bewusste Ausnahme vom reinen Lesen: Externe Stakeholder dürfen angelegt, geändert und zugewiesen werden. Sie entstehen im Tagesgeschäft an der Verkaufschance und wären als reine Administratorenaufgabe unpraktikabel. Das Löschen ist auf eigene Datensätze beschränkt.

SalesConnect Admin

Die Rolle erweitert den Lesezugriff um volle Pflegerechte — Anlegen, Ändern, Löschen, Zuweisen und Freigeben — auf den Tabellen der Lösung:

  • Stammdaten aus Business Central: Verkäufer, Anreden, Positionen, Rabattgruppen, Länder, Sprachen
  • Abonnements und Abonnementzeilen
  • Leadquellen, externe Stakeholder
  • Anredevorlagen und Titel

Eine Einschränkung besteht beim Mandanten (BC): Er ist auch für Administratoren nur lesbar. Mandanten spiegeln die Buchungskreise in Business Central; sie dort und hier auseinanderlaufen zu lassen, hätte Folgen für jede Zuordnung.

SalesConnect DataBridge

Diese Rolle gehört dem Dienstkonto, mit dem die dsyr.DataBridge auf Customer Engagement zugreift — nicht einer natürlichen Person.

Anders als die beiden Ergänzungsrollen umfasst sie auch die Standardtabellen: Firma, Kontakt, Verkaufschance, Angebot und Produkt, jeweils mit vollem Zugriff auf Organisationsebene. Das ist erforderlich, weil die Übertragung Datensätze unabhängig von deren Besitzer anlegen, aktualisieren und zuordnen muss.

Zuweisung in der Praxis

PersonengruppeRollenkombination
VertriebsmitarbeiterStandardrolle „Vertriebsmitarbeiter" + SalesConnect Reader
VertriebsleitungStandardrolle „Vertriebsleiter" + SalesConnect Reader
Key-User der LösungStandardrolle + SalesConnect Admin
Dienstkonto der Übertragungausschließlich SalesConnect DataBridge

Reader und Admin schließen einander nicht aus; wird beides zugewiesen, gilt in Dynamics 365 die jeweils weitergehende Berechtigung.

3.8 - Meldungen

Fehlermeldungen der Lösung mit Ursache und Lösungsweg.

Die Regeln der Lösung laufen synchron: Wird eine Regel verletzt, bricht der Speichervorgang mit einer Meldung ab. Die folgende Übersicht erklärt, was dahintersteht.

Meldungen bei der Freigabe nach Business Central

„Die Änderung kann nicht durchgeführt werden, da die neue Firma noch nicht nach BC übertragen wurde."

Ursache — Ein für die Übertragung freigegebener Kontakt soll einer Firma zugeordnet werden, die in Business Central noch nicht existiert.

Lösung — Zunächst die Firma freigeben und die Übertragung abwarten. Sie ist abgeschlossen, sobald an der Firma die BC-Nummer gefüllt ist. Danach lässt sich der Kontakt umhängen. Alternativ die Freigabe des Kontakts vorübergehend zurücknehmen.

„Der Kontakt kann nicht geändert werden, da die neue Firma noch nicht nach BC übertragen wurde."

Ursache — Wie zuvor, ausgelöst beim Speichern des Kontakts.

Lösung — Übertragung der Firma abwarten, erkennbar an der gefüllten BC-Nummer.

„Eine Verkaufschance kann nicht ohne Kontakt nach BC übertragen werden."

Ursache — Eine Verkaufschance wurde freigegeben, es ist aber kein Kontakt hinterlegt. Business Central benötigt einen Ansprechpartner.

Lösung — Den zuständigen Kontakt an der Verkaufschance eintragen.

„Der Kontakt kann nicht geändert werden, da der neue Kontakt noch nicht nach BC übertragen wurde."

Ursache — Der an einer freigegebenen Verkaufschance gesetzte Kontakt existiert in Business Central noch nicht.

Lösung — Den Kontakt freigeben und die Übertragung abwarten; sie ist abgeschlossen, sobald die BC-Kontaktnummer gefüllt ist.

Meldungen zu Anrede und Sprache

„Value for gender has not found!"

Ursache — Zum gesetzten Geschlecht bzw. zum gemeldeten BC-Anredeschlüssel existiert keine Entsprechung. Meist fehlt ein Anrededatensatz für die betreffende Sprache oder das betreffende Geschlecht.

Lösung — Die Anredestammdaten prüfen: Gibt es für die Sprache des Kontakts eine Anrede zum gewählten Geschlecht? Fehlende Datensätze in Business Central ergänzen und übertragen lassen.

Meldungen zur Konfiguration

„Value of the setting wysa_DefaultLanguageGuid has to be a valid guid or ‘0’."

Ursache — Die Einstellung für die Standardsprache enthält einen ungültigen Wert.

Lösung — Entweder die Kennung eines vorhandenen Sprachdatensatzes eintragen oder 0 setzen, um die Vorbelegung abzuschalten. Siehe Konfiguration.

„Found more than 1 setting!"

Ursache — Eine Einstellung ist mehrfach hinterlegt, sodass nicht eindeutig ist, welcher Wert gilt.

Lösung — Die betroffene Einstellung in der Umgebung prüfen und den doppelten Eintrag entfernen. Eine Aufgabe für die IT-Administration.

4 - 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| BC6

Daraus ergeben sich vier grundsätzliche Muster:

MusterRichtungBeispieleCharakter
Referenz- und BelegdatenBC → CELänder, Sprachen, Verkäufer, Produkte, Angebote, AbonnementsBC ist führendes System, CE liest nur
GeschäftspartnerCE ⇄ BCFirma, Kontaktin beide Richtungen: CE legt an und ändert, BC liefert Nummern zurück und überträgt eigene Änderungen nach CE
VerkaufschancenCE → BCVerkaufschance, Verkaufschancen-Produktnur CE → BC; BC meldet lediglich die vergebene Nummer zurück (Response-Job), Änderungen in BC kommen nicht nach CE
LöschungenBC → CEalle *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)

OrderMappingJobRichtungQuelle (BC API Page)Ziel (CE Entity)FelderOpsLäuft
110BCCountriescountriesfrombcBC → CEacdcountryregionswysa_country40Zeitplan
115BCLanguageslanguagesfrombcBC → CEacdlanguageswysa_language30Zeitplan
120BCSalutationssalutationsfrombcBC → CEacdsalutationswysa_bcsalutation30Zeitplan
125BCCustomerDiscountGroupscustomerdiscountgroupsfrombcBC → CEacdcustomerdiscgroupswysa_bccustomerdiscountgroup30Zeitplan
130BCSalesPersonssalespersonsfrombcBC → CEacdsalespersonswysa_bcsalesperson, wysa_salesperson40Zeitplan
135BCPositionspositionsfrombcBC → CEacdorganizationallevelswysa_bcposition30Zeitplan
190BCOpportunityElementsopportunityelementsfrombcBC → CEacdopportunityelementsproduct103Zeitplan

Geschäftspartner und Verkaufschancen (CE → BC, mit Response)

OrderMappingJobRichtungQuelleZielFelderOpsLäuft
220CEAccountsaccountsnewfromceCE → BCaccountacdcontactscomp144Zeitplan
221BCAccountsResponseaccountsresponsefrombcBC → CEacdcontactscompaccount31per Response-Job
240CEContactscontactsnewfromceCE → BCcontactacdcontacts176Zeitplan
241BCContactsResponsecontactsresponsefrombcBC → CEacdcontactscontact92per Response-Job
260CEOpportunitiesopportunitiesnewfromceCE → BCopportunityacdopportunities84Zeitplan
261BCOpportunitiesResponseopportunitiesresponsefrombcBC → CEacdopportunities, acdcontactsopportunity31per Response-Job
520CEAccountUpdatesaccountupdatesfromceCE → BCaccountacdcontactscomp132Zeitplan
530CEContactsUpdatescontactupdatesfromceCE → BCcontactacdcontacts185Zeitplan
710CEOpportunityProductsopportunityproductsnewfromceCE → BCopportunityproductacdopportunitycalculationelements82Zeitplan
750CEOpportunityProductsUpdatesopportunityproductsupdatesfromceCE → BCopportunityproductacdopportunitycalculationelements62Zeitplan
760BCOpportunityProductsResponseopportunityproductsresponsefrombcBC → CEacdopportunitycalculationelementsopportunityproduct21per Response-Job

Geschäftspartner (BC → CE)

OrderMappingJobRichtungQuelleZielFelderOpsLäuft
410BCAccountsaccountsfrombcBC → CEacdcontactscompaccount185Zeitplan
430BCContactscontactsfrombcBC → CEacdcontactscontact186Zeitplan

Abonnements (BC → CE)

OrderMappingJobRichtungQuelleZielFelderOpsLäuft
550BCServiceObjectsserviceobjectsfrombcBC → CEserviceObjectswysa_bcserviceobject175Zeitplan
560BCServiceCommitmentsservicecommitmentsfrombcBC → CEserviceCommitmentswysa_bcserviceobjectcommitment274Zeitplan

Angebote (BC → CE)

OrderMappingJobRichtungQuelleZielFelderOpsLäuft
610BCSalesQuotessalesquotesfrombcBC → CEacdsalesheadersquote103Zeitplan
620BCSalesCalculationElementssalescalculationelementsfrombcBC → CEacdsalescalculationelementsquotedetail83Zeitplan
625BCSalesQuotesActivateactivatesalesquotesfrombcBC → CEacdlogentriesquote31Zeitplan

Löschungen (BC → CE, Quelle immer das Änderungsprotokoll acdlogentries)

OrderMappingJobZielVerhalten in CEFelderLäuft
420BCAccountsDeleteaccountsfrombcdeleteaccountdeaktivieren3Zeitplan
440BCContactsDeletecontactsfrombcdeletecontact, accountdeaktivieren3Zeitplan
450BCProductsDeleteproductsfrombcdeleteproductdeaktivieren3Zeitplan
621BCSalesCalculationElementsDeletesalescalculationelementsfrombcdeletequotedetaillöschen1Zeitplan
690BCSalesQuotesDeletesalesquotesfrombcdeletequoteschließen (Storniert)3Zeitplan

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:

OrderMappingSeite
110 – 135BCCountries, BCLanguages, BCSalutations, BCCustomerDiscountGroups, BCPositionsWertelisten aus BC
130BCSalesPersonsVerkäufer aus BC
450BCProductsDeleteProdukte deaktivieren

Vollständig dokumentiert sind bisher Firma und Kontakt:

SchrittFirmaKontakt
Aus BC übernehmenBCAccounts (410)BCContacts (430)
Neu nach BCCEAccounts (220)CEContacts (240)
Rückmeldung aus BCBCAccountsResponse (221)BCContactsResponse (241)
Änderungen nach BCCEAccountUpdates (520)CEContactsUpdates (530)
Löschung aus BCBCAccountsDelete (420)BCContactsDelete (440)

Das Angebot läuft ausschließlich von Business Central nach Customer Engagement und schließt damit den Kreis zur Verkaufschance:

SchrittAngebotskopfPositionen
Aus BC übernehmenBCSalesQuotes (610)BCSalesCalculationElements (620)
Statuswechsel aus BCBCSalesQuotesActivate (625)—
Löschung aus BCBCSalesQuotesDelete (690)BCSalesCalculationElementsDelete (621)

Das Abonnement ist ein eigenständiger Bereich, ebenfalls nur von Business Central nach Customer Engagement:

SchrittMapping
Abonnements aus BCBCServiceObjects (550)
Abonnementzeilen aus BCBCServiceCommitments (560)

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:

SchrittVerkaufschancePositionen
Stammdaten—BCOpportunityElements (190)
Neu nach BCCEOpportunities (260)CEOpportunityProducts (710)
Rückmeldung aus BCBCOpportunitiesResponse (261)BCOpportunityProductsResponse (760)
Änderungen nach BC—CEOpportunityProductsUpdates (750)
Löschung aus BC——

Aufbau einer Detailseite

Jede Schrittseite ist zweigeteilt: zuerst die fachliche Sicht, danach die technische.

  1. Steckbrief — Richtung, Takt, Betroffene, technische Zuordnung
  2. Was passiert hier? — der Vorgang in Prosa
  3. Welche Felder? — Feldtabelle mit Anzeigenamen beider Systeme
  4. Worauf zu achten ist — fachliche Besonderheiten und Stolperfallen
  5. 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.

4.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 &nbsp;(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 &nbsp;(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 &nbsp;(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 &amp; Abos &nbsp;(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 &nbsp;(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 --> S5

Muster 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 JobOrderResponse-JobOrder
accountsnewfromce220accountsresponsefrombc221
contactsnewfromce240contactsresponsefrombc241
opportunitiesnewfromce260opportunitiesresponsefrombc261
opportunityproductsnewfromce710opportunityproductsresponsefrombc760

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 --> Y

Diese 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:
VarianteJobsVerhalten in CE
Deaktivieren (kein Action-Feld)accountsfrombcdelete, contactsfrombcdelete, productsfrombcdeleteDas 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)salesquotesfrombcdeleteDas Mapping setzt statecode = 3 (Geschlossen) und statuscode = 6 (Storniert) — das Angebot bleibt erhalten
Löschen (Action = Delete)salescalculationelementsfrombcdeleteDie 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.

OrderJobBereichTakt
110countriesfrombcStammdaten — Länder2 Min
115languagesfrombcStammdaten — Sprachen2 Min
120salutationsfrombcStammdaten — Anreden2 Min
125customerdiscountgroupsfrombcStammdaten — Rabattgruppen2 Min
130salespersonsfrombcStammdaten — Verkäufer2 Min
135positionsfrombcStammdaten — Organisationsebenen2 Min
190opportunityelementsfrombcVerkaufschance — Kalkulationselemente2 Min
220accountsnewfromceFirma — neu nach BC2 Min
↳ 221accountsresponsefrombcFirma — Rückmeldungnach 220
240contactsnewfromceKontakt — neu nach BC2 Min
↳ 241contactsresponsefrombcKontakt — Rückmeldungnach 240
260opportunitiesnewfromceVerkaufschance — neu nach BC2 Min
↳ 261opportunitiesresponsefrombcVerkaufschance — Rückmeldungnach 260
410accountsfrombcFirma — aus BC2 Min
420accountsfrombcdeleteFirma — Löschung2 Min
430contactsfrombcKontakt — aus BC2 Min
440contactsfrombcdeleteKontakt — Löschung2 Min
450productsfrombcdeleteStammdaten — Produkte deaktivieren2 Min
520accountupdatesfromceFirma — Änderungen nach BC2 Min
530contactupdatesfromceKontakt — Änderungen nach BC2 Min
550serviceobjectsfrombcAbonnement — Abonnements2 Min
560servicecommitmentsfrombcAbonnement — Zeilen2 Min
610salesquotesfrombcAngebot — Angebote aus BC2 Min
620salescalculationelementsfrombcAngebot — Positionen aus BC2 Min
621salescalculationelementsfrombcdeleteAngebot — Positionen löschen2 Min
625activatesalesquotesfrombcAngebot — gewonnene Angebote3 Min
690salesquotesfrombcdeleteAngebot — Angebote stornieren2 Min
710opportunityproductsnewfromceVerkaufschance — Positionen neu3 Min
750opportunityproductsupdatesfromceVerkaufschance — Positionen ändern3 Min
↳ 760opportunityproductsresponsefrombcVerkaufschance — Rückmeldungnach 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"]
  end

Die 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:

JobBraucht Vorarbeit vonKonsequenz
710 · Positionen neu nach BC190 (Kalkulationselemente) und 260 / 261 (Verkaufschance)läuft in einem eigenen Tick — die Vorarbeit stammt aus einem früheren Durchlauf
750 · Positionen ändern710, 760läuft im selben Tick wie 710, hier gilt die Ordnungsnummer
625 · gewonnene Angebote610 (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.

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.

OperationRichtungWas sie tutWo sie vorkommt
LookupBC → CEmacht aus einem BC-Kürzel eine Dataverse-Verknüpfungüberall in den BC→CE-Mappings
LookupValueCE → BClöst eine Dataverse-Verknüpfung zum BC-Kürzel aufüberall in den CE→BC-Mappings
DefaultValuebeideschreibt einen festen Wert ohne QuellfeldFreigaben, Statuswerte, Kontaktarten, feste GUIDs
ReadFromMessageBC → CEliest einen Wert aus der Antwortnachricht statt aus einer Tabellealle vier Response-Jobs
OptionMappingBC → CEübersetzt einen BC-Textwert in einen Dataverse-Auswahlwertnur BCServiceCommitments
LinkToRecordCE → BCbaut aus der Datensatz-GUID einen aufrufbaren Deep Linknur CEOpportunities
SetNullIfEqualsValueOfFieldBC → CEParameter von Lookup: leert die Referenz bei Selbstbezugnur 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.

4.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.

OrderWas kommt anWird gebraucht für
110LänderFirma, Kontakt
115SprachenKontakt
120AnredenKontakt
125DebitorrabattgruppenFirma
130VerkäuferFirma, Kontakt, Verkaufschance, Angebot
135OrganisationsebenenKontakt
190KalkulationselementeVerkaufschance, Angebot
450Löschung von ProduktenProdukt

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"| B1

Alle Stammdaten-Jobs laufen im selben Zwei-Minuten-Takt wie die Belegketten, aber mit niedrigerer Ordnungsnummer — sie sind innerhalb eines Durchlaufs also immer zuerst dran.

Alle Abgleiche folgen demselben Muster

Die sechs Wertelisten-Jobs sind bemerkenswert einheitlich aufgebaut:

Richtungimmer Business Central → Customer Engagement
Taktimmer alle 2 Minuten
Abgrenzungimmer über den Änderungszeitstempel lastModifiedDateTime
Erkennungsmerkmalimmer die BC System-ID
Felderdrei bis vier: System-ID, Kürzel, Bezeichnung
Löschverarbeitungkeine — 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ürzelWertelisten
wysa_bccodeLänder, Sprachen, Debitorrabattgruppen
wysa_codeAnreden, 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 BelegketteNachschlagefeld
Landwysa_bccode
Sprachewysa_bccode
Debitorrabattgruppewysa_bccode
Anrede (BC)wysa_code
Verkäufer (BC)wysa_code
Position (BC)wysa_code

Was nicht abgeglichen wird

Nicht jede Tabelle des Datenmodells hat einen Abgleich. Diese hier werden von keinem aktiven Job gefüllt:

TabelleAnzeigenameZustand
wysa_bcClientMandant (BC)kein Job vorhanden — wird manuell gepflegt
wysa_bcProducerHersteller (BC)kein Abgleich — bleibt am Produkt leer
wysa_bcProductCategoryProduktkategorie (BC)kein Abgleich — bleibt am Produkt leer
productProduktkeine Artikel aus BC — nur Kalkulationselemente, siehe unten
wysa_titleTitelkein Abgleich — reine CE-Stammdaten
wysa_salutationAnredevorlagekein 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

Technische Zuordnung

Jobs und Mappings
OrderJobMappingZieltabelleFelder
110countriesfrombcBCCountrieswysa_country4
115languagesfrombcBCLanguageswysa_language3
120salutationsfrombcBCSalutationswysa_bcsalutation3
125customerdiscountgroupsfrombcBCCustomerDiscountGroupswysa_bccustomerdiscountgroup3
130salespersonsfrombcBCSalesPersonswysa_bcsalesperson, wysa_salesperson4
135positionsfrombcBCPositionswysa_bcposition3
190opportunityelementsfrombcBCOpportunityElementsproduct10
450productsfrombcdeleteBCProductsDeleteproduct3

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.

4.2.1 - Wertelisten aus Business Central übernehmen

Länder, Sprachen, Anreden, Debitorrabattgruppen und Organisationsebenen kommen aus dem ERP nach Customer Engagement.
RichtungBusiness Central → Customer Engagement
Wannalle 2 Minuten
Betrifftfünf Wertelisten, je ein eigener Abgleich
TechnischJobs 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 CentralFeld in Customer Engagement
idBC System-ID
CodeBC Code
NameName
ISO-CodeISO 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.

Sprachen

Job languagesfrombc (115) · Zieltabelle Sprache (wysa_language)

Feld in Business CentralFeld in Customer Engagement
idBC System-ID
CodeBC Code
NameName

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 CentralFeld in Customer Engagement
idBC System-ID
CodeCode
BeschreibungName

Gebraucht wird die Liste für das Feld Anrede (BC) am Kontakt.

Debitorrabattgruppen

Job customerdiscountgroupsfrombc (125) · Zieltabelle Debitorrabattgruppe (BC) (wysa_bccustomerdiscountgroup)

Feld in Business CentralFeld in Customer Engagement
idBC System-ID
CodeBC Code
BeschreibungName

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 CentralFeld in Customer Engagement
idBC System-ID
CodeCode
BeschreibungName

Gebraucht wird die Liste für das Feld Position (BC) am Kontakt und am Lead — die Entscheidungsebene eines Ansprechpartners.

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:

WertelisteTechnische Seite
LänderTechnisches Mapping → countriesfrombc
SprachenTechnisches Mapping → languagesfrombc
AnredenTechnisches Mapping → salutationsfrombc
DebitorrabattgruppenTechnisches Mapping → customerdiscountgroupsfrombc
OrganisationsebenenTechnisches Mapping → positionsfrombc

4.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.
RichtungBusiness Central → Customer Engagement
Wannalle 2 Minuten
Betrifftdie Verkäufer aus BC
TechnischJob 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.

AuflösungRichtung
FirmaBC → CE und CE → BC
Kontaktnur CE → BC
Verkaufschancenur CE → BC
Angebotnur BC → CE

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.

Welche Felder kommen an?

Feld in Business CentralFeld in Customer Engagement
idBC System-ID
CodeCode
E-MailE-Mail
AnzeigenameName

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.

4.2.3 - Produkte deaktivieren

In Business Central gelöschte Artikel werden in Customer Engagement inaktiv gesetzt.
RichtungBusiness Central → Customer Engagement
Wannalle 2 Minuten
BetrifftArtikel, die in BC gelöscht wurden
TechnischJob 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

FeldWert danach
StatusInaktiv
StatusgrundInaktiv (Dataverse-Standardwert)

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.

4.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:

SchrittWas passiertWann
Aus BC übernehmenBC-Firmen kommen nach CEalle 2 Minuten
Neu nach BCin CE angelegte, freigegebene Firmen werden in BC angelegtalle 2 Minuten
Rückmeldung aus BCBC meldet Nummer und Id zurückdirekt nach der Anlage
Änderungen nach BCÄnderungen in CE gehen nach BCalle 2 Minuten
Löschung aus BCin BC gelöschte Firmen werden in CE deaktiviertalle 2 Minuten

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 …BedeutungEs greift
leerBC kennt die Firma noch nichtNeu nach BC — die Firma wird angelegt
gefülltBC 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 CEAus BC übernehmenNeu 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

Technische Zuordnung

Jobs und Mappings dieser Kette
OrderJobMappingSeite
220accountsnewfromceCEAccountsNeu nach BC
221accountsresponsefrombcBCAccountsResponseRückmeldung aus BC
410accountsfrombcBCAccountsAus BC übernehmen
420accountsfrombcdeleteBCAccountsDeleteLöschung aus BC
520accountupdatesfromceCEAccountUpdatesÄnderungen nach BC

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:

SchrittSchlüssel im ZielTyp
Aus BC übernehmenwysa_bccontactnumber ← BC numberCustomKey wysa_bccodekey
Neu nach BCBC dataverseId ← CE accountidFilter
Rückmeldung aus BCCE accountid aus der AntwortnachrichtPrimaryKey
Änderungen nach BCBC id ← CE wysa_bcsystemidId
Löschung aus BCwysa_bcsystemid ← Log recordIdCustomKey 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)
RichtungOperationWirkung
BC → CELookupBC-Code (z. B. DE) wird zur Dataverse-Referenz auf wysa_country
CE → BCLookupValueDataverse-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.

4.3.1 - Firmen aus Business Central übernehmen

Neue und geänderte Firmen aus dem ERP erscheinen in Customer Engagement.
RichtungBusiness Central → Customer Engagement
Wannalle 2 Minuten
Betrifftalle Firmenkontakte, die in BC seit dem letzten Lauf geändert wurden
TechnischJob 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 CentralFeld in Customer EngagementAnmerkung
Nr.BC KontaktnummerErkennungsmerkmal — verbindet beide Systeme
idBC System-IDtechnischer Schlüssel des ERP
NameName 1 (BC)nicht das Feld Firmenname — siehe unten
Name 2Name 2 (BC)
AdresseStraße 1
Adresse 2Straße 2
PLZPostleitzahl
OrtOrt
Länder-/RegionscodeLandwird zur Verknüpfung auf die Länderliste aufgelöst
Telefonnr.Telefon
E-MailE-Mail
HomepageWebsite
Debitor Nr.BC Debitorennummernur aus BC — CE ändert das nie
Kreditor Nr.BC Kreditorennummernur aus BC
DebitorrabattgruppeDebitorrabattgruppenur aus BC, als Verknüpfung
VerkäufercodeVerkäufer (BC)wird zur Verknüpfung auf den Verkäufer aufgelöst
UnternehmensnameÜbergeordnete Firmaals Verknüpfung, siehe unten
—Sync zu BCwird 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.

4.3.2 - Neue Firmen nach Business Central übertragen

In Customer Engagement angelegte und freigegebene Firmen werden im ERP angelegt.
RichtungCustomer Engagement → Business Central
Wannalle 2 Minuten
BetrifftFirmen, die freigegeben sind und in BC noch nicht existieren
TechnischJob 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:

  1. Sync zu BC steht auf „Ja"
  2. 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 EngagementFeld in Business CentralAnmerkung
Name 1 (BC)Namenicht das Feld Firmenname
Name 2 (BC)Name 2
Straße 1Adresse
Straße 2Adresse 2
PostleitzahlPLZ
OrtOrt
LandLänder-/Regionscodedie Verknüpfung wird zum BC-Kürzel aufgelöst
TelefonTelefonnr.
E-MailE-Mail
WebsiteHomepage
Verkäufer (BC)Verkäufercodedie Verknüpfung wird zum BC-Kürzel aufgelöst
(Firma-Datensatz)Dataverse Idtechnische Klammer, siehe unten
—Kontaktartfest auf „Company"
—Anredecodefest 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.

4.3.3 - Rückmeldung aus Business Central

Nach der Anlage im ERP kommen Kontaktnummer und BC System-ID zurück nach Customer Engagement.
RichtungBusiness Central → Customer Engagement
Wannunmittelbar nach jeder Neuanlage — kein eigener Zeitplan
Betrifftgenau die Firmen, die gerade in BC angelegt wurden
TechnischJob 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:

vorhernachher
BC Kontaktnummerleergefüllt
BC System-IDleergefüllt
Zuständig für ÜbertragungenNeu nach BCÄnderungen nach BC
Kontakte dieser Firmadürfen nicht freigegeben werdendü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 CentralFeld in Customer Engagement
Nr.BC Kontaktnummer
idBC 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.

4.3.4 - Änderungen nach Business Central übertragen

Änderungen an bereits im ERP bekannten Firmen werden von Customer Engagement nach Business Central übertragen.
RichtungCustomer Engagement → Business Central
Wannalle 2 Minuten
Betrifftfreigegebene Firmen, die in BC bereits existieren
TechnischJob 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:

  1. Sync zu BC steht auf „Ja"
  2. 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 EngagementFeld in Business Central
Name 1 (BC)Name
Name 2 (BC)Name 2
Straße 1Adresse
Straße 2Adresse 2
PostleitzahlPLZ
OrtOrt
LandLänder-/Regionscode
TelefonTelefonnr.
E-MailE-Mail
WebsiteHomepage
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.

Technische Details

Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und Transformationen steht unter Technisches Mapping → accountupdatesfromce.

4.3.5 - Löschung in Business Central nachvollziehen

Wird eine Firma im ERP gelöscht, wird sie in Customer Engagement deaktiviert — nicht gelöscht.
RichtungBusiness Central → Customer Engagement
Wannalle 2 Minuten
BetrifftFirmen, die in BC gelöscht wurden
TechnischJob 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

FeldWert danach
StatusInaktiv
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

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.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.

SchrittWas passiertWann
Aus BC übernehmenBC-Kontakte kommen nach CEalle 2 Minuten
Neu nach BCin CE angelegte, freigegebene Kontakte werden in BC angelegtalle 2 Minuten
Rückmeldung aus BCBC meldet Nummer, Id und Adressdaten zurückdirekt nach der Anlage
Änderungen nach BCÄnderungen in CE gehen nach BCalle 2 Minuten
Löschung aus BCin BC gelöschte Kontakte werden in CE deaktiviertalle 2 Minuten

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:

Feld ist …BedeutungEs greift
leerBC kennt den Kontakt noch nichtNeu nach BC
gefülltBC kennt den KontaktÄnderungen nach BC

Beide setzen zusätzlich die Freigabe über Sync zu BC voraus.

Welche Felder laufen in welche Richtung?

Feld in CEAus BC übernehmenNeu 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

FeldRichtungKonsequenz
Position (BC) — die Organisationsebene aus BCnur BC → CEEine Änderung in CE geht nicht nach BC und wird beim nächsten Abgleich überschrieben
Verkäufer (BC)nur CE → BCDer in BC hinterlegte Verkäufer wird beim Übernehmen nicht nach CE geholt

Was in der Praxis zu beachten ist

Unterschiede zur Firma auf einen Blick

FirmaKontakt
Kontaktart in BCCompanyPerson
Übergeordnete Firmanur BC → CEbidirektional
NameName 1 / Name 2 (BC), Firmenname bleibt unberührtVorname / Zweiter Vorname / Nachname, Standardfelder
Rückmeldung aus BC2 Felder (Nummer, Id)9 Felder — zusätzlich Adressdaten
Freigabe abhängig von—BC System-ID der Firma
Anredefester Vorgabewert MANDANTVerweis auf die BC-Anredeschlüssel

Technische Zuordnung

Jobs und Mappings dieser Kette
OrderJobMappingSeite
240contactsnewfromceCEContactsNeu nach BC
241contactsresponsefrombcBCContactsResponseRückmeldung aus BC
430contactsfrombcBCContactsAus BC übernehmen
440contactsfrombcdeleteBCContactsDeleteLöschung aus BC
530contactupdatesfromceCEContactsUpdatesÄnderungen nach BC

Beteiligte Tabellen: Dataverse contact ⇄ BC API Page singhammerITConsulting/dyce/v2.0/acdcontacts; Löschungen über singhammerITConsulting/dyce/v2.0/acdlogentries.

Schlüssel je Schritt
SchrittSchlüssel im ZielTyp
Aus BC übernehmenwysa_bccontactnumber ← BC numberCustomKey wysa_bccodekey
Neu nach BCBC dataverseId ← CE contactidFilter
Rückmeldung aus BCCE contactid aus der AntwortnachrichtPrimaryKey
Änderungen nach BCBC id ← CE wysa_bcsystemidId
Löschung aus BCwysa_bcsystemid ← Log recordIdCustomKey wysa_bcsystemidkey

Identisch zur Firma.

Auflösung von Referenzen

Der Kontakt löst mehr Referenzen auf als die Firma — fünf statt drei:

CE-FeldWertelisteCodefeldStammdaten-Job
Land (wysa_address1_countryid)wysa_countrywysa_bccodecountriesfrombc (110)
Sprache (wysa_language)wysa_languagewysa_bccodelanguagesfrombc (115)
Anrede BC (wysa_salutationbcid)wysa_bcsalutationwysa_codesalutationsfrombc (120)
Verkäufer BC (wysa_bcsalespersonid)wysa_bcsalespersonwysa_codesalespersonsfrombc (130)
Position BC (wysa_bcpositionid)wysa_bcpositionwysa_codepositionsfrombc (135)
Firma (parentcustomerid)accountwysa_bccontactnumber—

Die Stammdaten-Jobs 110 – 135 laufen vor den Kontakt-Jobs (240 / 430), sodass die Wertelisten innerhalb desselben Laufs aktuell sind.

4.4.1 - Kontakte aus Business Central übernehmen

Neue und geänderte Kontakte aus dem ERP erscheinen in Customer Engagement.
RichtungBusiness Central → Customer Engagement
Wannalle 2 Minuten
Betrifftalle Kontakte, die in BC seit dem letzten Lauf geändert wurden
TechnischJob 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 CentralFeld in Customer EngagementAnmerkung
Nr.BC KontaktnummerErkennungsmerkmal — verbindet beide Systeme
idBC System-IDtechnischer Schlüssel des ERP
VornameVorname
Zweiter VornameZweiter Vorname
NachnameNachname
AnredecodeAnrede (BC)wird zur Verknüpfung auf die BC-Anredeschlüssel aufgelöst
SprachcodeSprachewird zur Verknüpfung auf die Sprachliste aufgelöst
OrganisationsebenePosition (BC)wird zur Verknüpfung aufgelöst — nur aus BC
UnternehmensnameFirmenname (übergeordnete Firma)wird über die BC Kontaktnummer der Firma aufgelöst
AdresseStraße 1
Adresse 2Straße 2
PLZPostleitzahl
OrtOrt
Länder-/RegionscodeLandwird zur Verknüpfung auf die Länderliste aufgelöst
Telefonnr.Geschäftlich (Telefon)
Mobiltelefonnr.Mobiltelefon
E-MailE-Mail
—Sync zu BCwird 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.4.2 - Neue Kontakte nach Business Central übertragen

In Customer Engagement angelegte und freigegebene Kontakte werden im ERP angelegt.
RichtungCustomer Engagement → Business Central
Wannalle 2 Minuten
BetrifftKontakte, die freigegeben sind und in BC noch nicht existieren
TechnischJob 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:

  1. Sync zu BC steht auf „Ja"
  2. 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 EngagementFeld in Business CentralAnmerkung
VornameVorname
Zweiter VornameZweiter Vorname
NachnameNachname
Anrede (BC)Anredecodedie Verknüpfung wird zum BC-Kürzel aufgelöst
SpracheSprachcodedie Verknüpfung wird zum BC-Kürzel aufgelöst
Firmenname (übergeordnete Firma)Unternehmensnamewird zur BC Kontaktnummer der Firma aufgelöst
Verkäufer (BC)Verkäufercodedie Verknüpfung wird zum BC-Kürzel aufgelöst
Straße 1Adresse
Straße 2Adresse 2
PostleitzahlPLZ
OrtOrt
LandLänder-/Regionscodedie Verknüpfung wird zum BC-Kürzel aufgelöst
Geschäftlich (Telefon)Telefonnr.
MobiltelefonMobiltelefonnr.
E-MailE-Mail
(Kontakt-Datensatz)Dataverse Idtechnische Klammer
—Kontaktartfest 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.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.
RichtungBusiness Central → Customer Engagement
Wannunmittelbar nach jeder Neuanlage — kein eigener Zeitplan
Betrifftgenau die Kontakte, die gerade in BC angelegt wurden
TechnischJob 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 CentralFeld in Customer Engagement
Nr.BC Kontaktnummer
idBC System-ID
AdresseStraße 1
Adresse 2Straße 2
PLZPostleitzahl
OrtOrt
Länder-/RegionscodeLand
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:

vorhernachher
BC Kontaktnummerleergefüllt
BC System-IDleergefüllt
Zuständig für ÜbertragungenNeu nach BCÄnderungen nach BC

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.4 - Änderungen nach Business Central übertragen

Änderungen an bereits im ERP bekannten Kontakten werden von Customer Engagement nach Business Central übertragen.
RichtungCustomer Engagement → Business Central
Wannalle 2 Minuten
Betrifftfreigegebene Kontakte, die in BC bereits existieren
TechnischJob 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:

  1. Sync zu BC steht auf „Ja"
  2. 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 EngagementFeld in Business Central
VornameVorname
Zweiter VornameZweiter Vorname
NachnameNachname
Anrede (BC)Anredecode
SpracheSprachcode
Firmenname (übergeordnete Firma)Unternehmensname
Verkäufer (BC)Verkäufercode
Straße 1Adresse
Straße 2Adresse 2
PostleitzahlPLZ
OrtOrt
LandLänder-/Regionscode
Geschäftlich (Telefon)Telefonnr.
MobiltelefonMobiltelefonnr.
E-MailE-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.

Technische Details

Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und Transformationen steht unter Technisches Mapping → contactupdatesfromce.

4.4.5 - Löschung in Business Central nachvollziehen

Wird ein Kontakt im ERP gelöscht, wird er in Customer Engagement deaktiviert — nicht gelöscht.
RichtungBusiness Central → Customer Engagement
Wannalle 2 Minuten
BetrifftKontakte, die in BC gelöscht wurden
TechnischJob 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

FeldWert danach
StatusInaktiv
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.

4.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.

SchrittWas passiertWann
Neu nach BCfreigegebene Verkaufschancen werden in BC angelegtalle 2 Minuten
Rückmeldung aus BCBC meldet Verkaufschancennummer und System-ID zurückdirekt nach der Anlage
Kalkulationselemente aus BCdie in Positionen verwendbaren Elemente kommen nach CEalle 2 Minuten
Positionen neu nach BCfreigegebene Positionen werden in BC angelegtalle 3 Minuten
Rückmeldung PositionenBC meldet die System-ID der Position zurückdirekt nach der Anlage
Positionsänderungen nach BCÄnderungen an Positionen gehen nach BCalle 3 Minuten

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"| G

Erst 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:

FreizugebenVoraussetzung
KontaktBC System-ID der Firma ist gefüllt
VerkaufschanceBC 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

Zwei Freigabefelder mit unterschiedlichem Namen

Verkaufschance und Position tragen jeweils ein eigenes Feld Sync zu BC — technisch sind es aber zwei verschieden benannte Felder:

DatensatzAnzeigenameLogical Name
VerkaufschanceSync zu BCwysa_sync2bc
VerkaufschancenproduktSync zu BCwysa_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 EngagementFeld in Business Central
ThemaBeschreibung
BeschreibungErweiterte Beschreibung
Voraussichtliches AbschlussdatumErwartetes Abschlussdatum
Voraussichtlicher UmsatzErwarteter Umsatz
FirmaUnternehmensnummer des Kontakts
KontaktKontaktnummer
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.

Position

Feld in Customer EngagementFeld in Business CentralNeu nach BCÄnderungen nach BC
VerkaufschanceVerkaufschancennummer✓✓
ProduktElementcode✓✓
MengeMenge✓✓
BC BetragBetrag (LW)✓✓
BC Betrag inkl. MwSt.Betrag inkl. MwSt. (LW)✓✓
BeschreibungBeschreibung✓✓
MargeDeckungsbeitrag (LW)✓✓

Beide Schritte übertragen denselben Feldsatz; auch Beschreibung und Marge gehen bei späteren Änderungen mit nach BC.

Unterschiede zu Firma und Kontakt

Firma / KontaktVerkaufschancePosition
Richtungbidirektionalnur CE → BCnur CE → BC
Übernahme aus BC✓––
Änderungspfad✓–✓
Löschverarbeitung✓ deaktivieren––
Taktalle 2 Minutenalle 2 Minutenalle 3 Minuten
Freigabefeldwysa_sync2bcwysa_sync2bcwysa_SynctoBC

Technische Zuordnung

Jobs und Mappings dieser Ketten
OrderJobMappingSeite
190opportunityelementsfrombcBCOpportunityElementsKalkulationselemente aus BC
260opportunitiesnewfromceCEOpportunitiesNeu nach BC
261opportunitiesresponsefrombcBCOpportunitiesResponseRückmeldung aus BC
710opportunityproductsnewfromceCEOpportunityProductsPositionen neu nach BC
750opportunityproductsupdatesfromceCEOpportunityProductsUpdatesPositionsänderungen nach BC
760opportunityproductsresponsefrombcBCOpportunityProductsResponseRückmeldung Positionen

Beteiligte Tabellen:

DataverseBusiness Central API Page
opportunity.../acdopportunities
opportunityproduct.../acdopportunitycalculationelements
product.../acdopportunityelements

Alle API Pages unter singhammerITConsulting/dyce/v2.0/.

Schlüssel je Schritt
SchrittSchlüssel im ZielTyp
Neu nach BCBC dataverseId ← CE opportunityidFilter
Rückmeldung aus BCCE opportunityid aus der AntwortnachrichtPrimaryKey
Kalkulationselemente aus BCwysa_bccode ← BC codeCustomKey
Positionen neu nach BCBC systemId ← CE wysa_bcsystemidId
Rückmeldung PositionenCE opportunityproductid aus der AntwortnachrichtPrimaryKey
Positionsänderungen nach BCBC id ← CE wysa_bcsystemidId

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-FeldNachschlagetabelleNachschlagefeld
Firma (parentaccountid)accountwysa_bccontactnumber
Kontakt (parentcontactid)contactwysa_bccontactnumber
Verkäufer BC (wysa_bcsalespersonid)wysa_bcsalespersonwysa_code
Verkaufschance (opportunityid)opportunitywysa_bcopportunitynumber
Produkt (productid)productwysa_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.

4.5.1 - Neue Verkaufschancen nach Business Central übertragen

In Customer Engagement angelegte und freigegebene Verkaufschancen werden im ERP angelegt.
RichtungCustomer Engagement → Business Central
Wannalle 2 Minuten
BetrifftVerkaufschancen, die freigegeben sind und in BC noch nicht existieren
TechnischJob 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:

  1. Sync zu BC steht auf „Ja"
  2. 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 EngagementFeld in Business CentralAnmerkung
ThemaBeschreibungder Titel der Verkaufschance
BeschreibungErweiterte Beschreibungder Freitext der Verkaufschance
Voraussichtliches AbschlussdatumErwartetes Abschlussdatum
Voraussichtlicher UmsatzErwarteter Umsatzin CE je nach Konfiguration berechnet
FirmaUnternehmensnummer des Kontaktswird zur BC Kontaktnummer der Firma aufgelöst
KontaktKontaktnummerwird zur BC Kontaktnummer des Kontakts aufgelöst
Verkäufer (BC)Verkäufercodewird zum BC-Kürzel aufgelöst
(der CE-Datensatz selbst)Dynamics-Sales-Linkklickbarer Link zurück ins CRM
(der CE-Datensatz selbst)Dataverse Idtechnische 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

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.

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.

4.5.2 - Rückmeldung aus Business Central

Nach der Anlage im ERP kommen Verkaufschancennummer und BC System-ID zurück nach Customer Engagement.
RichtungBusiness Central → Customer Engagement
Wannunmittelbar nach jeder Neuanlage — kein eigener Zeitplan
Betrifftgenau die Verkaufschancen, die gerade in BC angelegt wurden
TechnischJob 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 CentralFeld in Customer Engagement
Nr.BC Verkaufschancennummer
idBC 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.

vorhernachher
BC Verkaufschancennummerleergefüllt
BC System-IDleergefüllt
Positionenkönnen nicht übertragen werdenkö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.

4.5.3 - Kalkulationselemente aus Business Central übernehmen

Die Bausteine, aus denen eine Verkaufschance kalkuliert wird, kommen als Produkte nach Customer Engagement.
RichtungBusiness Central → Customer Engagement
Wannalle 2 Minuten
Betrifftdie Verkaufschancen-Elemente aus BC
TechnischJob 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.

Welche Felder kommen an?

Feld in Business CentralFeld in Customer EngagementAnmerkung
CodeBC CodeErkennungsmerkmal — verbindet beide Systeme
systemIdBC System-IDtechnischer Schlüssel des ERP
BeschreibungBeschreibungBezeichnung des Elements
Dimension 1 CodeBC Dimension 1 Codebuchhalterische Dimension
Dimension 1 WertBC Dimension 1 Wert
Dimension 2 CodeBC Dimension 2 Code
Dimension 2 WertBC Dimension 2 Wert
—Standardeinheitfester Vorgabewert
—Einheitengruppefester Vorgabewert
—Produktstrukturfest 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.

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.

4.5.4 - Neue Positionen nach Business Central übertragen

Freigegebene Verkaufschancenpositionen werden als Kalkulationszeilen im ERP angelegt.
RichtungCustomer Engagement → Business Central
Wannalle 3 Minuten
BetrifftPositionen, die freigegeben sind und in BC noch nicht existieren
TechnischJob 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:

  1. Sync zu BC an der Position steht auf „Ja"
  2. 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
WertKommt vonGefüllt durch
Verkaufschancennummerder VerkaufschanceRückmeldung aus BC (261)
Elementcodedem verknüpften ProduktKalkulationselemente aus BC (190)

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 EngagementFeld in Business CentralAnmerkung
VerkaufschanceVerkaufschancennummerwird zur BC Verkaufschancennummer aufgelöst
ProduktElementcodewird zum BC Code des Elements aufgelöst
MengeMenge
BeschreibungBeschreibung
BC BetragBetrag (LW)Nettobetrag der Position
BC Betrag inkl. MwSt.Betrag inkl. MwSt. (LW)Bruttobetrag
MargeDeckungsbeitrag (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.

4.5.5 - Rückmeldung der Positionen aus Business Central

Nach der Anlage der Kalkulationszeile meldet BC deren System-ID zurück.
RichtungBusiness Central → Customer Engagement
Wannunmittelbar nach jeder Neuanlage einer Position — kein eigener Zeitplan
Betrifftgenau die Positionen, die gerade in BC angelegt wurden
TechnischJob 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 CentralFeld in Customer Engagement
systemIdBC 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:

vorhernachher
BC System-ID der Positionleergefüllt
ZuständigPositionen neu nach BC (710)Positionsänderungen nach BC (750)

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.

OrderJobRolle
710opportunityproductsnewfromcePositionen anlegen
750opportunityproductsupdatesfromcePositionen ändern
760opportunityproductsresponsefrombcSystem-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.

4.5.6 - Positionsänderungen nach Business Central übertragen

Änderungen an bereits im ERP bekannten Verkaufschancenpositionen gehen nach Business Central.
RichtungCustomer Engagement → Business Central
Wannalle 3 Minuten
Betrifftfreigegebene Positionen, die in BC bereits existieren
TechnischJob 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:

  1. Sync zu BC an der Position steht auf „Ja"
  2. 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 EngagementFeld in Business Central
VerkaufschanceVerkaufschancennummer
ProduktElementcode
MengeMenge
BeschreibungBeschreibung
BC BetragBetrag (LW)
BC Betrag inkl. MwSt.Betrag inkl. MwSt. (LW)
MargeDeckungsbeitrag (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.

Technische Details

Die vollständige technische Mapping-Tabelle mit Feldzuordnungen, Key-Auflösung und Transformationen steht unter Technisches Mapping → opportunityproductsupdatesfromce.

4.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
SchrittWas passiertWann
Angebote aus BCAngebotsköpfe kommen nach CEalle 2 Minuten
Positionen aus BCdie Kalkulationszeilen kommen nach CEalle 2 Minuten
Gewonnene Angebote aus BCin BC beauftragte Angebote werden in CE gewonnenalle 3 Minuten
Positionen löschenin BC gelöschte Positionen werden in CE gelöschtalle 2 Minuten
Angebote stornierenin BC gelöschte Angebote werden in CE geschlossen (Storniert)alle 2 Minuten

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:

DatenbereichVerhalten bei Löschung in BC
Firma, Kontakt, Produktdeaktivieren (Status Inaktiv)
Angebotschließen (Status Geschlossen, Statusgrund Storniert)
Angebotspositionlö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)"]
ZuordnungAufgelöst überVoraussetzung
VerkaufschanceBC Verkaufschancennummerdie Verkaufschance wurde nach BC übertragen und zurückgemeldet
FirmaBC Kontaktnummerdie Firma wurde nach BC übertragen und hat ihre Kontaktnummer zurückgemeldet
Verkäufer (BC)VerkäufercodeStammdaten-Job 130 ist gelaufen

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 CentralFeld in Customer Engagement
Nr.Angebotsnummer
idBC System-ID
BuchungsbeschreibungName
VerkaufschancennummerVerkaufschance
Verkauf an Unternehmenskontaktnr.Kunde
VerkäufercodeVerkäufer (BC)
AuftragsdatumGültig ab
Angebot gültig bisGültig bis
Betrag inkl. MwSt.BC Gesamtbetrag inkl. MwSt.
StatusBC Status

Angebotsposition

Feld in Business CentralFeld in Customer Engagement
systemIdBC System-ID
BelegnummerAngebot
ElementcodeProdukt
BeschreibungBeschreibung
MengeMenge
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:

FeldWoher es kommt
BC Gesamtbetrag (netto)aus den Positionen aufsummiert
Margeaus den Zeilenmargen aufsummiert
Angebotsklassifizierungbeim Anlegen in CE bestimmt (Erst- oder weiteres Angebot)
Archivierte VersionenStandard-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
OrderJobMappingSeite
610salesquotesfrombcBCSalesQuotesAngebote aus BC
620salescalculationelementsfrombcBCSalesCalculationElementsPositionen aus BC
621salescalculationelementsfrombcdeleteBCSalesCalculationElementsDeletePositionen löschen
625activatesalesquotesfrombcBCSalesQuotesActivateGewonnene Angebote aus BC
690salesquotesfrombcdeleteBCSalesQuotesDeleteAngebote stornieren

Beteiligte Tabellen:

Business Central API PageDataverse
.../acdsalesheadersquote
.../acdsalescalculationelementsquotedetail
.../acdlogentriesquote, quotedetail

Alle unter singhammerITConsulting/dyce/v2.0/.

Schlüssel je Schritt
SchrittSchlüssel im ZielAlternate Key
Angebote aus BCquotenumber ← BC numberwysa_quotenumberkey
Positionen aus BCwysa_bcsystemid ← BC systemIdwysa_bcsystemidkey
Gewonnene Angebote aus BCwysa_bcsystemid ← Log recordIdwysa_bcsystemidkey
Positionen löschenwysa_bcsystemid ← Log recordIdwysa_bcsystemidkey
Angebote stornierenwysa_bcsystemid ← Log recordIdwysa_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
JobtableIdBC-Tabellezusätzlicher Filter
625 activatesalesquotesfrombc36Verkaufskopfoperation eq 'TRANSFERRED'
690 salesquotesfrombcdelete36Verkaufskopfoperation eq 'DELETE'
621 salescalculationelementsfrombcdelete72077783Kalkulationselementeoperation 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.

4.6.1 - Angebote aus Business Central übernehmen

Angebotsköpfe aus dem ERP erscheinen in Customer Engagement und hängen sich an ihre Verkaufschance.
RichtungBusiness Central → Customer Engagement
Wannalle 2 Minuten
Betrifftalle BC-Verkaufsbelege der Art Angebot, die seit dem letzten Lauf geändert wurden
TechnischJob 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 CentralFeld in Customer EngagementAnmerkung
Nr.AngebotsnummerErkennungsmerkmal — in beiden Systemen gleich
idBC System-IDtechnischer Schlüssel des ERP
BuchungsbeschreibungNamedie Bezeichnung des Angebots in CE
VerkaufschancennummerVerkaufschancewird zur Verknüpfung aufgelöst
Verkauf an Unternehmenskontaktnr.Kundewird zur Verknüpfung auf die Firma aufgelöst
VerkäufercodeVerkäufer (BC)wird zur Verknüpfung aufgelöst
AuftragsdatumGültig ab
Angebot gültig bisGültig bis
Betrag inkl. MwSt.BC Gesamtbetrag inkl. MwSt.Bruttosumme des Belegs
StatusBC Statussteuert 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

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.

4.6.2 - Angebotspositionen aus Business Central übernehmen

Die Kalkulationszeilen eines BC-Angebots erscheinen als Angebotspositionen in Customer Engagement.
RichtungBusiness Central → Customer Engagement
Wannalle 2 Minuten
Betrifftdie Kalkulationselemente von BC-Belegen der Art Angebot
TechnischJob 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 CentralFeld in Customer EngagementAnmerkung
systemIdBC System-IDErkennungsmerkmal
BelegnummerAngebotwird über die Angebotsnummer aufgelöst
ElementcodeProduktwird über den BC Code des Elements aufgelöst
BeschreibungBeschreibung
MengeMenge
Zeilenbetrag (LW)BC BetragNettobetrag der Position
Zeilenbetrag inkl. MwSt. (LW)BC Betrag inkl. MwSt.Bruttobetrag
—Einheitfester 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"]
ZuordnungAufgelöst überVoraussetzung
AngebotAngebotsnummerAngebote aus BC (610) ist gelaufen
ProduktBC Code des ElementsKalkulationselemente aus BC (190) ist gelaufen

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.

Eine feste Einheiten-GUID

Die Einheit der Position wird mit einem fest hinterlegten Wert gesetzt.

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.

4.6.3 - Gewonnene Angebote aus Business Central

Wird ein Angebot im ERP in einen Auftrag überführt, wird es in Customer Engagement gewonnen.
RichtungBusiness Central → Customer Engagement
Wannalle 3 Minuten
BetrifftAngebote, die in BC in einen Auftrag überführt wurden
TechnischJob 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

FeldWert danach
StatusGewonnen
BC StatusTRANSFERRED

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 ProtokollJobWirkung in CE
TRANSFERREDdieser Schritt (625)Angebot wird gewonnen
DELETEAngebote 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.

4.6.4 - Angebotspositionen löschen

In Business Central gelöschte Kalkulationszeilen werden in Customer Engagement gelöscht.
RichtungBusiness Central → Customer Engagement
Wannalle 2 Minuten
BetrifftKalkulationszeilen, die in BC gelöscht wurden
TechnischJob 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:

DatenbereichVerhalten bei Löschung in BC
Firma, Kontakt, Produktdeaktivieren
Angebotspositionlö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.

4.6.5 - In BC gelöschte Angebote stornieren

In Business Central gelöschte Angebote werden in Customer Engagement geschlossen und als storniert markiert.
RichtungBusiness Central → Customer Engagement
Wannalle 2 Minuten
BetrifftAngebote, die in BC gelöscht wurden
TechnischJob 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

DatenbereichVerhalten bei Löschung in BC
Firma, Kontakt, Produktdeaktivieren — an ihnen hängt Historie
Angebotschließen / stornieren — der Vorgang bleibt nachvollziehbar
Angebotspositionlö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.

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:

VorgangJobWirkung
DELETEdieser Schritt (690)Angebot wird storniert
TRANSFERREDGewonnene 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.

4.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:

SchrittWas passiertWann
Abonnements aus BCdie abonnierte Leistung selbstalle 2 Minuten
Abonnementzeilen aus BCLaufzeiten, Preise, Kündigungsfristenalle 2 Minuten

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.

RolleBedeutungKommt aus BC von
Rechnungsempfängerwer bezahltRechnungsadresse des Belegs
Leistungsnehmerwer die Leistung nutztLieferadresse 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.

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:

FeldTabelleBemerkung
VerkaufschanceAbonnementUrsprung des Abonnements — Zuordnung in CE
MitbewerberAbonnementaktueller Anbieter, falls die Leistung abgelöst werden soll
LeaderstellungAbonnementStichtag der Leadgenerierung
Anzahl ZeilenAbonnementAnzahl der zugehörigen Abonnementzeilen
Produkt (Verweis)Abonnementsiehe unten
Abzurechnendes ProduktAbonnementzeile—
WährungAbonnementzeile—

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.

Worauf zu achten ist

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
OrderJobMappingZieltabelleFelderSeite
550serviceobjectsfrombcBCServiceObjectswysa_bcserviceobject17Abonnements aus BC
560servicecommitmentsfrombcBCServiceCommitmentswysa_bcserviceobjectcommitment27Abonnementzeilen 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
SchrittSchlüssel im ZielAlternate Key
Abonnements aus BCwysa_number ← BC nowysa_numberkey
Abonnementzeilen aus BCwysa_bcsystemid ← BC systemIdwysa_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
FeldZieltabelleNachschlagefeldAlternate Key
Rechnungsempfänger Kontaktcontactwysa_bccontactnumberwysa_bccodekey
Rechnungsempfänger Firmaaccountwysa_bccontactnumberwysa_bccodekey
Leistungsnehmer Kontaktcontactwysa_bccontactnumberwysa_bccodekey
Leistungsnehmer Firmaaccountwysa_bccontactnumberwysa_bccodekey
Abonnement (an der Zeile)wysa_bcserviceobjectwysa_numberwysa_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):

FeldIm MappingIm Datenmodell
Zeilennummerwysa_contractlinenumberwysa_LineNumber
Verlängerungslaufzeitwysa_extensiontermwysa_RenewalTerm
Leistungsbeginn / -endewysa_servicestartdate / wysa_serviceenddatewysa_ServiceStart / wysa_ServiceEnd
Nächste Berechnungwysa_nextbillingdatewysa_NextBilling
Abrechnungszeitraumwysa_billingbaseperiodwysa_BillingPeriod
Berechnungsbasiswysa_calculationbaseamountwysa_CalculationBase

Felder des übergeordneten Abonnements (wysa_bcServiceObject, aus Abonnements aus BC übernehmen):

FeldIm MappingIm Datenmodell
Einheitwysa_uomwysa_Uom
Bereitstellung vonwysa_provisionstartdatewysa_ProvisioningStart
Bereitstellung biswysa_provisionenddatewysa_ProvisioningEnd
Rechnungsempfänger Firmawysa_billtocustomeridwysa_BillToAccountId
Leistungsnehmer Firmawysa_endusercustomeridwysa_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.

4.7.1 - Abonnements aus Business Central übernehmen

Die abonnierten Leistungen kommen aus der Abonnementverwaltung des ERP nach Customer Engagement.
RichtungBusiness Central → Customer Engagement
Wannalle 2 Minuten
Betrifftalle Abonnements, die in BC seit dem letzten Lauf geändert wurden
TechnischJob 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 CentralFeld in Customer EngagementAnmerkung
Nr.NummerErkennungsmerkmal
Nr.(Name des Datensatzes)dieselbe Nummer, zusätzlich als Anzeigename
systemIdBC System-IDtechnischer Schlüssel des ERP
Herkunftsnr.Produktnummerals Text — kein Verweis, siehe unten
BeschreibungProduktbeschreibung
MengeMenge
EinheitEinheit
Seriennr.Seriennummer
VersionVersion
Bereitstellung vonBereitstellung von
Bereitstellung bisBereitstellung bis
Rechnung an Kontaktnr.Rechnungsempfänger Kontaktwird zur Verknüpfung aufgelöst
Rechnung an Unternehmenskontaktnr.Rechnungsempfänger Firmawird zur Verknüpfung aufgelöst
Liefern an Kontaktnr.Leistungsnehmer Kontaktwird zur Verknüpfung aufgelöst
Liefern an Unternehmenskontaktnr.Leistungsnehmer Firmawird zur Verknüpfung aufgelöst
KundenreferenzKundenreferenz
—Abonnementartfester 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.

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.

4.7.2 - Abonnementzeilen aus Business Central übernehmen

Laufzeiten, Preise, Rabatte und Kündigungsfristen der Abonnements kommen nach Customer Engagement.
RichtungBusiness Central → Customer Engagement
Wannalle 2 Minuten
Betrifftalle Abonnementzeilen, die in BC seit dem letzten Lauf geändert wurden
TechnischJob 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 CentralFeld in Customer Engagement
systemIdBC System-ID
Abonnementnr.Abonnement (Verknüpfung)
Vertragsnr.Vertragsnummer
Vertragszeilennr.Zeilennummer
Zeilennr.Eintragsnummer
BeschreibungBeschreibung
PaketcodePaketcode

Laufzeit und Fristen

Feld in Business CentralFeld in Customer Engagement
AnfangslaufzeitAnfangslaufzeit
VerlängerungslaufzeitVerlängerungslaufzeit
KündigungsfristKündigungsfrist
Kündigung möglich bisKündigung möglich bis
LeistungsbeginnLeistungsbeginn
LeistungsendeLeistungsende
Laufzeit bisLaufzeit bis

Abrechnung

Feld in Business CentralFeld in Customer EngagementAnmerkung
Nächstes BerechnungsdatumNächste Berechnung
AbrechnungsrhythmusAbrechnungsrhythmus
AbrechnungsbasiszeitraumAbrechnungszeitraum
Abrechnung überAbrechnung überText wird zum Auswahlwert
PartnerPartnerText wird zum Auswahlwert

Preis und Rabatt

Feld in Business CentralFeld in Customer EngagementAnmerkung
PreisPreis
MengeMenge
RabattRabattJa/Nein — Text wird zum Auswahlwert
RabattbetragRabattbetrag
Rabatt %Rabatt Prozent
BerechnungsbasisbetragBerechnungsbasis
BerechnungsbasisBerechnungsbasis Prozent
LeistungsbetragLeistungsbetrag

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:

FeldWert in BCWert in CE
Abrechnung überContractVertrag
SalesVerkauf
PartnerCustomerKunde
VendorLieferant
RabatttrueJa
falseNein

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.

4.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.

OrderJobMappingRichtungLäuftTechnische SeiteFachliche Doku
110countriesfrombcBCCountriesBC → CEZeitplan→→
115languagesfrombcBCLanguagesBC → CEZeitplan→→
120salutationsfrombcBCSalutationsBC → CEZeitplan→→
125customerdiscountgroupsfrombcBCCustomerDiscountGroupsBC → CEZeitplan→→
130salespersonsfrombcBCSalesPersonsBC → CEZeitplan→→
135positionsfrombcBCPositionsBC → CEZeitplan→→
190opportunityelementsfrombcBCOpportunityElementsBC → CEZeitplan→→
220accountsnewfromceCEAccountsCE → BCZeitplan→→
221accountsresponsefrombcBCAccountsResponseBC → CEper Response-Job→→
240contactsnewfromceCEContactsCE → BCZeitplan→→
241contactsresponsefrombcBCContactsResponseBC → CEper Response-Job→→
260opportunitiesnewfromceCEOpportunitiesCE → BCZeitplan→→
261opportunitiesresponsefrombcBCOpportunitiesResponseBC → CEper Response-Job→→
410accountsfrombcBCAccountsBC → CEZeitplan→→
420accountsfrombcdeleteBCAccountsDeleteBC → CEZeitplan→→
430contactsfrombcBCContactsBC → CEZeitplan→→
440contactsfrombcdeleteBCContactsDeleteBC → CEZeitplan→→
450productsfrombcdeleteBCProductsDeleteBC → CEZeitplan→→
520accountupdatesfromceCEAccountUpdatesCE → BCZeitplan→→
530contactupdatesfromceCEContactsUpdatesCE → BCZeitplan→→
550serviceobjectsfrombcBCServiceObjectsBC → CEZeitplan→→
560servicecommitmentsfrombcBCServiceCommitmentsBC → CEZeitplan→→
610salesquotesfrombcBCSalesQuotesBC → CEZeitplan→→
620salescalculationelementsfrombcBCSalesCalculationElementsBC → CEZeitplan→→
621salescalculationelementsfrombcdeleteBCSalesCalculationElementsDeleteBC → CEZeitplan→→
625activatesalesquotesfrombcBCSalesQuotesActivateBC → CEZeitplan→→
690salesquotesfrombcdeleteBCSalesQuotesDeleteBC → CEZeitplan→→
710opportunityproductsnewfromceCEOpportunityProductsCE → BCZeitplan→→
750opportunityproductsupdatesfromceCEOpportunityProductsUpdatesCE → BCZeitplan→→
760opportunityproductsresponsefrombcBCOpportunityProductsResponseBC → CEper Response-Job→→

4.8.1 - 110 · countriesfrombc

Technisches Mapping des Jobs countriesfrombc (BCCountries).
EigenschaftWert
Order110
Jobcountriesfrombc
MappingBCCountries
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)acdcountryregions aus singhammerITConsulting/dyce/v2.0
Zieltabellewysa_country
Zeitplan0 */2 * * * *
Filter{{lastModifiedDateTime gt %watermark%}} and code ne ''
WatermarklastModifiedDateTime (Typ datetime)
Response-Job—
Fachliche DokuWertelisten aus BC

Feldzuordnung

QuellfeldZielfeldOperationDetails
codewysa_bccode——
idwysa_bcsystemid— · Schlüssel—
isoCodewysa_iso31661alpha2——
namewysa_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:

OrderJobAPI PageZieltabelleFilter-Zusatz
110countriesfrombcacdcountryregionswysa_countrycode ne ''
115languagesfrombcacdlanguageswysa_language—
120salutationsfrombcacdsalutationswysa_bcsalutation—
125customerdiscountgroupsfrombcacdcustomerdiscgroupswysa_bccustomerdiscountgroup—
135positionsfrombcacdorganizationallevelswysa_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.

4.8.2 - 115 · languagesfrombc

Technisches Mapping des Jobs languagesfrombc (BCLanguages).
EigenschaftWert
Order115
Joblanguagesfrombc
MappingBCLanguages
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)acdlanguages aus singhammerITConsulting/dyce/v2.0
Zieltabellewysa_language
Zeitplan0 */2 * * * *
Filter{{lastModifiedDateTime gt %watermark%}}
WatermarklastModifiedDateTime (Typ datetime)
Response-Job—
Fachliche DokuWertelisten aus BC

Feldzuordnung

QuellfeldZielfeldOperationDetails
codewysa_bccode——
idwysa_bcsystemid— · Schlüssel—
namewysa_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:

OrderJobAPI PageZieltabelleFilter-Zusatz
110countriesfrombcacdcountryregionswysa_countrycode ne ''
115languagesfrombcacdlanguageswysa_language—
120salutationsfrombcacdsalutationswysa_bcsalutation—
125customerdiscountgroupsfrombcacdcustomerdiscgroupswysa_bccustomerdiscountgroup—
135positionsfrombcacdorganizationallevelswysa_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.

4.8.3 - 120 · salutationsfrombc

Technisches Mapping des Jobs salutationsfrombc (BCSalutations).
EigenschaftWert
Order120
Jobsalutationsfrombc
MappingBCSalutations
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)acdsalutations aus singhammerITConsulting/dyce/v2.0
Zieltabellewysa_bcsalutation
Zeitplan0 */2 * * * *
Filter{{lastModifiedDateTime gt %watermark%}}
WatermarklastModifiedDateTime (Typ datetime)
Response-Job—
Fachliche DokuWertelisten aus BC

Feldzuordnung

QuellfeldZielfeldOperationDetails
codewysa_code——
descriptionwysa_name——
idwysa_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:

OrderJobAPI PageZieltabelleFilter-Zusatz
110countriesfrombcacdcountryregionswysa_countrycode ne ''
115languagesfrombcacdlanguageswysa_language—
120salutationsfrombcacdsalutationswysa_bcsalutation—
125customerdiscountgroupsfrombcacdcustomerdiscgroupswysa_bccustomerdiscountgroup—
135positionsfrombcacdorganizationallevelswysa_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.

4.8.4 - 125 · customerdiscountgroupsfrombc

Technisches Mapping des Jobs customerdiscountgroupsfrombc (BCCustomerDiscountGroups).
EigenschaftWert
Order125
Jobcustomerdiscountgroupsfrombc
MappingBCCustomerDiscountGroups
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)acdcustomerdiscgroups aus singhammerITConsulting/dyce/v2.0
Zieltabellewysa_bccustomerdiscountgroup
Zeitplan0 */2 * * * *
Filter{{lastModifiedDateTime gt %watermark%}}
WatermarklastModifiedDateTime (Typ datetime)
Response-Job—
Fachliche DokuWertelisten aus BC

Feldzuordnung

QuellfeldZielfeldOperationDetails
codewysa_bccode——
descriptionwysa_name——
idwysa_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:

OrderJobAPI PageZieltabelleFilter-Zusatz
110countriesfrombcacdcountryregionswysa_countrycode ne ''
115languagesfrombcacdlanguageswysa_language—
120salutationsfrombcacdsalutationswysa_bcsalutation—
125customerdiscountgroupsfrombcacdcustomerdiscgroupswysa_bccustomerdiscountgroup—
135positionsfrombcacdorganizationallevelswysa_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.

4.8.5 - 130 · salespersonsfrombc

Technisches Mapping des Jobs salespersonsfrombc (BCSalesPersons).
EigenschaftWert
Order130
Jobsalespersonsfrombc
MappingBCSalesPersons
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)acdsalespersons aus singhammerITConsulting/dyce/v2.0
Zieltabellewysa_bcsalesperson
Zeitplan0 */2 * * * *
Filter{{lastModifiedDateTime gt %watermark%}}
WatermarklastModifiedDateTime (Typ datetime)
Response-Job—
Fachliche DokuVerkäufer aus BC

Feldzuordnung

QuellfeldZielfeldOperationDetails
idwysa_bcsystemid— · Schlüssel—
codewysa_code——
displayNamewysa_name——
eMailwysa_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:

MappingRichtungOperation
BCAccountsBC → CELookup über wysa_bccodekey
CEAccounts, CEAccountUpdatesCE → BCLookupValue
CEContacts, CEContactsUpdatesCE → BCLookupValue
CEOpportunitiesCE → BCLookupValue
BCSalesQuotesBC → CELookup ü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.

4.8.6 - 135 · positionsfrombc

Technisches Mapping des Jobs positionsfrombc (BCPositions).
EigenschaftWert
Order135
Jobpositionsfrombc
MappingBCPositions
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)acdorganizationallevels aus singhammerITConsulting/dyce/v2.0
Zieltabellewysa_bcposition
Zeitplan0 */2 * * * *
Filter{{lastModifiedDateTime gt %watermark%}}
WatermarklastModifiedDateTime (Typ datetime)
Response-Job—
Fachliche DokuWertelisten aus BC

Feldzuordnung

QuellfeldZielfeldOperationDetails
codewysa_code——
descriptionwysa_name——
idwysa_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:

OrderJobAPI PageZieltabelleFilter-Zusatz
110countriesfrombcacdcountryregionswysa_countrycode ne ''
115languagesfrombcacdlanguageswysa_language—
120salutationsfrombcacdsalutationswysa_bcsalutation—
125customerdiscountgroupsfrombcacdcustomerdiscgroupswysa_bccustomerdiscountgroup—
135positionsfrombcacdorganizationallevelswysa_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.

4.8.7 - 190 · opportunityelementsfrombc

Technisches Mapping des Jobs opportunityelementsfrombc (BCOpportunityElements).
EigenschaftWert
Order190
Jobopportunityelementsfrombc
MappingBCOpportunityElements
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)acdopportunityelements aus singhammerITConsulting/dyce/v2.0
Zieltabelleproduct
Zeitplan0 */2 * * * *
Filter{{systemModifiedAt gt %watermark%}}
WatermarksystemModifiedAt (Typ datetime)
Response-Job—
Fachliche DokuVerkaufschancen-Elemente aus BC

Feldzuordnung

QuellfeldZielfeldOperationDetails
codewysa_bccode— · Schlüssel—
—defaultuomidDefaultValue= 946e49c5-b59d-41c6-b47a-da4ecbfa95fc
—defaultuomscheduleidDefaultValue= 1b706c12-f34a-4826-8b3c-0628b5df2ba2
—productstructureDefaultValue= 1
descriptiondescription——
dimension1Codewysa_bcdimension1code——
dimension1ValueCodewysa_bcdimension1valuecode——
dimension2Codewysa_bcdimension2code——
dimension2ValueCodewysa_bcdimension2valuecode——
systemIdwysa_bcsystemid——

Alternate Key

{
  "keyType": "CustomKey",
  "keyName": "wysa_bccode",
  "keyValues": [
    {
      "attributeName": "code",
      "keyName": "wysa_bccode",
      "rank": 1
    }
  ],
  "ignoreEmptySourceKey": false,
  "keyRank": 0
}

Weitere technische Details

Transformationen im Detail

Drei Vorgabewerte ohne Quellfeld:

{
  "Operations": [{
    "Name": "DefaultValue",
    "Parameters": { "DefaultValue": "946e49c5-b59d-41c6-b47a-da4ecbfa95fc" }
  }]
}
ZielfeldWertBedeutung
defaultuomid946e49c5-b59d-41c6-b47a-da4ecbfa95fcStandardeinheit — umgebungsspezifische GUID
defaultuomscheduleid1b706c12-f34a-4826-8b3c-0628b5df2ba2Einheitengruppe — umgebungsspezifische GUID
productstructure1Dataverse-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.

4.8.8 - 220 · accountsnewfromce

Technisches Mapping des Jobs accountsnewfromce (CEAccounts).
EigenschaftWert
Order220
Jobaccountsnewfromce
MappingCEAccounts
RichtungCE → BC
QuellverbindungCRM_Test
ZielverbindungBC_Test
Quelltabelle (API)account aus BC_Test-seitig, kein API-Pfad
Zieltabelleacdcontactscomp
Zeitplan0 */2 * * * *
FilterJSON-Filter: IsNull(wysa_bcsystemid) UND OptionSetValue(wysa_sync2bc=799840000)
Watermark—
Response-Jobaccountsresponsefrombc
Fachliche DokuNeue Firma nach BC

Feldzuordnung

QuellfeldZielfeldOperationDetails
accountiddataverseId— · Schlüssel—
address1_citycity——
address1_line1address——
address1_line2address2——
address1_postalcodepostCode——
—contactTypeDefaultValue= Company
—salutationCodeDefaultValue= MANDANT
emailaddress1eMail——
telephone1phoneNumber——
websiteurlhomePage——
_wysa_address1_countryidcountryRegionCodeLookupValueliest wysa_bccode aus wysa_country über wysa_address1_countryid
wysa_bcname1displayName——
wysa_bcname2name2——
_wysa_bcsalespersonidsalespersonCodeLookupValueliest 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 } }
  ]
}

Transformationen im Detail

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.

4.8.9 - 221 · accountsresponsefrombc

Technisches Mapping des Jobs accountsresponsefrombc (BCAccountsResponse).
EigenschaftWert
Order221
Jobaccountsresponsefrombc
MappingBCAccountsResponse
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)acdcontactscomp aus singhammerITConsulting/dyce/v2.0
Zieltabelleaccount
Zeitplan—, wird von accountsnewfromce über ResponseJob ausgelöst
Filter{{lastModifiedDateTime gt %watermark%}}
Watermarkmodifiedon (Typ datetime)
Response-Job—
Fachliche DokuRückmeldung aus BC (Firma)

Feldzuordnung

QuellfeldZielfeldOperationDetails
_accountidaccountidReadFromMessage · Schlüsselaus Antwortnachricht
idwysa_bcsystemid——
numberwysa_bccontactnumber——

Alternate Key

{
  "keyType": "PrimaryKey",
  "keyName": "_accountid",
  "ignoreEmptySourceKey": false,
  "keyRank": 0
}

Weitere technische Details

Transformationen im Detail

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 JobOrderResponse-JobOrder
accountsnewfromce220accountsresponsefrombc221
contactsnewfromce240contactsresponsefrombc241
opportunitiesnewfromce260opportunitiesresponsefrombc261
opportunityproductsnewfromce710opportunityproductsresponsefrombc760

4.8.10 - 240 · contactsnewfromce

Technisches Mapping des Jobs contactsnewfromce (CEContacts).
EigenschaftWert
Order240
Jobcontactsnewfromce
MappingCEContacts
RichtungCE → BC
QuellverbindungCRM_Test
ZielverbindungBC_Test
Quelltabelle (API)contact aus BC_Test-seitig, kein API-Pfad
Zieltabelleacdcontacts
Zeitplan0 */2 * * * *
FilterJSON-Filter: IsNull(wysa_bcsystemid) UND OptionSetValue(wysa_sync2bc=799840000)
Watermark—
Response-Jobcontactsresponsefrombc
Fachliche DokuNeuer Kontakt nach BC

Feldzuordnung

QuellfeldZielfeldOperationDetails
address1_citycity——
address1_line1address——
address1_line2address2——
address1_postalcodepostCode——
contactiddataverseId— · Schlüssel—
—contactTypeDefaultValue= Person
emailaddress1eMail——
firstnamefirstName——
lastnamesurname——
middlenamemiddleName——
mobilephonemobilePhoneNumber——
_parentcustomeridcompanyNumberLookupValueliest wysa_bccontactnumber aus account über parentcustomerid
telephone1phoneNumber——
_wysa_address1_countryidcountryRegionCodeLookupValueliest wysa_bccode aus wysa_country über wysa_address1_countryid
_wysa_bcsalespersonid.wysa_codesalespersonCodeLookupValueliest wysa_code aus wysa_bcsalesperson über wysa_bcsalespersonid
_wysa_language.wysa_bccodelanguageCodeLookupValueliest wysa_bccode aus wysa_language über wysa_language
_wysa_salutationbcid.wysa_codesalutationCodeLookupValueliest 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

Transformationen im Detail

Alle fünf LookupValue-Operationen arbeiten mit LookupType: Attribute und UseCache: true und unterscheiden sich nur in Nachschlagetabelle und -feld:

QuellfeldNachschlagetabelleNachschlagefeld
wysa_address1_countryidwysa_countrywysa_bccode
wysa_languagewysa_languagewysa_bccode
wysa_salutationbcidwysa_bcsalutationwysa_code
wysa_bcsalespersonidwysa_bcsalespersonwysa_code
parentcustomeridaccountwysa_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.

4.8.11 - 241 · contactsresponsefrombc

Technisches Mapping des Jobs contactsresponsefrombc (BCContactsResponse).
EigenschaftWert
Order241
Jobcontactsresponsefrombc
MappingBCContactsResponse
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)acdcontacts aus singhammerITConsulting/dyce/v2.0
Zieltabellecontact
Zeitplan—, wird von contactsnewfromce über ResponseJob ausgelöst
Filter{{lastModifiedDateTime gt %watermark%}}
Watermarkmodifiedon (Typ datetime)
Response-Job—
Fachliche DokuRückmeldung aus BC (Kontakt)

Feldzuordnung

QuellfeldZielfeldOperationDetails
address2address1_line2——
addressaddress1_line1——
cityaddress1_city——
_contactidcontactidReadFromMessage · Schlüsselaus Antwortnachricht
countryRegionCodewysa_address1_countryidLookup→ wysa_country über wysa_bccodekey (countryRegionCode → wysa_bccode)
idwysa_bcsystemid——
numberwysa_bccontactnumber——
phoneNumbertelephone1——
postCodeaddress1_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 JobOrderResponse-JobOrderFelder
accountsnewfromce220accountsresponsefrombc2213
contactsnewfromce240contactsresponsefrombc2419
opportunitiesnewfromce260opportunitiesresponsefrombc2613
opportunityproductsnewfromce710opportunityproductsresponsefrombc7602

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).

4.8.12 - 260 · opportunitiesnewfromce

Technisches Mapping des Jobs opportunitiesnewfromce (CEOpportunities).
EigenschaftWert
Order260
Jobopportunitiesnewfromce
MappingCEOpportunities
RichtungCE → BC
QuellverbindungCRM_Test
ZielverbindungBC_Test
Quelltabelle (API)opportunity aus BC_Test-seitig, kein API-Pfad
Zieltabelleacdopportunities
Zeitplan0 */2 * * * *
FilterJSON-Filter: IsNull(wysa_bcsystemid) UND OptionSetValue(wysa_sync2bc=799840000)
Watermark—
Response-Jobopportunitiesresponsefrombc
Fachliche DokuNeue Verkaufschance nach BC

Feldzuordnung

QuellfeldZielfeldOperationDetails
_URLdynamicsSalesLinkLinkToRecordDeep-Link (baseUrl konfiguriert)
descriptionextendedDescription——
estimatedclosedateexpectedCloseDate——
estimatedvalueexpectedRevenue——
namedescription——
opportunityiddataverseId— · Schlüssel—
_parentaccountid.wysa_bccontactnumbercontactCompanyNumberLookupValueliest wysa_bccontactnumber aus account über parentaccountid
_parentcontactid.wysa_bccontactnumbercontactNumberLookupValueliest wysa_bccontactnumber aus contact über parentcontactid
_wysa_bcsalespersonid.wysa_codesalespersonCodeLookupValueliest 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

Transformationen im Detail

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:

QuellfeldNachschlagetabelleNachschlagefeldZielfeld
parentaccountidaccountwysa_bccontactnumbercontactCompanyNumber
parentcontactidcontactwysa_bccontactnumbercontactNumber
wysa_bcsalespersonidwysa_bcsalespersonwysa_codesalespersonCode

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.

4.8.13 - 261 · opportunitiesresponsefrombc

Technisches Mapping des Jobs opportunitiesresponsefrombc (BCOpportunitiesResponse).
EigenschaftWert
Order261
Jobopportunitiesresponsefrombc
MappingBCOpportunitiesResponse
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)acdopportunities aus singhammerITConsulting/dyce/v2.0
Zieltabelleopportunity
Zeitplan—, wird von opportunitiesnewfromce über ResponseJob ausgelöst
Filter{{lastModifiedDateTime gt %watermark%}}
WatermarklastModifiedDateTime (Typ datetime)
Response-Job—
Fachliche DokuRückmeldung aus BC (Verkaufschance)

Feldzuordnung

QuellfeldZielfeldOperationDetails
idwysa_bcsystemid——
numberwysa_bcopportunitynumber——
_opportunityidopportunityidReadFromMessage · Schlüsselaus 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 JobOrderResponse-JobOrderFelder
accountsnewfromce220accountsresponsefrombc2213
contactsnewfromce240contactsresponsefrombc2419
opportunitiesnewfromce260opportunitiesresponsefrombc2613
opportunityproductsnewfromce710opportunityproductsresponsefrombc7602

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.

4.8.14 - 410 · accountsfrombc

Technisches Mapping des Jobs accountsfrombc (BCAccounts).
EigenschaftWert
Order410
Jobaccountsfrombc
MappingBCAccounts
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)acdcontactscomp aus singhammerITConsulting/dyce/v2.0
Zieltabelleaccount
Zeitplan0 */2 * * * *
Filter{{lastModifiedDateTime gt %watermark%}}
WatermarklastModifiedDateTime (Typ datetime)
Response-Job—
Fachliche DokuFirma aus BC übernehmen

Feldzuordnung

QuellfeldZielfeldOperationDetails
address2address1_line2——
addressaddress1_line1——
cityaddress1_city——
companyNumberparentaccountidLookup→ account über wysa_bccodekey (companyNumber → wysa_bccontactnumber); NULL wenn = Feld number
countryRegionCodewysa_address1_countryidLookup→ wysa_country über wysa_bccodekey (countryRegionCode → wysa_bccode)
customerDiscountGroupwysa_bccustomerdiscountgroupidLookup→ wysa_bccustomerdiscountgroup über wysa_bccodekey (customerDiscountGroup → wysa_bccode)
customerNumberwysa_bccustomernumber——
—wysa_sync2bcDefaultValue= 799840000
displayNamewysa_bcname1——
eMailemailaddress1——
homePagewebsiteurl——
idwysa_bcsystemid——
name2wysa_bcname2——
numberwysa_bccontactnumber— · Schlüssel—
phoneNumbertelephone1——
postCodeaddress1_postalcode——
salespersonCodewysa_bcsalespersonidLookup→ wysa_bcsalesperson über wysa_bccodekey (salespersonCode → wysa_code)
vendorNumberwysa_bcvendornumber——

Alternate Key

{
  "keyType": "CustomKey",
  "keyName": "wysa_bccodekey",
  "keyValues": [
    {
      "attributeName": "number",
      "keyName": "wysa_bccontactnumber",
      "rank": 1
    }
  ],
  "ignoreEmptySourceKey": false,
  "keyRank": 0
}

Weitere technische Details

Transformationen im Detail

Voraussetzungen der Lookups — Land (countryRegionCode), Debitorrabattgruppe (customerDiscountGroup) und Verkäufer (salespersonCode) setzen voraus, dass die jeweilige Stammdatentabelle bereits gefüllt ist:

LookupZieltabelleVoraussetzung
Landwysa_countryJob countriesfrombc (110)
Debitorrabattgruppewysa_bccustomerdiscountgroupJob customerdiscountgroupsfrombc (125)
Verkäuferwysa_bcsalespersonJob 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" }
  }]
}

4.8.15 - 420 · accountsfrombcdelete

Technisches Mapping des Jobs accountsfrombcdelete (BCAccountsDelete).
EigenschaftWert
Order420
Jobaccountsfrombcdelete
MappingBCAccountsDelete
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)acdlogentries aus singhammerITConsulting/dyce/v2.0
Zieltabelleaccount
Zeitplan0 */2 * * * *
Filter{{lastModifiedDateTime gt %watermark%}} and tableId eq 5050
WatermarklastModifiedDateTime (Typ datetime)
Response-Job—
Fachliche DokuLöschung aus BC (Firma)

Feldzuordnung

QuellfeldZielfeldOperationDetails
DefaultstatecodeDefaultValue= 1
DefaultstatuscodeDefaultValue= 799840001
recordIdwysa_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

Transformationen im Detail

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.

4.8.16 - 430 · contactsfrombc

Technisches Mapping des Jobs contactsfrombc (BCContacts).
EigenschaftWert
Order430
Jobcontactsfrombc
MappingBCContacts
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)acdcontacts aus singhammerITConsulting/dyce/v2.0
Zieltabellecontact
Zeitplan0 */2 * * * *
Filter{{lastModifiedDateTime gt %watermark%}}
WatermarklastModifiedDateTime (Typ datetime)
Response-Job—
Fachliche DokuKontakt aus BC übernehmen

Feldzuordnung

QuellfeldZielfeldOperationDetails
address2address1_line2——
addressaddress1_line1——
cityaddress1_city——
companyNumberparentcustomeridLookup→ account über wysa_bccodekey (companyNumber → wysa_bccontactnumber)
countryRegionCodewysa_address1_countryidLookup→ wysa_country über wysa_bccodekey (countryRegionCode → wysa_bccode)
—wysa_sync2bcDefaultValue= 799840000
eMailemailaddress1——
firstNamefirstname——
idwysa_bcsystemid——
languageCodewysa_languageLookup→ wysa_language über wysa_bccodekey (languageCode → wysa_bccode)
middleNamemiddlename——
mobilePhoneNumbermobilephone——
numberwysa_bccontactnumber— · Schlüssel—
organizationalLevelCodewysa_bcpositionidLookup→ wysa_bcposition über wysa_bccodekey (organizationalLevelCode → wysa_code)
phoneNumbertelephone1——
postCodeaddress1_postalcode——
salutationCodewysa_salutationbcidLookup→ wysa_bcsalutation über wysa_bccodekey (salutationCode → wysa_code)
surnamelastname——

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

Transformationen im Detail

Alle fünf Lookups folgen demselben Aufbau — sie unterscheiden sich nur in Zieltabelle und Schlüsselfeld:

QuellfeldZieltabelleSchlüsselfeldAlternate Key
countryRegionCodewysa_countrywysa_bccodewysa_bccodekey
languageCodewysa_languagewysa_bccodewysa_bccodekey
salutationCodewysa_bcsalutationwysa_codewysa_bccodekey
organizationalLevelCodewysa_bcpositionwysa_codewysa_bccodekey
companyNumberaccountwysa_bccontactnumberwysa_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.

4.8.17 - 440 · contactsfrombcdelete

Technisches Mapping des Jobs contactsfrombcdelete (BCContactsDelete).
EigenschaftWert
Order440
Jobcontactsfrombcdelete
MappingBCContactsDelete
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)acdlogentries aus singhammerITConsulting/dyce/v2.0
Zieltabellecontact
Zeitplan0 */2 * * * *
Filter{{lastModifiedDateTime gt %watermark%}} and tableId eq 5050
WatermarklastModifiedDateTime (Typ datetime)
Response-Job—
Fachliche DokuLöschung aus BC (Kontakt)

Feldzuordnung

QuellfeldZielfeldOperationDetails
DefaultstatecodeDefaultValue= 1
DefaultstatuscodeDefaultValue= 799840001
recordIdwysa_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.

4.8.18 - 450 · productsfrombcdelete

Technisches Mapping des Jobs productsfrombcdelete (BCProductsDelete).
EigenschaftWert
Order450
Jobproductsfrombcdelete
MappingBCProductsDelete
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)acdlogentries aus singhammerITConsulting/dyce/v2.0
Zieltabelleproduct
Zeitplan0 */2 * * * *
Filter{{lastModifiedDateTime gt %watermark%}} and tableId eq 72077781
WatermarklastModifiedDateTime (Typ datetime)
Response-Job—
Fachliche DokuProdukte deaktivieren

Feldzuordnung

QuellfeldZielfeldOperationDetails
DefaultstatecodeDefaultValue= 1
DefaultstatuscodeDefaultValue= 2
recordIdwysa_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

Transformationen im Detail

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

Jobstatecodestatuscode
accountsfrombcdelete (420)1799840001 — lösungseigen
contactsfrombcdelete (440)1799840001 — lösungseigen
productsfrombcdelete (450)12 — Dataverse-Standard

4.8.19 - 520 · accountupdatesfromce

Technisches Mapping des Jobs accountupdatesfromce (CEAccountUpdates).
EigenschaftWert
Order520
Jobaccountupdatesfromce
MappingCEAccountUpdates
RichtungCE → BC
QuellverbindungCRM_Test
ZielverbindungBC_Test
Quelltabelle (API)account aus BC_Test-seitig, kein API-Pfad
Zieltabelleacdcontactscomp
Zeitplan0 */2 * * * *
FilterJSON-Filter: NotNull(wysa_bcsystemid) UND OptionSetValue(wysa_sync2bc=799840000)
Watermark—
Response-Job—
Fachliche DokuÄnderungen nach BC (Firma)

Feldzuordnung

QuellfeldZielfeldOperationDetails
accountiddataverseId——
address1_citycity——
address1_line1address——
address1_line2address2——
address1_postalcodepostCode——
emailaddress1eMail——
telephone1phoneNumber——
websiteurlhomePage——
_wysa_address1_countryidcountryRegionCodeLookupValueliest wysa_bccode aus wysa_country über wysa_address1_countryid
wysa_bcname1displayName——
wysa_bcname2name2——
_wysa_bcsalespersonidsalespersonCodeLookupValueliest wysa_code aus wysa_bcsalesperson über wysa_bcsalespersonid
wysa_bcsystemidid— · 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üsselKeyType: Filter über dataverseIdKeyType: Id über wysa_bcsystemid
contactType✓ DefaultValue = Company–
salutationCode✓ DefaultValue = MANDANT–
Response-Job✓ accountsresponsefrombc–
Feldzuordnungen1413

4.8.20 - 530 · contactupdatesfromce

Technisches Mapping des Jobs contactupdatesfromce (CEContactsUpdates).
EigenschaftWert
Order530
Jobcontactupdatesfromce
MappingCEContactsUpdates
RichtungCE → BC
QuellverbindungCRM_Test
ZielverbindungBC_Test
Quelltabelle (API)contact aus BC_Test-seitig, kein API-Pfad
Zieltabelleacdcontacts
Zeitplan0 */2 * * * *
FilterJSON-Filter: NotNull(wysa_bcsystemid) UND OptionSetValue(wysa_sync2bc=799840000)
Watermark—
Response-Job—
Fachliche DokuÄnderungen nach BC (Kontakt)

Feldzuordnung

QuellfeldZielfeldOperationDetails
address1_citycity——
address1_line1address——
address1_line2address2——
address1_postalcodepostCode——
contactiddataverseId——
emailaddress1eMail——
firstnamefirstName——
lastnamesurname——
middlenamemiddleName——
mobilephonemobilePhoneNumber——
_parentcustomeridcompanyNumberLookupValueliest wysa_bccontactnumber aus account über parentcustomerid
telephone1phoneNumber——
_wysa_address1_countryidcountryRegionCodeLookupValueliest wysa_bccode aus wysa_country über wysa_address1_countryid
_wysa_bcsalespersonid.wysa_codesalespersonCodeLookupValueliest wysa_code aus wysa_bcsalesperson über wysa_bcsalespersonid
wysa_bcsystemidid— · Schlüssel—
_wysa_language.wysa_bccodelanguageCodeLookupValueliest wysa_bccode aus wysa_language über wysa_language
_wysa_salutationbcid.wysa_codesalutationCodeLookupValueliest 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üsselKeyType: Filter über dataverseIdKeyType: Id über wysa_bcsystemid
contactType✓ DefaultValue = Person–
Response-Job✓ contactsresponsefrombc–
Feldzuordnungen1717

4.8.21 - 550 · serviceobjectsfrombc

Technisches Mapping des Jobs serviceobjectsfrombc (BCServiceObjects).
EigenschaftWert
Order550
Jobserviceobjectsfrombc
MappingBCServiceObjects
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)serviceObjects aus microsoft/subsBilling/v1.0
Zieltabellewysa_bcserviceobject
Zeitplan0 */2 * * * *
Filter{{lastModifiedDateTime gt %watermark%}}
WatermarklastModifiedDateTime (Typ datetime)
Response-Job—
Fachliche DokuAbonnements aus BC

Feldzuordnung

QuellfeldZielfeldOperationDetails
billToContactNowysa_billtocontactidLookup→ contact über wysa_bccodekey (billToContactNo → wysa_bccontactnumber)
billToCompanyContactNowysa_billtocustomeridLookup→ account über wysa_bccodekey (billToCompanyContactNo → wysa_bccontactnumber)
customerReferencewysa_customerreference——
descriptionwysa_productdescription——
shipToContactNowysa_endusercontactidLookup→ contact über wysa_bccodekey (shipToContactNo → wysa_bccontactnumber)
shipToCompanyContactNowysa_endusercustomeridLookup→ account über wysa_bccodekey (shipToCompanyContactNo → wysa_bccontactnumber)
sourceNowysa_productnumber——
nowysa_name——
nowysa_number— · Schlüssel—
provisionEndDatewysa_provisionenddate——
provisionStartDatewysa_provisionstartdate——
quantityDecimalwysa_quantity——
serialNowysa_serialnumber——
systemIdwysa_bcsystemid——
unitOfMeasurewysa_uom——
versionwysa_version——
nullwysa_subscriptiontypeDefaultValue= 799840000

Alternate Key

{
  "keyType": "CustomKey",
  "keyName": "wysa_numberkey",
  "keyValues": [
    {
      "attributeName": "no",
      "keyName": "wysa_number",
      "rank": 1
    }
  ],
  "ignoreEmptySourceKey": false,
  "keyRank": 0
}

Weitere technische Details

Transformationen im Detail

Vier Lookups, alle über das Feld wysa_bccontactnumber und den Alternate Key wysa_bccodekey:

QuellfeldZieltabelleZielfeld
billToContactNocontactwysa_billtocontactid
billToCompanyContactNoaccountwysa_billtocustomerid
shipToContactNocontactwysa_endusercontactid
shipToCompanyContactNoaccountwysa_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).

4.8.22 - 560 · servicecommitmentsfrombc

Technisches Mapping des Jobs servicecommitmentsfrombc (BCServiceCommitments).
EigenschaftWert
Order560
Jobservicecommitmentsfrombc
MappingBCServiceCommitments
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)serviceCommitments aus microsoft/subsBilling/v1.0
Zieltabellewysa_bcserviceobjectcommitment
Zeitplan0 */2 * * * *
Filter{{lastModifiedDateTime gt %watermark%}}
WatermarklastModifiedDateTime (Typ datetime)
Response-Job—
Fachliche DokuAbonnementzeilen aus BC

Feldzuordnung

QuellfeldZielfeldOperationDetails
billingBasePeriodwysa_billingbaseperiod——
billingRhythmwysa_billingrhythm——
calculationBaseAmountwysa_calculationbaseamount——
calculationBasewysa_calculationbasepercent——
cancellationPossibleUntilwysa_cancellationpossibleuntil——
contractLineNowysa_contractlinenumber——
contractNowysa_contractnumber——
descriptionwysa_description——
discountAmountwysa_discountamount——
discountPctgwysa_discountpercent——
discountwysa_discountOptionMappingWerte: true→1, false→0
extensionTermwysa_extensionterm——
initialTermwysa_initialterm——
invoicingViawysa_invoicingviaOptionMappingWerte: Contract→799840000, Sales→799840001
lineNowysa_entrynumber——
nextBillingDatewysa_nextbillingdate——
noticePeriodwysa_noticeperiod——
packageCodewysa_packagecode——
partnerwysa_partnerOptionMappingWerte: Customer→799840000, Vendor→799840001
pricewysa_price——
quantityDecimalwysa_quantity——
serviceAmountwysa_serviceamount——
serviceEndDatewysa_serviceenddate——
serviceObjectNowysa_serviceobjectidLookup→ wysa_bcserviceobject über wysa_numberkey (serviceObjectNo → wysa_number)
serviceStartDatewysa_servicestartdate——
systemIdwysa_bcsystemid— · Schlüssel—
termUntilwysa_termuntil——

Alternate Key

{
  "keyType": "CustomKey",
  "keyName": "wysa_bcsystemidkey",
  "keyValues": [
    {
      "attributeName": "systemId",
      "keyName": "wysa_bcsystemid",
      "rank": 1
    }
  ],
  "ignoreEmptySourceKey": false,
  "keyRank": 0
}

Weitere technische Details

Transformationen im Detail

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" }
      ]
    }
  }]
}
ZielfeldZuordnung
wysa_invoicingviaContract → 799840000, Sales → 799840001
wysa_partnerCustomer → 799840000, Vendor → 799840001
wysa_discounttrue → 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.

4.8.23 - 610 · salesquotesfrombc

Technisches Mapping des Jobs salesquotesfrombc (BCSalesQuotes).
EigenschaftWert
Order610
Jobsalesquotesfrombc
MappingBCSalesQuotes
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)acdsalesheaders aus singhammerITConsulting/dyce/v2.0
Zieltabellequote
Zeitplan0 */2 * * * *
Filter{{lastModifiedDateTime gt %watermark%}} and documentType eq 'Quote'
WatermarklastModifiedDateTime (Typ datetime)
Response-Job—
Fachliche DokuAngebotskopf aus BC

Feldzuordnung

QuellfeldZielfeldOperationDetails
amountIncludingVATwysa_bctotalamountvat——
idwysa_bcsystemid——
numberquotenumber— · Schlüssel—
opportunityNumberopportunityidLookup→ opportunity über wysa_bcopportunitynumberkey (opportunityNumber → wysa_bcopportunitynumber)
orderDateeffectivefrom——
postingDescriptionname——
quoteValidUntilDateeffectiveto——
salespersonCodewysa_bcsalespersonidLookup→ wysa_bcsalesperson über wysa_bccodekey (salespersonCode → wysa_code)
sellToCompanyContactNumbercustomeridLookup→ account über wysa_bccodekey (sellToCompanyContactNumber → wysa_bccontactnumber)
statuswysa_bcstatus——

Alternate Key

{
  "keyType": "CustomKey",
  "keyName": "wysa_quotenumberkey",
  "keyValues": [
    {
      "attributeName": "number",
      "keyName": "quotenumber",
      "rank": 1
    }
  ],
  "ignoreEmptySourceKey": false,
  "keyRank": 0
}

Weitere technische Details

Transformationen im Detail

Drei Lookups, jeder über einen Alternate Key:

QuellfeldZieltabelleSchlüsselfeldAlternate Key
opportunityNumberopportunitywysa_bcopportunitynumberwysa_bcopportunitynumberkey
sellToCompanyContactNumberaccountwysa_bccontactnumberwysa_bccodekey
salespersonCodewysa_bcsalespersonwysa_codewysa_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.

4.8.24 - 620 · salescalculationelementsfrombc

Technisches Mapping des Jobs salescalculationelementsfrombc (BCSalesCalculationElements).
EigenschaftWert
Order620
Jobsalescalculationelementsfrombc
MappingBCSalesCalculationElements
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)acdsalescalculationelements aus singhammerITConsulting/dyce/v2.0
Zieltabellequotedetail
Zeitplan0 */2 * * * *
Filter{{systemModifiedAt gt %watermark%}} and documentType eq 'Quote'
WatermarksystemModifiedAt (Typ datetime)
Response-Job—
Fachliche DokuAngebotspositionen aus BC

Feldzuordnung

QuellfeldZielfeldOperationDetails
—uomidDefaultValue= 946e49c5-b59d-41c6-b47a-da4ecbfa95fc
descriptiondescription——
documentNoquoteidLookup→ quote über wysa_quotenumberkey (documentNo → quotenumber)
lineAmountInclVATLCYwysa_bcamountvat——
lineAmountLCYwysa_bcamount——
opportunityElementCodeproductidLookup→ product über wysa_bccode (opportunityElementCode → wysa_bccode)
quantityquantity——
systemIdwysa_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

Transformationen im Detail

QuellfeldZieltabelleSchlüsselfeldAlternate Key
documentNoquotequotenumberwysa_quotenumberkey
opportunityElementCodeproductwysa_bccodewysa_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).

4.8.25 - 621 · salescalculationelementsfrombcdelete

Technisches Mapping des Jobs salescalculationelementsfrombcdelete (BCSalesCalculationElementsDelete).
EigenschaftWert
Order621
Jobsalescalculationelementsfrombcdelete
MappingBCSalesCalculationElementsDelete
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)acdlogentries aus singhammerITConsulting/dyce/v2.0
Zieltabellequotedetail
Zeitplan0 */2 * * * *
Filter{{lastModifiedDateTime gt %watermark%}} and tableId eq 72077783 and operation eq 'DELETE'
WatermarklastModifiedDateTime (Typ datetime)
Response-Job—
Fachliche DokuLöschung Angebotsposition aus BC

Feldzuordnung

QuellfeldZielfeldOperationDetails
recordIdwysa_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.

4.8.26 - 625 · activatesalesquotesfrombc

Technisches Mapping des Jobs activatesalesquotesfrombc (BCSalesQuotesActivate).
EigenschaftWert
Order625
Jobactivatesalesquotesfrombc
MappingBCSalesQuotesActivate
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)acdlogentries aus singhammerITConsulting/dyce/v2.0
Zieltabellequote
Zeitplan0 */3 * * * *
Filter{{lastModifiedDateTime gt %watermark%}} and tableId eq 36 and operation eq 'TRANSFERRED'
WatermarklastModifiedDateTime (Typ datetime)
Response-Job—
Fachliche DokuStatuswechsel Angebot aus BC

Feldzuordnung

QuellfeldZielfeldOperationDetails
DefaultstatecodeDefaultValue= 2
operationwysa_bcstatus——
recordIdwysa_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

Transformationen im Detail

{
  "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.

4.8.27 - 690 · salesquotesfrombcdelete

Technisches Mapping des Jobs salesquotesfrombcdelete (BCSalesQuotesDelete).
EigenschaftWert
Order690
Jobsalesquotesfrombcdelete
MappingBCSalesQuotesDelete
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)acdlogentries aus singhammerITConsulting/dyce/v2.0
Zieltabellequote
Zeitplan0 */2 * * * *
Filter{{lastModifiedDateTime gt %watermark%}} and tableId eq 36 and operation eq 'DELETE'
WatermarklastModifiedDateTime (Typ datetime)
Response-Job—
ActionNewUpdate (kein Delete)
Fachliche DokuStornierung Angebot aus BC

Feldzuordnung

QuellfeldZielfeldOperationDetails
recordIdwysa_bcsystemid— · Schlüssel—
—statecodeDefaultValue= 3 (Geschlossen)
—statuscodeDefaultValue= 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

OrderJobZieltabelleActionWirkung
420accountsfrombcdeleteaccount—deaktivieren
440contactsfrombcdeletecontact—deaktivieren
450productsfrombcdeleteproduct—deaktivieren
621salescalculationelementsfrombcdeletequotedetailDeletelöschen
690salesquotesfrombcdeletequote—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.

4.8.28 - 710 · opportunityproductsnewfromce

Technisches Mapping des Jobs opportunityproductsnewfromce (CEOpportunityProducts).
EigenschaftWert
Order710
Jobopportunityproductsnewfromce
MappingCEOpportunityProducts
RichtungCE → BC
QuellverbindungCRM_Test
ZielverbindungBC_Test
Quelltabelle (API)opportunityproduct aus BC_Test-seitig, kein API-Pfad
Zieltabelleacdopportunitycalculationelements
Zeitplan0 */3 * * * *
FilterJSON-Filter: IsNull(wysa_bcsystemid) UND OptionSetValue(wysa_synctobc=799840000)
Watermark—
Response-Jobopportunityproductsresponsefrombc
Fachliche DokuNeue Verkaufschancen-Position nach BC

Feldzuordnung

QuellfeldZielfeldOperationDetails
descriptiondescription——
wysa_marginprofitLCY——
wysa_bcamountamountLCY——
wysa_bcamountvatamountIncludingVATLCY——
_opportunityid.wysa_bcopportunitynumberopportunityNoLookupValueliest wysa_bcopportunitynumber aus opportunity über opportunityid (kein Cache)
_productid.wysa_bccodeopportunityElementCodeLookupValueliest wysa_bccode aus product über productid
quantityquantity——
wysa_bcsystemidsystemId— · Schlüssel—

Alternate Key

{
  "keyType": "Id",
  "keyName": "wysa_bcsystemid",
  "ignoreEmptySourceKey": false,
  "keyRank": 0
}

Weitere technische Details

Transformationen im Detail

Beide Lookups mit LookupType: Attribute:

QuellfeldNachschlagetabelleNachschlagefeldZielfeld
opportunityidopportunitywysa_bcopportunitynumberopportunityNo
productidproductwysa_bccodeopportunityElementCode
{
  "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.

4.8.29 - 750 · opportunityproductsupdatesfromce

Technisches Mapping des Jobs opportunityproductsupdatesfromce (CEOpportunityProductsUpdates).
EigenschaftWert
Order750
Jobopportunityproductsupdatesfromce
MappingCEOpportunityProductsUpdates
RichtungCE → BC
QuellverbindungCRM_Test
ZielverbindungBC_Test
Quelltabelle (API)opportunityproduct aus BC_Test-seitig, kein API-Pfad
Zieltabelleacdopportunitycalculationelements
Zeitplan0 */3 * * * *
FilterJSON-Filter: NotNull(wysa_bcsystemid) UND OptionSetValue(wysa_synctobc=799840000)
Watermark—
Response-Job—
Fachliche DokuÄnderungen nach BC (Verkaufschancen-Position)

Feldzuordnung

QuellfeldZielfeldOperationDetails
descriptiondescription——
wysa_marginprofitLCY——
wysa_bcamountamountLCY——
wysa_bcamountvatamountIncludingVATLCY——
_opportunityidopportunityNoLookupValueliest wysa_bcopportunitynumber aus opportunity über opportunityid (kein Cache)
_productidopportunityElementCodeLookupValueliest wysa_bccode aus product über productid
quantityquantity——
wysa_bcsystemidid— · 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-ZielfeldsystemIdid
Response-Job✓ opportunityproductsresponsefrombc–
Feldzuordnungen88

Beide Lookups sind identisch zu denen in opportunityproductsnewfromce:

QuellfeldNachschlagetabelleNachschlagefeld
opportunityidopportunitywysa_bcopportunitynumber
productidproductwysa_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.

4.8.30 - 760 · opportunityproductsresponsefrombc

Technisches Mapping des Jobs opportunityproductsresponsefrombc (BCOpportunityProductsResponse).
EigenschaftWert
Order760
Jobopportunityproductsresponsefrombc
MappingBCOpportunityProductsResponse
RichtungBC → CE
QuellverbindungBC_Test
ZielverbindungCRM_Test
Quelltabelle (API)acdopportunitycalculationelements aus singhammerITConsulting/dyce/v2.0
Zieltabelleopportunityproduct
Zeitplan—, wird von opportunityproductsnewfromce über ResponseJob ausgelöst
Filter{{lastModifiedDateTime gt %watermark%}}
WatermarklastModifiedDateTime (Typ datetime)
Response-Job—
Fachliche DokuRückmeldung aus BC (Verkaufschancen-Position)

Feldzuordnung

QuellfeldZielfeldOperationDetails
systemIdwysa_bcsystemid——
_opportunityproductidopportunityproductidReadFromMessage · Schlüsselaus 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.