Verknüpfungen zwischen Objekttypen
Bei der Synchronisation verschiedener Objekttypen (z. B. Firma ↔ Kontakt, Kontakt ↔ Verkaufschance) müssen häufig auch deren Beziehungen/Verknüpfungen übertragen werden.
Spezialisierte Syncs erledigen dies in der Regel automatisch. Werden unbekannte Objekttypen oder Konstellationen mit dem Universal Sync verwendet, muss die Verknüpfungslogik explizit konfiguriert werden.
Grundprinzipien
- Ziel: Im Zielsystem soll eine korrekte Referenz (ID) auf das verknüpfte Objekt stehen (z. B.
Kontakt.AccountId = Firma.Id). - Pfadwahl: Zwei etablierte Wege:
- Verknüpfung über Datensatz-Abbildungen (bevorzugt)
- Verknüpfung über Suchen (wenn keine Abbildungen verfügbar sind)
- Zeitliche Abhängigkeiten: Verknüpfungen gelingen nur, wenn die benötigten Ziel-IDs bereits bekannt sind (siehe Abhängigkeiten in der Ausführung).
Ansatz A – Verknüpfungen über Datensatz-Abbildungen (empfohlen)
Wenn die beteiligten Objekttypen mit Datensatz-Abbildungen synchronisiert werden, existiert bereits eine Zuordnung von Quell-ID → Ziel-ID.
Vorteile
- Keine zusätzlichen Zielsystem-Abfragen (schneller, API-schonend)
- Eindeutige Ergebnisse aus eigener Datenbank
- Robust gegen Zielsystem-Änderungen, solange Abbildungen konsistent sind
Vorgehen (Schritt für Schritt)
Transformation hinzufügen:
In der Transformation des Syncs eine neue Aktion „Datensatz-Abbildung abfragen“ einfügen.Sync auswählen:
Im Feld „Sync“ jenen Sync wählen, der den zu verknüpfenden Objekttyp überträgt
(Beispiel: FürKontakt.AccountIdden Sync, der Firma synchronisiert).Richtung & Suchwert festlegen:
- Quell- oder Ziel-ID für die Suche wählen (abhängig davon, welche ID Sie im aktuellen Datensatz besitzen).
- Im Suchfeld einen Platzhalter auf ein Quellfeld setzen, das die ID des verknüpften Datensatzes enthält
(z. B.#CompanyId#).
Präfix (optional):
Für die lesbaren Ergebnisfelder einen Präfix vergeben (z. B.GDM_).Resultat-Felder nutzen:
Die Transformation ergänzt automatisch (mit Präfix):SourceId– ID auf Quellseite der AbbildungTargetId– Ziel-ID für die VerknüpfungTargetIsDeleted– Kennzeichen, falls Ziel im Zielsystem nicht (mehr) vorhanden ist
Feldzuordnung:
Weisen Sie<Präfix>TargetIddem Zielfeld zu (z. B.Kontakt.AccountId ← #GDM_TargetId#).
Hinweis bei zusammengesetzten IDs:
Hat ein System mehrere ID-Felder pro Datensatz (Composite Keys), verwendet die Abbildung eine Feldnotation (z. B.NameA|:|KeyA|;|NameB|:|KeyB|;|).
Der Suchwert muss dieser Notation entsprechen – konstruieren Sie ihn aus mehreren Platzhaltern innerhalb der Transformation.
Beispiel (Kontakt → Firma)
- Gegeben:
Kontakt.CompanySourceId(Quell-ID der Firma) - Transformation:
- Aktion: Datensatz-Abbildung abfragen (Sync: Firma-Sync)
- Suche über Quell-ID =
#CompanySourceId# - Präfix =
GDM_
- Zuordnung:
Kontakt.AccountId ← #GDM_TargetId# - Prüfung (Vorbedingung):
'#GDM_TargetId#' <> ''
Ansatz B – Verknüpfungen über Suchen im Zielsystem
Wenn keine Datensatz-Abbildungen verfügbar sind, kann die Ziel-ID per Suche ermittelt werden.
Voraussetzung: Das Zielsystem unterstützt Abfragen/Suchen und liefert eindeutige Treffer.
Nachteile
- Zusätzliche Abfragen → längere Laufzeit
- Erhöhter API-Verbrauch
- Risiko mehrdeutiger Treffer (keine eindeutige Zuordnung)
Transformationen für Abfragen
- „Daten abfragen“
Suche in Quelle oder Ziel anhand eines Schemaobjekts. Unterstützt Filter (SQL/OData/Systemspezifisch), Sortierung und Spaltenauswahl. - „Abfrage ausführen“
Freies Abfrage-Statement (SQL/URL) gegen eine beliebige Verbindung – ähnlich einem Abfrage-Sync.
Vorgehen (empfohlen mit „Daten abfragen“)
- Verbindung: Zielsystem wählen (es wird die Ziel-ID benötigt).
- Tabelle/Scheme: Relevantes Schemaobjekt (z. B.
Account) auswählen. - Filter: Systemspezifische Suchbedingung formulieren
-
-
- OData:
?$filter=ExternalId eq '#CompanySourceId#'
- OData:
-
-
- Sortierung (optional): Eindeutigkeit unterstützen (z. B.
UpdatedAt desc). - Spaltenauswahl: Mindestens ID-Feld übernehmen, mit Präfix (z. B.
ZQ_TargetId) in die Quelldaten schreiben. - Feldzuordnung:
Kontakt.AccountId ← #ZQ_TargetId#.
Optimierung: Speichern Sie – wenn möglich – die Quell-ID als Referenz im Ziel (z. B.
Account.ExternalId = ERP.CompanyId). Das erhöht die Eindeutigkeit und vereinfacht Filter.
Abhängigkeiten in der Ausführung
Verknüpfungen gelingen nur, wenn die Ziel-ID vorliegt.
Vorbedingung für Neuanlage: Datensatz zurückstellen, bis ID vorhanden ist:
'#ZQ_TargetId#' <> ''
Wiederholungen: Anzahl über „Maximale Anzahl an fortlaufenden Wiederholungen“ begrenzen/steuern.
Abläufe/Verkettungen: Reihenfolge (z. B. Firma vor Kontakt) mit Ablauf absichern.
Fehlerbilder & Behandlung
| Problem | Ursache | Maßnahme |
|---|---|---|
| Kein Treffer | Falscher/zu enger Filter | Filter prüfen, Referenzfeld im Ziel etablieren (ExternalId). |
| Mehrdeutige Treffer | Unklare Kriterien | Filter präzisieren, Sortierung, eindeutiges Feld schaffen. |
| ID später verfügbar | Reihenfolge/Intervall unpassend | Vorbedingung + Wiederholungen/Intervalle anpassen. |
Best Practices
- Abbildungen bevorzugen, Suchweg nur bei Bedarf.
- Eindeutige Schlüssel (ExternalId/Composite Keys) im Ziel etablieren.
- Vorbedingung nutzen, um Reihenfolge sicherzustellen.
- Performance: Abfragen sparsam einsetzen.
Flussübersicht
flowchart TD
A[Kontakt - Quelle] --> X2[Transform: Daten abfragen<br/>im Ziel → ZQ_TargetId]
X2 --> V{Vorbedingung '#ZQ_TargetId#' <> ''?}
V -- Ja --> Z[Kontakt speichern: AccountId = ZQ_TargetId]
V -- Nein --> R[Wiederholung im nächsten Lauf]