Das ist eine für den Ausdruck optimierte Ansicht des gesamten Kapitels inkl. Unterseiten.
Druckvorgang starten.
Zur Standardansicht zurückkehren.
Konnektoren
Die unterstützten Quell- und Zielsysteme: Dynamics 365, Dataverse, NAV und SQL-Datenbanken.
Jedes Quell- oder Zielsystem wird über einen Konnektor angebunden. Ein Konnektor
übernimmt die systemspezifische Kommunikation: Authentifizierung, Datenabfrage,
Änderungserkennung und das Schreiben von Datensätzen.
Unterstützte Konnektoren
| Konnektor | Beschreibung | Lesen | Job-Filter | Schreiben | Status |
|---|
| D365BC | Dynamics 365 Business Central | ✅ | ✅ | ✅ | Freigegeben |
| D365CE | Dynamics 365 / Dataverse | ✅ | ✅ | ✅ | Freigegeben |
| D365NAV | Microsoft Dynamics NAV | ✅ | ✅ | ✅ | Freigegeben |
| MSSQL | Microsoft SQL Server | ⚠️ Preview | ✅ | — | Preview |
| MySQL | MySQL / MariaDB | ⚠️ Preview | — | — | Preview, nicht produktionsreif |
| Oracle | Oracle Database | ⚠️ Preview | — | — | Preview, nicht produktionsreif |
| PostgreSQL | PostgreSQL | ⚠️ Preview | — | — | Preview |
| OpenAPI | Generische REST-API über OpenAPI-Spezifikation | ✅ | ⚠️ API-abhängig | ✅ (inkl. Löschen) | In Entwicklung |
Die Konnektoren D365BC, D365CE und D365NAV kommunizieren über HTTP/OData-APIs.
MSSQL, MySQL, Oracle und PostgreSQL verwenden direkte Datenbankverbindungen (ADO.NET).
Der OpenAPI-Konnektor kommuniziert ebenfalls über HTTP, leitet Pfade, Wrapper-Schlüssel und
Feldtypen jedoch aus einer OpenAPI-Spezifikation ab, statt sie fest zu verdrahten.
Zur Spalte Job-Filter
Die Spalte gibt an, ob das Feld Filter des Jobs vom Konnektor tatsächlich ausgewertet
wird. Bei MySQL, Oracle und PostgreSQL wird der Filter ignoriert — diese
Konnektoren lesen bei jedem Lauf den vollständigen Tabelleninhalt, unabhängig davon, was
im Job eingetragen ist.
Bei D365CE erfolgt die Auswertung nicht im Quellsystem, sondern clientseitig nach dem
Abruf. Siehe Jobs → Filter-Syntax.
Schreiben in SQL-Systeme
Keiner der vier SQL-Konnektoren unterstützt das Schreiben. Ein SQL-System als
TargetConnection führt zur Laufzeit zu einem Abbruch. Die SQL-Konnektoren sind derzeit
ausschließlich als Quellsystem einsetzbar.
Der OpenAPI-Konnektor
Der OpenAPI-Konnektor unterscheidet sich grundlegend von den übrigen HTTP-
Konnektoren: Er ist nicht auf ein bestimmtes System zugeschnitten, sondern bindet
beliebige REST-APIs an, für die eine OpenAPI-Spezifikation vorliegt. Pfade,
Wrapper-Schlüssel und Feldtypen werden zur Laufzeit aus der Spezifikation aufgelöst, statt
je System hartcodiert zu sein. Er befindet sich aktuell noch in Entwicklung.
Versionsangaben
Die auf den Konnektor-Seiten genannten Mindestversionen sind getestete Versionsstände.
Die DataBridge prüft die Version des angebundenen Systems nicht — ältere Stände können
funktionieren, sind aber nicht abgesichert. Bei Fragen zu einer konkreten Version bitte
WYSA kontaktieren.
1 - D365BC — Business Central
Konnektor für Microsoft Dynamics 365 Business Central. Unterstützt Lesen und Schreiben über OData v4.
Der D365BC-Konnektor verbindet die DataBridge mit Microsoft Dynamics 365 Business Central
über die OData-v4-REST-API (API-Version 2.0). Er unterstützt sowohl Cloud-Umgebungen
(OAuth2) als auch OnPremise-Installationen (Basic Auth).
| Eigenschaft | Wert |
|---|
| Lesen | ✅ unterstützt |
| Schreiben | ✅ unterstützt |
| Job-Filter | ✅ wird als OData-$filter an BC übergeben |
| Status | Freigegeben |
| Getestete Mindestversion | Business Central v17.0 (Oktober 2020) |
Die Mindestversion wird nicht geprüft
Die Angabe zur Mindestversion beschreibt den getesteten Stand. Die DataBridge fragt die
Version von Business Central nicht ab und lehnt ältere Stände nicht ab. Ob eine ältere
Installation funktioniert, hängt allein davon ab, ob sie die verwendete API-Version 2.0
und die im Mapping genannten Felder bereitstellt.
Verbindungsparameter
Cloud-Umgebung (empfohlen)
{
"clientId": "<App-Registration Client ID>",
"clientSecret": "<App-Registration Client Secret>",
"tenantId": "<Entra Tenant ID>",
"environment": "<BC-Umgebungsname, z. B. production>",
"companyId": "<Company ID (GUID)>"
}
Cloud-Umgebung mit Managed Identity (ab v2.3)
Ohne Client Secret, über die Managed Identity der Function App:
{
"authmethod": "ManagedIdentity",
"clientId": "<Client-ID der user-assigned Identity, optional>",
"environment": "<BC-Umgebungsname, z. B. production>",
"companyId": "<Company ID (GUID)>"
}
- Ohne
clientId wird die system-zugewiesene Identity der Function App verwendet, mit clientId die benutzer-zugewiesene. clientSecret und tenantId sind nicht nötig. Der Token wird mit dem scope der Connection angefordert und rechtzeitig vor Ablauf erneuert.- Managed Identity wird nur über
authmethod aktiviert, nie automatisch. - Voraussetzung: Die Identity ist in Business Central unter Microsoft-Entra-Anwendungen angelegt, aktiviert und mit Berechtigungssätzen versehen.
OnPremise-Umgebung
{
"userName": "<domain\\benutzername>",
"password": "<Passwort>",
"url": "https://<server>:<port>/<pfad>",
"companyId": "<Company ID (GUID)>"
}
Ist url gesetzt, wird daraus die Basisadresse gebildet (<url>/api/) und environment
nicht ausgewertet. Ist url leer, verwendet der Konnektor den Cloud-Endpunkt und bildet
die Adresse aus environment.
Die Auswahl des Authentifizierungsverfahrens erfolgt automatisch: Sind userName und
password gesetzt, wird Basic Auth verwendet, andernfalls OAuth2 Client Credentials aus
clientId, clientSecret und tenantId. Mit authmethod lässt sich die Methode ausdrücklich festlegen.
Optionale Parameter
Gelten für Cloud und OnPremise:
| Parameter | Standardwert | Beschreibung |
|---|
scope | https://api.businesscentral.dynamics.com/.default | OAuth2-Scope beim Token-Abruf |
maxPageSize | 5000 | Maximale Datensätze pro Abruf-Seite |
language | de-DE | Kultur für die Interpretation von Zahlen- und Datumsformaten |
httpClientTimeoutSeconds | 100 | Zeitlimit für einzelne HTTP-Aufrufe in Sekunden |
keyVaultUrl | (leer) | Key-Vault-Secret-URL; ersetzt sämtliche übrigen Parameter |
logCreateRequests | false | Protokolliert die vollständigen Anfragen beim Anlegen |
logUpdateRequests | false | Protokolliert die vollständigen Anfragen beim Aktualisieren |
logReceivedData | false | Protokolliert die vollständigen Antwortdaten |
Die drei Diagnose-Schalter erzeugen erhebliche Datenmengen und können Geschäftsdaten im
Klartext protokollieren — nur gezielt für die Dauer einer Analyse aktivieren.
Vollständige Beschreibung unter Verbindungen.
Tabellen- und Feldnamen
SourceTable / TargetTable
Der Tabellenname leitet sich aus dem API-Pfad der Business-Central-API v2.0 ab —
ohne den Company-Teil der URL.
| API-Typ | URL-Struktur | SourceTable |
|---|
| Standard-API | .../api/v2.0/companies({id})/customers | v2.0/customers |
| Custom API | .../api/{publisher}/{product}/{version}/entities | {publisher}/{product}/{version}/entities |
SourceField / TargetField
Exakter Feldname aus der BC-API-Seite (case-sensitive). Zu finden in der
BC-API-Dokumentation oder über den API-Explorer in Business Central.
Unterstützte TargetKey-Typen
| Typ | Beschreibung |
|---|
PrimaryKey | Systemnativer BC-Primärschlüssel. Der Wert wird in Anführungszeichen gesetzt. |
Id | BC-interne ID (GUID). Der Wert wird ohne Anführungszeichen eingesetzt. |
CustomKey | Benutzerdefinierter Schlüssel über ein oder mehrere Felder |
Filter | Suche über Feldwert-Kombination |
PrimaryKey und Id sind nicht austauschbar
Der einzige Unterschied in der erzeugten Anfrage ist die Quotierung: PrimaryKey setzt
den Wert in einfache Anführungszeichen, Id nicht. Wird der falsche Typ gewählt, entsteht
eine syntaktisch ungültige OData-Adresse — eine GUID in Anführungszeichen oder ein
Textschlüssel ohne Anführungszeichen. Business Central quittiert das mit einem
Syntaxfehler, nicht mit einem leeren Ergebnis.
Statische Schlüsselwerte (ab v2.1)
In einem KeyValue kann statt attributeName ein StaticValue angegeben werden. Der
Schlüsselteil wird dann nicht aus dem Quelldatensatz gelesen, sondern fest gesetzt.
{
"KeyType": "CustomKey",
"KeyName": "wysa_number",
"KeyValues": [
{ "keyName": "sourceSystem", "StaticValue": "DataBridge", "rank": 1 },
{ "keyName": "customerNo", "attributeName": "bcCustomerNo", "rank": 2 }
]
}
Statische Werte werden für die BC-Metadatentypen string, guid und int32 unterstützt.
Bei jedem anderen Typ des Schlüsselfeldes bricht die Verarbeitung mit einem Fehler ab
(Metadata type … not yet implemented for CreateKeyString).
Quotierung von String-Schlüsseln seit v2.1 korrigiert
Bis einschließlich v2.0 wurden Schlüsselwerte vom Typ string ohne umschließende
Anführungszeichen in den $filter geschrieben. Ein mehrteiliger Schlüssel mit einem
String-Anteil führte dadurch zu einer ungültigen Filterabfrage gegen BC. Seit v2.1 wird
korrekt quotiert.
SourceOperations
LookupValue
Liest einen Wert aus einer anderen BC-API-Tabelle nach.
{
"Operations": [
{
"Name": "LookupValue",
"Parameters": {
"LookupType": "Attribute",
"SourceField": "countryRegionCode",
"LookupTable": "publisher/product/v1.0/countriesRegions",
"LookupField": "name",
"UseCache": true
}
}
]
}
LookupType kennt die beiden Werte Attribute und Name. Business Central
unterstützt ausschließlich Attribute; der Wert Name führt zu einem Abbruch
(SourceOperation for Lookups). Name ist dem D365CE-Konnektor vorbehalten.
ReadFromMessage
Liest einen Wert aus der BC-Antwort — nur in ResponseJobs.
Das SourceField muss einen _-Prefix haben.
{
"Operations": [
{
"Name": "ReadFromMessage"
}
]
}
Datentypen — Zieltyp und akzeptierte Quelltypen
Beim Schreiben bestimmt der Datentyp des Zielfeldes in den BC-Metadaten, welche
Umwandlung angewendet wird. Der Quelltyp stammt aus dem Feldtyp des Quellsystems und
entscheidet, ob die Umwandlung gelingt.
| Zieltyp (BC-Metadaten) | Akzeptierte Quelltypen | Verhalten und Sonderfälle |
|---|
Boolean | boolean, string | Leerwert → null. Ein nicht als Wahrheitswert lesbarer Text führt zum Abbruch. |
Date | date, datetime, string | Ausgabe im Format yyyy-MM-dd. Leerwert → 0001-01-01. Nicht lesbares Datum → Abbruch. |
DateTimeOffset | date, datetime, string | Ausgabe im Format yyyy-MM-ddTHH:mm:ss.fffZ. Leerwert → 0001-01-01T00:00:00.000Z. |
Decimal | decimal, money, double | Interpretation mit der Kultur aus language. Leerwert → null. |
Decimal | string (ab v2.1) | Interpretation immer als en-US (Punkt als Dezimaltrennzeichen), unabhängig von language. |
Double (ab v2.1) | decimal, money, double | Interpretation mit der Kultur aus language. string wird nicht akzeptiert und führt zum Abbruch. |
Guid | guid, string, entityreference | Leerwert → 00000000-0000-0000-0000-000000000000, nicht null. |
Int32 | int32, optionsetvalue, string | Leerwert → null. Nicht als Ganzzahl lesbarer Wert → Abbruch. |
String | alle Quelltypen | Wert wird getrimmt. Leerwert → leerer String, das Zielfeld wird also geleert. Liegt eine OptionMapping-TargetOperation vor, wird stattdessen der zugeordnete Wert geschrieben; ein unbekannter Quellwert führt zum Abbruch. |
Jeder in der Tabelle nicht genannte BC-Zieltyp führt beim Schreiben zu einem Abbruch
(No Resolver defined for edmPrimitiveTypeKind …).
Leerer String leert das Zielfeld
Business Central und NAV verhalten sich hier unterschiedlich: Der BC-Konnektor liefert
für einen leeren Quellwert einen leeren String und überschreibt damit den bisherigen
Inhalt des Zielfeldes. Der NAV-Konnektor liefert stattdessen null — das
Feld bleibt dort unverändert.
Schreibvorgang und Fehlerverhalten
Vor jedem Schreibvorgang sucht der Konnektor den bestehenden Zieldatensatz — je nach
TargetKey-Typ über den Schlüssel oder über einen Filter. Wird ein Datensatz gefunden,
erfolgt ein Update, andernfalls eine Neuanlage.
Seit v2.1 kein stilles Überspringen mehr
Bis v2.0 lieferte die Suche nach einem bestehenden Datensatz bei einem unerwarteten
HTTP-Status (etwa 500 oder 403) einen Leerwert zurück — für die DataBridge
ununterscheidbar von einem nicht vorhandenen Datensatz. Die Folge war eine Neuanlage und
damit Dubletten im Zielsystem.
Seit v2.1 werden ausschließlich Erfolgsmeldungen und 404 als gültige Antworten
akzeptiert. Jeder andere Status löst eine Ausnahme aus; die Verarbeitung der Nachricht
schlägt fehl und wird über die Service-Bus-Wiederholung erneut versucht.
ResponseJob — BC-IDs zurückschreiben
Wenn BC beim Anlegen eines Datensatzes eine neue ID vergibt (z. B. die Kundennummer),
kann diese über einen ResponseJob automatisch ins Quellsystem zurückgeschrieben werden.
Beispiel: CE-Kontakt nach BC anlegen und BC-ID zurück nach CE schreiben
Job A (Hauptjob):
SourceConnection: ce-produktion
TargetConnection: bc-produktion
Mapping: ce-contact-to-bc-customer
ResponseJob: bc-id-back-to-ce
IsActive: true
Job B (ResponseJob):
SourceConnection: bc-produktion
TargetConnection: ce-produktion
Mapping: bc-response-to-ce-contact
IsActive: false
Mapping für Job B — das BC-ID-Feld:
| SourceField | TargetField | SourceOperation |
|---|
_id | wysa_bcid | ReadFromMessage |
Änderungserkennung (Watermark)
| Eigenschaft | Wert |
|---|
| Empfohlener WatermarkType | datetime |
| Typisches WatermarkField | lastModifiedDateTime |
| Filterformat | {{lastModifiedDateTime gt %watermark%}} |
Business Central liefert für jede Entität ein lastModifiedDateTime-Feld,
das beim Speichern automatisch aktualisiert wird.
Der Filterausdruck aus dem Job wird als OData-$filter an die BC-Anfrage angehängt.
Die Regeln zur Klammerung und zum Platzhalter %watermark% sind unter
Jobs → Filter-Syntax beschrieben.
2 - D365CE — Dataverse / Customer Engagement
Konnektor für Microsoft Dataverse und Dynamics 365 Customer Engagement. Unterstützt Lesen und Schreiben.
Der D365CE-Konnektor verbindet die DataBridge mit Microsoft Dataverse und
Dynamics 365 Customer Engagement über das offizielle Dataverse SDK.
Er nutzt die Change Tracking API für eine lückenlose Erkennung aller Änderungen.
| Eigenschaft | Wert |
|---|
| Lesen | ✅ unterstützt |
| Schreiben | ✅ unterstützt |
| Job-Filter | ✅ clientseitig nach dem Abruf |
| Status | Freigegeben |
| Getestete Mindestversion | Dataverse / D365CE v9.1 |
Die Mindestversion beschreibt den getesteten Stand; eine Versionsprüfung findet im Code
nicht statt.
Voraussetzung: Change Tracking aktivieren
Für alle Dataverse-Tabellen, die als Quelle genutzt werden, muss Change Tracking
aktiviert sein. Ohne Change Tracking kann der Konnektor keine Differenzabfragen
durchführen.
Aktivierung: Power Platform Admin Center → Umgebung → Tabellen → Tabelle auswählen
→ Eigenschaften → Änderungsnachverfolgung aktivieren ✅
Verbindungsparameter
{
"connectionstring": "<XRM-Connection-String>"
}
Beispiel (Client Secret Authentication):
AuthType=ClientSecret;Url=https://<org>.crm4.dynamics.com;ClientId=<id>;ClientSecret=<secret>
Alternative: Managed Identity (ab v2.3)
Statt eines Connection-Strings mit Secret kann die Verbindung über eine Managed Identity
aufgebaut werden:
{
"url": "https://<org>.crm4.dynamics.com",
"clientid": "<Client-ID der user-assigned Identity, optional>"
}
- Ohne
clientid wird die system-zugewiesene Identity der Function App verwendet, mit clientid die benutzer-zugewiesene. - Ist
connectionstring gesetzt, hat er immer Vorrang; url wird dann ignoriert. - Sind weder
connectionstring noch url gesetzt, bricht der Verbindungsaufbau mit einem Fehler ab. - Voraussetzung: Die Identity ist in der Dataverse-Umgebung als Application User angelegt und hat eine passende Sicherheitsrolle (Power Platform Admin Center → Umgebung → Einstellungen → Benutzer + Berechtigungen → Anwendungsbenutzer).
Die vollständige XRM-Connection-String-Referenz findet sich in der
Microsoft-Dokumentation.
Zusätzlich stehen die universellen Parameter keyVaultUrl, maxPageSize, language und
httpClientTimeoutSeconds zur Verfügung — siehe
Verbindungen.
Tabellen- und Feldnamen
SourceTable / TargetTable
Logischer Entitätsname in Kleinbuchstaben — so wie er in den Dataverse-Metadaten steht.
| Entität | SourceTable |
|---|
| Account | account |
| Contact | contact |
| Custom Entity | wysa_bcsegment |
SourceField / TargetField
Logischer Attributname in Kleinbuchstaben.
| Attribut | SourceField |
|---|
| Account Name | name |
| Custom Field | wysa_bcsystemid |
Unterstützte TargetKey-Typen
| Typ | Beschreibung |
|---|
PrimaryKey | Dataverse GUID (Primärschlüssel der Entität) |
CustomKey | Benutzerdefinierter Schlüssel über ein oder mehrere Felder (Alternate Key) |
Filter | Suche über Feldwert-Kombination ohne expliziten Schlüssel |
Bei CustomKey werden Schlüsselteile vom Typ int32, guid und string unterstützt;
jeder andere Typ führt zum Abbruch (keytype … not yet supported for key …).
Leere Schlüsselteile werden übersprungen — bleibt danach kein Teil übrig, gilt der
Schlüssel als nicht auflösbar.
Ist der Alternativschlüssel in Dataverse nicht angelegt oder nicht aktiv, bricht die Suche
mit einem Fehler ab (ab v2.3). Die Nachricht landet nach den Wiederholungen in der
Dead-Letter-Queue und wird nicht als neuer Datensatz angelegt. Bis v2.2 wurde dieser
Fall wie „Datensatz nicht gefunden“ behandelt, was zu Dubletten führen konnte.
Ein KeyValue kann statt attributeName ein StaticValue enthalten; der Schlüsselteil
wird dann fest gesetzt und als Typ string behandelt.
Der Typ `Id` existiert im CE-Konnektor nicht
Anders als bei D365BC und D365NAV kennt der CE-Konnektor
keinen TargetKey-Typ Id. Ein unbekannter oder falsch geschriebener KeyType löst
keinen Fehler aus, sondern nur eine Warnung im Log
(Undefined Key definition for InitiateEntityWithKey); der Schlüssel gilt anschließend
als nicht auflösbar.
Für die Fehlersuche bedeutet das: Ein Lookup, das dauerhaft leer bleibt, oder ein Upsert,
der scheinbar wirkungslos ist, kann schlicht an einem ungültigen KeyType liegen. Der
Hinweis erscheint ausschließlich als Warnung, nicht als Ausnahme.
Mehrere Ziel-Schlüssel mit Rangfolge (ab v2.1)
Statt eines einzelnen TargetKey lässt sich eine Liste TargetKeys angeben. Die
Schlüssel werden nach KeyRank aufsteigend geprüft; der erste Schlüssel, der im
Zielsystem einen Datensatz findet, gewinnt — alle weiteren werden übersprungen.
{
"Operations": [
{
"Name": "Lookup",
"Parameters": {
"TargetTable": "wysa_countryregion",
"TargetKeys": [
{
"KeyType": "CustomKey",
"KeyRank": 1,
"KeyName": "wysa_externalid",
"KeyValues": [
{ "keyName": "wysa_externalid", "attributeName": "externalId", "rank": 1 }
]
},
{
"KeyType": "CustomKey",
"KeyRank": 2,
"KeyName": "wysa_code",
"KeyValues": [
{ "keyName": "wysa_code", "attributeName": "countryRegionCode", "rank": 1 }
]
}
]
}
}
]
}
Bestehende Mappings mit einem einzelnen TargetKey funktionieren unverändert weiter.
SourceOperations
LookupValue
Liest einen Wert aus einem verknüpften Dataverse-Datensatz nach.
{
"Operations": [
{
"Name": "LookupValue",
"Parameters": {
"LookupType": "Attribute",
"SourceField": "wysa_countrycode",
"LookupTable": "wysa_country",
"LookupField": "wysa_name",
"UseCache": true
}
}
]
}
LookupType kennt zwei Werte. Nur der CE-Konnektor unterstützt beide:
| Wert | Wirkung |
|---|
Attribute | Der genannte LookupField-Wert wird aus dem verknüpften Datensatz gelesen |
Name | Der Anzeigename der Referenz wird direkt aus dem Quelldatensatz übernommen — ohne zusätzliche Abfrage |
Vorab-Zwischenspeicherung von Lookups (ab v2.1)
Der CE-Konnektor löst benötigte Lookup-Werte vor der Verarbeitung eines Batches gebündelt
auf und legt sie im Cache ab. Die IDs werden dazu in Blöcken zu je 1.000 Stück abgefragt,
statt jeden Wert einzeln nachzuschlagen. Das beschleunigt die Verarbeitung großer
Änderungsmengen spürbar.
Die Vorab-Auflösung greift nur bei UseCache: true. Ohne diese Option bleibt es bei
Einzelabfragen. Die Funktion ist dem CE-Konnektor vorbehalten — D365BC und D365NAV
verfügen nicht darüber.
ReadFromMessage
Liest Werte aus einer vorherigen Quellanfrage — nur in ResponseJobs.
Verhalten wie beim D365BC-Konnektor.
ActivityParty
Liest ein Feld über eine ActivityParty-Beziehung. Wird für CE-Aktivitäten
(E-Mails, Aufgaben, Anrufe) verwendet, bei denen Teilnehmer über den
activityparty-Datensatz verknüpft sind.
{
"Operations": [
{
"Name": "ActivityParty",
"Parameters": {
"PartyParams": {
"TypeMask": 2,
"SourceField": "activityid",
"TargetField": "wysa_number",
"TargetTable": "contact"
}
}
}
]
}
TypeMask entspricht dem Dataverse-Feld participationtypemask und wird von der
DataBridge unverändert an die Abfrage durchgereicht. Die gültigen Werte gibt die
Dataverse-Plattform vor; die gebräuchlichsten sind:
| TypeMask | Teilnehmerrolle |
|---|
1 | From (Absender) |
2 | To (Empfänger) |
3 | CC |
4 | BCC |
Diese Tabelle ist eine Plattform-Referenz, keine Festlegung der DataBridge. Die
verbindliche und vollständige Liste steht in der Microsoft-Dokumentation zur Entität
activityparty.
LinkToRecord
Erzeugt eine anklickbare URL zu einem Datensatz in Dataverse.
{
"Operations": [
{
"Name": "LinkToRecord",
"Parameters": {
"BaseUrl": "https://<org>.crm4.dynamics.com/main.aspx?appid=<AppId>&pagetype=entityrecord"
}
}
]
}
TargetOperations
Lookup
Befüllt ein Lookup-Feld in Dataverse, indem der verknüpfte Datensatz über eine
Feldwert-Kombination gesucht wird. Die Operation gehört in die Spalte TargetOperation
des Mappings und benötigt zwingend den Operations-Rahmen, den Namen Lookup sowie
TargetTable.
{
"Operations": [
{
"Name": "Lookup",
"Parameters": {
"TargetTable": "wysa_countryregion",
"TargetKey": {
"KeyType": "CustomKey",
"KeyName": "wysa_code",
"KeyValues": [
{ "keyName": "wysa_code", "attributeName": "countryRegionCode", "rank": 1 }
]
}
}
}
]
}
TargetTable ist Pflicht
Ohne TargetTable ist nicht bestimmt, in welcher Entität gesucht werden soll — die
Operation schlägt fehl. Fehlt der Operations-Rahmen oder der Name, wird die Operation
gar nicht erst erkannt und die Verarbeitung bricht mit Lookup Operation missing ab.
Wird kein passender Datensatz gefunden, legt die DataBridge standardmäßig einen neuen an.
Weitere Parameter der TargetOperation
| Parameter | Wirkung |
|---|
TargetTable | Entität, in der gesucht wird. Bei Lookup Pflicht. |
TargetKey / TargetKeys | Schlüssel bzw. Schlüsselliste zur Suche (siehe oben) |
DefaultValue | Fester Wert, der ohne Suche gesetzt wird. Bei Lookup-Feldern eine GUID; bei Options-Feldern der numerische Optionswert. |
SetNullIfEqualsValueOfField | Name des Primärschlüsselfeldes. Stimmt der aufzulösende Wert mit dem Schlüssel des Quelldatensatzes überein, wird null gesetzt statt eine Selbstreferenz zu erzeugen. |
OptionDelimiter | Trennzeichen, mit dem ein Quellwert für ein MultiSelect-Feld in Einzelwerte zerlegt wird |
DoNotCreate | true verhindert die automatische Neuanlage (siehe unten) |
DoNotCreate (ab v2.1)
Ist DoNotCreate auf true gesetzt, wird der Zieldatensatz eines Lookups nur dann
verknüpft, wenn er bereits existiert. Wird er nicht gefunden, bleibt das Feld leer —
es entsteht kein neuer Datensatz.
{
"Operations": [
{
"Name": "Lookup",
"Parameters": {
"TargetTable": "wysa_countryregion",
"DoNotCreate": true,
"TargetKey": {
"KeyType": "CustomKey",
"KeyName": "wysa_code",
"KeyValues": [
{ "keyName": "wysa_code", "attributeName": "countryRegionCode", "rank": 1 }
]
}
}
}
]
}
OptionMapping
Übersetzt Quellwerte in numerische Dataverse-Optionset-Werte.
{
"Operations": [
{
"Name": "OptionMapping",
"Parameters": {
"Mapping": [
{ "Key": "Blank", "Value": "" },
{ "Key": "Prospect", "Value": "383380000" },
{ "Key": "First_x002D_time_x0020_Donor", "Value": "383380001" },
{ "Key": "Recurring_x0020_Donor", "Value": "383380002" }
]
}
}
]
}
Ein leerer Value setzt das Zielfeld auf null. Ein Quellwert, der in der Liste nicht
vorkommt, führt zum Abbruch (Could not find TableMapping for …).
Kodierung von Sonderzeichen — Praxisbeobachtung
In der Praxis liefert Business Central Sonderzeichen in Optionswerten kodiert:
Leerzeichen als _x0020_, Bindestrich als _x002D_. Diese kodierten Werte sind als Key
exakt so einzutragen, wie sie von BC geliefert werden.
Es handelt sich um eine Beobachtung aus laufenden Installationen, nicht um eine
Umwandlung, die die DataBridge selbst vornimmt — der Vergleich erfolgt zeichengenau
(Groß-/Kleinschreibung wird ignoriert). Im Zweifel den tatsächlich gelieferten Wert über
logReceivedData an der Quellverbindung prüfen.
Datentypen — Zieltyp und akzeptierte Quelltypen
Beim Schreiben bestimmt der Attributtyp des Zielfeldes aus den Dataverse-Metadaten,
welche Umwandlung angewendet wird.
| Zielattribut (Dataverse) | Akzeptierte Quelltypen | Verhalten und Sonderfälle |
|---|
BigIntAttributeMetadata | int64, int32 | Leerwert → null |
BooleanAttributeMetadata | boolean, string, byte (ab v2.3), int32 (ab v2.3) | Leerwert → null; bei Ganzzahlen 0 → Nein, sonst Ja |
DateTimeAttributeMetadata | date, datetime, string | Leerwert → null; auch 0001-01-01 wird zu null |
DecimalAttributeMetadata | decimal, money | Interpretation mit der Kultur aus language |
DecimalAttributeMetadata | string (ab v2.1) | Interpretation immer als en-US, unabhängig von language |
DoubleAttributeMetadata | double, decimal | Interpretation mit der Kultur aus language. string wird nicht akzeptiert. |
EntityNameAttributeMetadata | alle Quelltypen | Wird als Text behandelt; Leerwert → null |
IntegerAttributeMetadata | int32, optionsetvalue, string | Leerwert → null |
LookupAttributeMetadata | typunabhängig | Erfordert eine Lookup- oder DefaultValue-TargetOperation, sonst Lookup Operation missing |
MemoAttributeMetadata | alle Quelltypen | Wird als Text behandelt; Leerwert → null |
MoneyAttributeMetadata | nur decimal | money, double und string führen zum Abbruch |
MultiSelectPicklistAttributeMetadata | nur string | Erfordert OptionMapping; Zerlegung über OptionDelimiter. Leerwert → null |
PicklistAttributeMetadata | string, int32 | Erfordert OptionMapping oder DefaultValue |
StateAttributeMetadata | boolean, string, int32, byte (ab v2.3) | Erfordert OptionMapping oder DefaultValue |
StatusAttributeMetadata | string, int32 | Erfordert OptionMapping oder DefaultValue |
StringAttributeMetadata | alle Quelltypen | Wert wird getrimmt; Leerwert → null |
Sonderfälle jenseits der Tabelle:
UniqueIdentifierAttributeMetadata sowie Primärschlüssel- und logische Attribute
(z. B. statuscodename) werden beim Schreiben stillschweigend übersprungenFileAttributeMetadata und ImageAttributeMetadata werden nicht unterstützt
(type not supported)- Jeder sonstige, nicht aufgeführte Attributtyp führt zum Abbruch
(
Type … not yet implemented)
Die Zahlentypen verhalten sich bewusst unterschiedlich
Die drei numerischen Zieltypen akzeptieren nicht dieselben Quelltypen:
Decimal akzeptiert seit v2.1 auch string — dann aber immer im Format en-US.
Ein deutsch formatierter Text wie 1.234,56 wird dabei falsch oder gar nicht gelesen.Money akzeptiert ausschließlich decimal. Ein Quellfeld, das als money oder
double typisiert ankommt, führt zum Abbruch — auch wenn der Wert inhaltlich passt.Double akzeptiert keinen string.
Zeigt ein Mapping Source Type not yet implemented, liegt in aller Regel eine dieser drei
Abweichungen vor.
Sonderentitäten
Einige Dataverse-Entitäten werden nicht über den generischen Weg verarbeitet.
listmember — Marketinglisten
Datensätze der Entität listmember werden nicht über den generischen Schreibpfad
angelegt oder gelöscht, sondern über die Dataverse-Nachrichten AddMemberList bzw.
RemoveMemberList. Das Mapping muss daher die Felder listid und entityid befüllen —
sie liefern die Kennungen für die beiden Nachrichten.
Entitäten ohne statuscode
Für die folgenden Entitäten wird das Attribut statuscode beim Lesen automatisch aus der
Spaltenliste entfernt, weil sie es nicht besitzen:
| Entität |
|---|
listmember |
quotedetail |
opportunityproduct |
salesorderdetail |
Ein Job-Filter mit der Operation StatusCode ist für diese Entitäten folglich nicht
verwendbar.
Job-Filter
Der CE-Konnektor wertet das Feld Filter des Jobs clientseitig aus: Die Datensätze
werden über die Change Tracking API abgerufen und anschließend geprüft; nicht passende
Datensätze werden verworfen.
Unterstützt werden die Operationen Equals, Boolean, OptionSetValue, NotNull,
IsNull und StatusCode. Ein anderer Operationsname führt zum Abbruch
(Undefined FilterOperation).
Syntax, Parameter und Beispiele sind unter
Jobs → Filter-Syntax beschrieben.
Änderungserkennung (Watermark)
| Eigenschaft | Wert |
|---|
| Empfohlener WatermarkType | string |
| WatermarkField | beliebig (wird von der Change Tracking API intern verwaltet) |
Der CE-Konnektor nutzt die Dataverse Change Tracking API. Diese liefert bei jedem
Abruf einen opaken Token, der beim nächsten Aufruf übergeben wird. So werden alle
Änderungen erfasst — auch wenn der Timer genau während einer Änderung ausgeführt wird.
3 - D365NAV — Microsoft Dynamics NAV
Konnektor für Microsoft Dynamics NAV. Unterstützt Lesen und Schreiben über OData.
Der D365NAV-Konnektor verbindet die DataBridge mit Microsoft Dynamics NAV
über OData. Er ist auf die ältere NAV-API-Struktur ausgelegt und unterstützt auch
OnPremise-Installationen mit NTLM-Authentifizierung.
| Eigenschaft | Wert |
|---|
| Lesen | ✅ unterstützt |
| Schreiben | ✅ unterstützt |
| Job-Filter | ✅ wird als OData-$filter an NAV übergeben |
| Status | Freigegeben |
| Getestete Mindestversion | NAV 2018 |
Die Mindestversion wird nicht geprüft
Die Angabe beschreibt den getesteten Stand. Die DataBridge fragt die NAV-Version nicht
ab. Ältere Installationen können funktionieren, sofern sie OData mit $metadata
bereitstellen — abgesichert ist das jedoch nicht.
Nicht alle BC-Funktionen stehen auch in NAV zur Verfügung
Der NAV-Konnektor ist dem D365BC-Konnektor nachempfunden, aber nicht mit
ihm identisch. Die wichtigsten Abweichungen:
- Statische Schlüsselwerte (
StaticValue) werden nicht unterstützt. Die Schlüssel-
und Filtererzeugung greift stets auf attributeName zu; ein KeyValue ohne
attributeName führt zum Abbruch. - Ein leerer Textwert wird als
null geschrieben, nicht als leerer String — das
Zielfeld bleibt damit unverändert, statt geleert zu werden. LookupType: Name wird nicht unterstützt (siehe SourceOperations).
Verbindungsparameter
Cloud-Umgebung (OAuth2)
{
"clientId": "<App-Registration Client ID>",
"clientSecret": "<App-Registration Client Secret>",
"tenantId": "<Entra Tenant ID>",
"environment": "<NAV-Umgebungsname>",
"companyId": "<Company ID (GUID)>",
"url": "https://<server>/<pfad>/"
}
OnPremise-Umgebung (NTLM)
{
"userName": "<domain\\benutzername>",
"password": "<Passwort>",
"url": "https://<server>:<port>/<pfad>/",
"baseAddress": "https://<server>:<port>/",
"authenticationMethod": "NTLM"
}
`url` ist immer erforderlich — auch bei NTLM
baseAddress ersetzt url nicht. Sämtliche Anfrage-Adressen — Datenabruf,
Metadaten, Schreib- und Löschvorgänge — werden aus url gebildet. Fehlt der Parameter,
bricht der Konnektor beim ersten Aufruf mit einem Fehler ab.
baseAddress wird ausschließlich bei authenticationMethod = NTLM für den
NTLM-Credential-Cache verwendet und ist ansonsten entbehrlich.
Ein fehlender Schrägstrich am Ende von url wird automatisch ergänzt.
Die Metadaten werden eine Ebene oberhalb von url abgefragt. Aus
https://<server>:<port>/<instanz>/ODataV4/Company('CRONUS')/ wird also
https://<server>:<port>/<instanz>/ODataV4/$metadata. Antwortet der Server dort nicht mit einem
Erfolgsstatus, bricht der Konnektor mit Could not read Metadata from <URL> (StatusCode: …) ab.
`authenticationMethod` wirkt nur beim Wert NTLM
Nur der Wert NTLM (Groß-/Kleinschreibung egal) schaltet auf NTLM-Authentifizierung um —
und auch das nur, wenn zusätzlich userName und password gesetzt sind.
Bei jedem anderen Wert — auch beim Vorgabewert Basic — entscheidet die DataBridge
automatisch anhand der vorhandenen Felder: userName + password ergibt Basic Auth,
sonst clientId + clientSecret + tenantId für OAuth2. Ein Tippfehler im Wert bleibt
daher folgenlos, solange nicht NTLM benötigt wird.
Optionale Parameter
| Parameter | Standardwert | Beschreibung |
|---|
scope | https://api.businesscentral.dynamics.com/.default | OAuth2-Scope beim Token-Abruf |
baseAddress | (leer) | Basis-Adresse für den NTLM-Credential-Cache |
authenticationMethod | Basic | Siehe Hinweis oben |
maxPageSize | 5000 | Maximale Datensätze pro Abruf-Seite |
language | de-DE | Kultur für die Interpretation von Zahlen- und Datumsformaten |
httpClientTimeoutSeconds | 100 | Zeitlimit für einzelne HTTP-Aufrufe in Sekunden |
keyVaultUrl | (leer) | Key-Vault-Secret-URL; ersetzt sämtliche übrigen Parameter |
logCreateRequests | false | Protokolliert die vollständigen Anfragen beim Anlegen |
logUpdateRequests | false | Protokolliert die vollständigen Anfragen beim Aktualisieren |
logReceivedData | false | Protokolliert die vollständigen Antwortdaten |
Die drei Diagnose-Schalter erzeugen erhebliche Datenmengen und können Geschäftsdaten im
Klartext protokollieren — nur gezielt für die Dauer einer Analyse aktivieren.
Vollständige Beschreibung unter Verbindungen.
Tabellen- und Feldnamen
- SourceTable / TargetTable: Name des OData-EntitySets, so wie er in
$metadata steht - SourceField / TargetField: Exakter Feldname aus der NAV-OData-API (case-sensitive)
Unterstützte TargetKey-Typen
| Typ | Beschreibung |
|---|
PrimaryKey | NAV-nativer Primärschlüssel. Der Wert wird in Anführungszeichen gesetzt. |
Id | Systemeigene ID. Der Wert wird ohne Anführungszeichen eingesetzt. |
CustomKey | Benutzerdefinierter Schlüssel über ein oder mehrere Felder |
Filter | Suche über Feldwert-Kombination |
Bei CustomKey werden die Metadatentypen int32 und string unterstützt, bei Filter
die Typen string und guid. Jeder andere Typ des Schlüsselfeldes führt zum Abbruch
(Metadata type … not yet implemented for CreateKeyString).
Kein `StaticValue` in NAV-Schlüsseln
Die für D365BC ab v2.1 verfügbaren statischen Schlüsselwerte gibt es im
NAV-Konnektor nicht. Jeder Schlüsselteil muss über attributeName auf ein Quellfeld
verweisen. Ein KeyValue, das nur StaticValue enthält, führt beim Verarbeiten zu einem
Fehler, weil der Zugriff auf das Quellattribut ins Leere läuft.
SourceOperations
LookupValue
Liest einen Wert aus einer anderen NAV-Tabelle nach — Aufbau und Parameter wie beim
D365BC-Konnektor.
{
"Operations": [
{
"Name": "LookupValue",
"Parameters": {
"LookupType": "Attribute",
"SourceField": "countryRegionCode",
"LookupTable": "CountryRegions",
"LookupField": "Name",
"UseCache": true
}
}
]
}
Unterstützt wird ausschließlich LookupType: Attribute. Der Wert Name führt zu einem
Abbruch (SourceOperation for Lookups).
ReadFromMessage
Liest einen Wert aus der NAV-Antwort — nur in ResponseJobs. Das SourceField muss
einen _-Prefix haben. Verhalten wie bei D365BC.
Datentypen — Zieltyp und akzeptierte Quelltypen
Beim Schreiben bestimmt der Datentyp des Zielfeldes aus den NAV-Metadaten, welche
Umwandlung angewendet wird.
| Zieltyp (NAV-Metadaten) | Akzeptierte Quelltypen | Verhalten und Sonderfälle |
|---|
Boolean | boolean, string | Leerwert → null. Ein nicht als Wahrheitswert lesbarer Text führt zum Abbruch. |
Date | date, datetime, string | Ausgabe im Format yyyy-MM-dd. Leerwert → 0001-01-01. |
DateTimeOffset | date, datetime, string | Ausgabe im Format yyyy-MM-ddTHH:mm:ss.fffZ. Leerwert → 0001-01-01T00:00:00.000Z. |
Decimal | decimal, money, double | Interpretation mit der Kultur aus language. Leerwert → null. |
Decimal | string (ab v2.1) | Interpretation immer als en-US (Punkt als Dezimaltrennzeichen), unabhängig von language. |
Double (ab v2.1) | decimal, money, double | Interpretation mit der Kultur aus language. string wird nicht akzeptiert und führt zum Abbruch. |
Guid | guid, string, entityreference | Leerwert → 00000000-0000-0000-0000-000000000000, nicht null. |
Int32 | int32, optionsetvalue, string | Leerwert → null. Nicht als Ganzzahl lesbarer Wert → Abbruch. |
String | alle Quelltypen | Wert wird getrimmt. Leerwert → null. Liegt eine OptionMapping-TargetOperation vor, wird stattdessen der zugeordnete Wert geschrieben; ein unbekannter Quellwert führt zum Abbruch. |
Jeder in der Tabelle nicht genannte NAV-Zieltyp führt beim Schreiben zu einem Abbruch
(No Resolver defined for edmPrimitiveTypeKind …).
Leerer Textwert leert das Zielfeld nicht
Das ist der wichtigste Unterschied zu Business Central. Ein leerer Quellwert wird in NAV
als null übergeben — das Zielfeld behält damit seinen bisherigen Inhalt. Soll ein Feld
im Zielsystem tatsächlich geleert werden, lässt sich das über einen leeren Textwert
nicht erreichen.
ResponseJob
Der NAV-Konnektor unterstützt das ResponseJob-Muster wie D365BC: Nach erfolgreichem
Schreiben in NAV kann ein ResponseJob ausgelöst werden, der Felder aus der NAV-Antwort
(z. B. neu vergebene Nummern) zurück ins Quellsystem schreibt. Aufbau und Konfiguration
sind unter D365BC → ResponseJob beschrieben.
Änderungserkennung (Watermark)
| Eigenschaft | Wert |
|---|
| Empfohlener WatermarkType | datetime oder date |
| Typisches WatermarkField | Systemabhängig — z. B. Last_Date_Modified, Timestamp |
| Filterformat | {{WatermarkField gt %watermark%}} |
Im Gegensatz zu Business Central gibt es kein einheitliches lastModifiedDateTime-Feld.
Das korrekte Watermark-Feld hängt von der NAV-Version und der verwendeten Seite bzw.
Codeunit ab. Im Zweifelsfall mit dem NAV-Administrator klären.
Der Filterausdruck aus dem Job wird als OData-$filter an die NAV-Anfrage angehängt.
Die Regeln zur Klammerung und zum Platzhalter %watermark% sind unter
Jobs → Filter-Syntax beschrieben.
Fehlersuche
Fehler beim Schreiben werden mit dem Text Error in NAV-Communication protokolliert,
zusammen mit der verwendeten relativen Adresse sowie dem neuen und dem bestehenden
Datensatz. Bis einschließlich v2.0 lautete derselbe Text irreführend
Error in BC-Communication — ältere Logeinträge einer NAV-Verbindung sind also trotz
BC-Nennung dem NAV-Konnektor zuzuordnen.
4 - MSSQL — Microsoft SQL Server
Konnektor für Microsoft SQL Server. Lesen wird unterstützt — Schreiben nicht.
Preview
Der MSSQL-Konnektor ist als Vorabversion eingestuft. Lesen ist funktionsfähig,
Schreiben wird nicht unterstützt. Vor einem produktiven Einsatz bitte WYSA kontaktieren.
Der MSSQL-Konnektor ermöglicht das Lesen von Daten aus Microsoft SQL Server-Datenbanken
(OnPremise und Azure SQL) und deren Übertragung in andere Systeme.
| Eigenschaft | Wert |
|---|
| Lesen | ⚠️ Preview |
| Schreiben | — nicht unterstützt |
| Job-Filter | ✅ wird als WHERE-Klausel übernommen |
| Status | Preview |
Wie die übrigen drei SQL-Konnektoren wertet MSSQL den Filter des Jobs aus und erzeugt
gültiges Paging für sein Datenbanksystem.
Schreiben wird nicht unterstützt
Ein MSSQL-System als TargetConnection führt zur Laufzeit zu einem Abbruch. Der
Konnektor ist ausschließlich als Quellsystem einsetzbar. Auch das Löschen von Datensätzen
ist nicht implementiert.
Verbindungsparameter
{
"connectionstring": "<ADO.NET Connection String>"
}
Beispiel (SQL Server Authentication):
Server=<server>;Database=<db>;User Id=<user>;Password=<password>;TrustServerCertificate=True;
Beispiel (Windows Authentication / Integrated Security):
Server=<server>;Database=<db>;Integrated Security=True;TrustServerCertificate=True;
Optionale Parameter
| Parameter | Standardwert | Beschreibung |
|---|
commandTimeOut | 30 | Zeitlimit für einzelne SQL-Befehle in Sekunden. Bei großen Tabellen oder langsamen Abfragen zu erhöhen. |
maxPageSize | 5000 | Anzahl Datensätze je Seite. Steuert TOP bzw. OFFSET/FETCH NEXT der erzeugten Abfrage. |
language | de-DE | Kultur, in der gelesene Zahlen- und Datumswerte formatiert werden |
keyVaultUrl | (leer) | Key-Vault-Secret-URL; ersetzt sämtliche übrigen Parameter |
Tabellen- und Feldnamen
| Einstellung | Wert |
|---|
| SourceTable | Tabellenname, ggf. mit Schema-Präfix (z. B. Customers, dbo.Orders) |
| SourceField | Spaltenname. Wird automatisch in eckige Klammern gesetzt (ab v2.3; bis v2.2 nur bei Namen mit Leerzeichen). |
Der Wert aus SourceTable wird unverändert hinter FROM eingesetzt.
Spaltennamen ohne Klammern angeben
SourceField und WatermarkField müssen exakt dem Spaltennamen in der Tabelle entsprechen,
ohne eckige Klammern, Tabellen-Alias, Schema-Präfix oder Ausdruck. Die DataBridge setzt
die Klammern selbst. Der Wert wird anschließend über diesen Namen aus dem Ergebnis gelesen;
[Spalte], t.Spalte oder UPPER(Spalte) werden dort nicht gefunden und führen zum Abbruch.
Änderungserkennung (Watermark)
Die Erkennung basiert auf einer Zeitstempel-Spalte in der SQL-Tabelle. Diese Spalte muss
beim Einfügen oder Ändern eines Datensatzes automatisch aktualisiert werden.
| Eigenschaft | Wert |
|---|
| WatermarkType | date oder datetime |
| WatermarkField | Name der Zeitstempel-Spalte (z. B. ModifiedAt, UpdatedDate); wird wie SourceField in eckige Klammern gesetzt |
Die Spalte aus WatermarkField wird zusätzlich zu den gemappten Feldern abgefragt und für
die Sortierung (ORDER BY … ASC) verwendet.
Empfehlung: echtes Datum als Watermark-Spalte
Spalten vom Typ datetime, datetime2, smalldatetime oder date sind vorgesehen und
werden als ISO-Zeitstempel weitergereicht. Eine Spalte anderen Typs — etwa rowversion,
timestamp oder bigint — führt nicht mehr zu einem Abbruch, wird aber unverändert über
ToString() weitergegeben; die Sortierung (ORDER BY … ASC) erfolgt weiterhin nach dem
Spaltentyp der Datenbank, nicht nach dem Textwert.
Filter — die WHERE-Klausel kommt aus dem Job
Die WHERE-Klausel wird nicht erzeugt, sondern übernommen
Die DataBridge baut keine Bedingung aus WatermarkField und Watermark zusammen. Der
Inhalt des Feldes Filter am Job wird — nach Ersetzung des Platzhalters %watermark% —
wörtlich hinter WHERE eingesetzt.
Daraus folgt:
- Ohne Eintrag im Feld
Filter entsteht keine WHERE-Klausel. Der Job liest bei
jedem Lauf die vollständige Tabelle. - Der Ausdruck muss gültiges T-SQL sein. Ein Syntaxfehler im Filter führt zu einer
fehlgeschlagenen Abfrage.
- Es findet keine Parametrisierung statt. Der Filtertext wird als Zeichenkette in die
Abfrage eingesetzt; der Zugriff auf die
jobs-Tabelle ist entsprechend zu beschränken.
Ein typischer Filter für eine MSSQL-Quelle:
{{ModifiedAt > '%watermark%'}}
Die Klammerung {{ … }} sorgt dafür, dass der Block bei leerer Watermark vollständig
entfällt — der Erstlauf liest dann den gesamten Bestand. Die vollständigen Regeln stehen
unter Jobs → Filter-Syntax.
Datentypen — gelesene Werte
Da Schreiben nicht unterstützt wird, ist beim MSSQL-Konnektor allein der Lesepfad
relevant. Der Typ ergibt sich aus dem ADO.NET-Spaltentyp; der so ermittelte Typname wird
zusammen mit dem formatierten Wert an den Zielkonnektor weitergereicht und dort für die
Auswahl der Umwandlung verwendet.
| ADO.NET-Spaltentyp | Weitergegebener Typ | Formatierung des Wertes |
|---|
Int32 | int32 | Wird als Ganzzahl gelesen und in der Kultur aus language ausgegeben |
Decimal | decimal | Wird als Dezimalzahl gelesen und in der Kultur aus language ausgegeben |
Double | double | Wie Decimal — Umwandlung über einen Dezimalwert |
DateTime | datetime | Format u, also yyyy-MM-dd HH:mm:ssZ |
| alle übrigen | Name des .NET-Typs (z. B. string, boolean, guid) | Unveränderte Textdarstellung |
`language` wirkt auf Zahlenwerte
Zahlen werden in der Kultur der Quellverbindung formatiert. Steht dort der Vorgabewert
de-DE, wird ein Komma als Dezimaltrennzeichen ausgegeben. Zielkonnektoren, die einen
Textwert zwingend als en-US lesen — etwa die String-zu-Decimal-Umwandlung ab v2.1 —
interpretieren das falsch. In gemischten Szenarien ist language an der Quellverbindung
entsprechend zu setzen.
Welche Quelltypen ein Zielsystem akzeptiert, steht auf der jeweiligen Zielkonnektor-Seite:
D365BC, D365CE, D365NAV.
5 - MySQL — MySQL / MariaDB
Konnektor für MySQL und MariaDB. Preview — derzeit nicht für den produktiven Einsatz geeignet.
Preview — nicht produktionsreif
Der MySQL-Konnektor ist als Vorabversion eingestuft und für den produktiven Einsatz
derzeit nicht geeignet. Er ist weder freigegeben noch für den Regelbetrieb
abgesichert.
Wer MySQL oder MariaDB anbinden möchte, wendet sich bitte vorab an WYSA — dort wird der
konkrete Anwendungsfall geprüft und der aktuelle Stand mitgeteilt.
Der MySQL-Konnektor ist für das Lesen von Daten aus MySQL- und MariaDB-Datenbanken
vorgesehen.
| Eigenschaft | Wert |
|---|
| Lesen | ⚠️ Preview, nicht produktionsreif |
| Schreiben | — nicht unterstützt |
| Job-Filter | ✅ wird als WHERE-Klausel übernommen |
| Status | Preview |
Wie beim MSSQL-Konnektor wird der Inhalt des Feldes Filter am Job — nach
Ersetzung des Platzhalters %watermark% — wörtlich hinter WHERE eingesetzt. Ohne Eintrag
im Feld Filter entsteht keine WHERE-Klausel und der Job liest bei jedem Lauf die
vollständige Tabelle. Der Ausdruck muss gültiges MySQL-SQL sein; es findet keine
Parametrisierung statt. Details zur Filter-Syntax siehe MSSQL — Filter.
Schreiben wird nicht unterstützt
Ein MySQL-System als TargetConnection führt zur Laufzeit zu einem Abbruch. Auch das
Löschen von Datensätzen ist nicht implementiert.
Verbindungsparameter
{
"connectionstring": "<MySQL Connection String>"
}
Beispiel:
Server=<server>;Database=<db>;User=<user>;Password=<password>;
Optionale Parameter
| Parameter | Standardwert | Beschreibung |
|---|
commandTimeOut | 30 | Zeitlimit für einzelne SQL-Befehle in Sekunden |
maxPageSize | 5000 | Anzahl Datensätze je Seite |
language | de-DE | Kultur, in der gelesene Zahlen- und Datumswerte formatiert werden |
keyVaultUrl | (leer) | Key-Vault-Secret-URL; ersetzt sämtliche übrigen Parameter |
Tabellen- und Feldnamen
| Einstellung | Wert |
|---|
| SourceTable | Tabellenname (z. B. customers, orders) |
| SourceField | Spaltenname, wie in der Tabelle definiert |
Änderungserkennung (Watermark)
| Eigenschaft | Wert |
|---|
| WatermarkType | date oder datetime |
| WatermarkField | Name der Zeitstempel-Spalte |
Die Spalte aus WatermarkField wird zusätzlich zu den gemappten Feldern abgefragt und für
die Sortierung verwendet.
Empfehlung: echtes Datum als Watermark-Spalte
Geeignet sind datetime, timestamp und date — der Wert wird dann als ISO-Zeitstempel
weitergereicht. Eine Spalte anderen Typs, etwa bigint oder int, führt nicht mehr zu
einem Abbruch, wird aber unverändert über ToString() weitergegeben.
Datentypen — gelesene Werte
Da Schreiben nicht unterstützt wird, ist allein der Lesepfad relevant. Der Typ ergibt sich
aus dem ADO.NET-Spaltentyp; der so ermittelte Typname wird zusammen mit dem formatierten
Wert an den Zielkonnektor weitergereicht und dort für die Auswahl der Umwandlung
verwendet.
| ADO.NET-Spaltentyp | Weitergegebener Typ | Formatierung des Wertes |
|---|
Int32 | int32 | Wird als Ganzzahl gelesen und in der Kultur aus language ausgegeben |
Decimal | decimal | Wird als Dezimalzahl gelesen und in der Kultur aus language ausgegeben |
Double | double | Wie Decimal — Umwandlung über einen Dezimalwert |
DateTime | datetime | Format u, also yyyy-MM-dd HH:mm:ssZ |
| alle übrigen | Name des .NET-Typs (z. B. string, boolean, guid) | Unveränderte Textdarstellung |
Welche Quelltypen ein Zielsystem akzeptiert, steht auf der jeweiligen Zielkonnektor-Seite:
D365BC, D365CE, D365NAV.
6 - Oracle — Oracle Database
Konnektor für Oracle Database. Preview — derzeit nicht für den produktiven Einsatz geeignet.
Preview — nicht produktionsreif
Der Oracle-Konnektor ist als Vorabversion eingestuft und für den produktiven Einsatz
derzeit nicht geeignet. Er ist weder freigegeben noch für den Regelbetrieb
abgesichert.
Wer eine Oracle-Datenbank anbinden möchte, wendet sich bitte vorab an WYSA — dort wird der
konkrete Anwendungsfall geprüft und der aktuelle Stand mitgeteilt.
Der Oracle-Konnektor ist für das Lesen von Daten aus Oracle-Database-Instanzen
vorgesehen.
| Eigenschaft | Wert |
|---|
| Lesen | ⚠️ Preview, nicht produktionsreif |
| Schreiben | — nicht unterstützt |
| Job-Filter | ✅ wird als WHERE-Klausel übernommen |
| Status | Preview |
Wie beim MSSQL-Konnektor wird der Inhalt des Feldes Filter am Job — nach
Ersetzung des Platzhalters %watermark% — wörtlich hinter WHERE eingesetzt. Ohne Eintrag
im Feld Filter entsteht keine WHERE-Klausel und der Job liest bei jedem Lauf die
vollständige Tabelle. Der Ausdruck muss gültiges PL/SQL sein; es findet keine
Parametrisierung statt. Details zur Filter-Syntax siehe MSSQL — Filter.
Schreiben wird nicht unterstützt
Ein Oracle-System als TargetConnection führt zur Laufzeit zu einem Abbruch. Auch das
Löschen von Datensätzen ist nicht implementiert.
Verbindungsparameter
{
"connectionstring": "<Oracle Connection String>"
}
Beispiel (TNS):
Data Source=<tns-alias>;User Id=<user>;Password=<password>;
Beispiel (Easy Connect):
Data Source=<server>:<port>/<service>;User Id=<user>;Password=<password>;
Optionale Parameter
| Parameter | Standardwert | Beschreibung |
|---|
commandTimeOut | 30 | Zeitlimit für einzelne SQL-Befehle in Sekunden |
maxPageSize | 5000 | Anzahl Datensätze je Seite |
language | de-DE | Kultur, in der gelesene Zahlen- und Datumswerte formatiert werden |
keyVaultUrl | (leer) | Key-Vault-Secret-URL; ersetzt sämtliche übrigen Parameter |
Tabellen- und Feldnamen
| Einstellung | Wert |
|---|
| SourceTable | Tabellenname, ggf. mit Schema-Präfix (SCHEMA.TABLENAME) |
| SourceField | Spaltenname, wie in Oracle definiert (üblicherweise Großbuchstaben) |
Änderungserkennung (Watermark)
| Eigenschaft | Wert |
|---|
| WatermarkType | date oder datetime |
| WatermarkField | Name der Zeitstempel-Spalte |
Die Spalte aus WatermarkField wird zusätzlich zu den gemappten Feldern abgefragt und für
die Sortierung verwendet.
Empfehlung: echtes Datum als Watermark-Spalte
Geeignet sind DATE und TIMESTAMP — der Wert wird dann als ISO-Zeitstempel
weitergereicht. Eine Spalte anderen Typs, etwa NUMBER, führt nicht mehr zu einem Abbruch,
wird aber unverändert über ToString() weitergegeben.
Datentypen — gelesene Werte
Da Schreiben nicht unterstützt wird, ist allein der Lesepfad relevant. Der Typ ergibt sich
aus dem ADO.NET-Spaltentyp; der so ermittelte Typname wird zusammen mit dem formatierten
Wert an den Zielkonnektor weitergereicht und dort für die Auswahl der Umwandlung
verwendet.
| ADO.NET-Spaltentyp | Weitergegebener Typ | Formatierung des Wertes |
|---|
Int32 | int32 | Wird als Ganzzahl gelesen und in der Kultur aus language ausgegeben |
Decimal | decimal | Wird als Dezimalzahl gelesen und in der Kultur aus language ausgegeben |
Double | double | Wie Decimal — Umwandlung über einen Dezimalwert |
DateTime | datetime | Format u, also yyyy-MM-dd HH:mm:ssZ |
| alle übrigen | Name des .NET-Typs (z. B. string, boolean, guid) | Unveränderte Textdarstellung |
Oracle liefert Zahlen häufig als NUMBER
Oracle bildet NUMBER je nach Präzision auf unterschiedliche .NET-Typen ab. Welcher Typ
tatsächlich weitergegeben wird, ist daher vom Spaltenaufbau abhängig und im Einzelfall zu
prüfen.
Welche Quelltypen ein Zielsystem akzeptiert, steht auf der jeweiligen Zielkonnektor-Seite:
D365BC, D365CE, D365NAV.
7 - PostgreSQL
Konnektor für PostgreSQL. Preview — Lesen mit Filterunterstützung, Schreiben nicht unterstützt.
Preview
Der PostgreSQL-Konnektor ist als Vorabversion eingestuft. Lesen ist funktionsfähig,
Schreiben wird nicht unterstützt. Vor einem produktiven Einsatz bitte WYSA kontaktieren.
Der PostgreSQL-Konnektor ermöglicht das Lesen von Daten aus PostgreSQL-Datenbanken
und deren Übertragung in andere Systeme.
| Eigenschaft | Wert |
|---|
| Lesen | ⚠️ Preview |
| Schreiben | — nicht unterstützt |
| Job-Filter | ✅ wird als WHERE-Klausel übernommen |
| Status | Preview |
Wie beim MSSQL-Konnektor wird der Inhalt des Feldes Filter am Job — nach
Ersetzung des Platzhalters %watermark% — wörtlich hinter WHERE eingesetzt. Ohne Eintrag
im Feld Filter entsteht keine WHERE-Klausel und der Job liest bei jedem Lauf die
vollständige Tabelle. Der Ausdruck muss gültiges PostgreSQL-SQL sein; es findet keine
Parametrisierung statt. Details zur Filter-Syntax siehe MSSQL — Filter.
Schreiben wird nicht unterstützt
Ein PostgreSQL-System als TargetConnection führt zur Laufzeit zu einem Abbruch. Der
Konnektor ist ausschließlich als Quellsystem einsetzbar. Auch das Löschen von Datensätzen
ist nicht implementiert.
Verbindungsparameter
{
"connectionstring": "<PostgreSQL Connection String>"
}
Beispiel (Npgsql-Format):
Host=<server>;Database=<db>;Username=<user>;Password=<password>;
Optionale Parameter
| Parameter | Standardwert | Beschreibung |
|---|
commandTimeOut | 30 | Zeitlimit für einzelne SQL-Befehle in Sekunden |
maxPageSize | 5000 | Anzahl Datensätze je Seite. Steuert LIMIT und OFFSET der erzeugten Abfrage. |
language | de-DE | Kultur, in der gelesene Zahlen- und Datumswerte formatiert werden |
keyVaultUrl | (leer) | Key-Vault-Secret-URL; ersetzt sämtliche übrigen Parameter |
Tabellen- und Feldnamen
| Einstellung | Wert |
|---|
| SourceTable | Tabellenname, ggf. mit Schema-Präfix (z. B. public.customers) |
| SourceField | Spaltenname (in PostgreSQL üblicherweise Kleinbuchstaben) |
Der Wert aus SourceTable wird unverändert hinter FROM eingesetzt.
Änderungserkennung (Watermark)
| Eigenschaft | Wert |
|---|
| WatermarkType | date oder datetime |
| WatermarkField | Name der Zeitstempel-Spalte |
Die Spalte aus WatermarkField wird zusätzlich zu den gemappten Feldern abgefragt und für
die Sortierung (ORDER BY … ASC) verwendet.
Empfehlung: echtes Datum als Watermark-Spalte
Geeignet sind timestamp, timestamptz und date — der Wert wird dann als
ISO-Zeitstempel weitergereicht. Eine Spalte anderen Typs, etwa bigint oder xid, führt
nicht mehr zu einem Abbruch, wird aber unverändert über ToString() weitergegeben.
Datentypen — gelesene Werte
Da Schreiben nicht unterstützt wird, ist allein der Lesepfad relevant. Der Typ ergibt sich
aus dem ADO.NET-Spaltentyp; der so ermittelte Typname wird zusammen mit dem formatierten
Wert an den Zielkonnektor weitergereicht und dort für die Auswahl der Umwandlung
verwendet.
| ADO.NET-Spaltentyp | Weitergegebener Typ | Formatierung des Wertes |
|---|
Int32 | int32 | Wird als Ganzzahl gelesen und in der Kultur aus language ausgegeben |
Decimal | decimal | Wird als Dezimalzahl gelesen und in der Kultur aus language ausgegeben |
Double | double | Wie Decimal — Umwandlung über einen Dezimalwert |
DateTime | datetime | Format u, also yyyy-MM-dd HH:mm:ssZ |
| alle übrigen | Name des .NET-Typs (z. B. string, boolean, guid) | Unveränderte Textdarstellung |
Zahlen werden in der Kultur der Quellverbindung formatiert. Steht dort der Vorgabewert
de-DE, wird ein Komma als Dezimaltrennzeichen ausgegeben — für Zielumwandlungen, die
einen Textwert zwingend als en-US lesen, ist language entsprechend anzupassen.
Welche Quelltypen ein Zielsystem akzeptiert, steht auf der jeweiligen Zielkonnektor-Seite:
D365BC, D365CE, D365NAV.
8 - OpenAPI — generischer REST-Konnektor
Generischer REST-Konnektor, der Endpunkte, Wrapper-Schlüssel und Datentypen direkt aus einer OpenAPI-Spezifikation ableitet.
Der OpenAPI-Konnektor verbindet die DataBridge mit einer beliebigen REST-API, für die
eine OpenAPI-Spezifikation (JSON oder YAML) existiert. Anders als bei den übrigen HTTP-
Konnektoren werden Pfade, Wrapper-Schlüssel ({"clients": [...]} vs. {"client": {...}})
und Feldtypen nicht pro Ressource fest verdrahtet, sondern zur Laufzeit aus der
Spezifikation aufgelöst. Ein Mapping muss dafür lediglich SourceTable/TargetTable auf
den Ressourcennamen setzen (z. B. clients).
| Eigenschaft | Wert |
|---|
| Lesen | ✅ unterstützt |
| Schreiben (Create/Update) | ✅ unterstützt |
| Löschen | ✅ unterstützt |
| Aktionsaufrufe (InvokeAction) | ✅ unterstützt |
| Job-Filter | ⚠️ wird als Query-String an die Liste-Anfrage angehängt (kein $filter-Standard, API-abhängig) |
| Status | In Entwicklung / Preview |
Status: in Entwicklung
Der Konnektor befindet sich noch in aktiver Entwicklung. Die OpenAPI-Spezifikation wird über den
in openApiSpecUrl konfigurierten Endpunkt geladen. Bekannte Einschränkungen:
- Der Diagnose-Endpunkt
CheckList meldet für OpenAPI-Mappings fälschlich „could not find table“.
Er vergleicht die Tabellennamen mit den Pfaden der Spezifikation (/v1/customers) statt mit
den Ressourcennamen (customers). Auf das Lesen und Schreiben hat das keinen Einfluss. get_connector_table_schema weist keinen Primärschlüssel aus. Intern erkennt der Konnektor
den Schlüssel am Namen der Property (id, Id, ID, uuid, key).
Verbindungsparameter
{
"baseUrl": "https://api.example.com",
"openApiSpecUrl": "https://api.example.com/openapi.yaml",
"clientId": "<Client-ID>",
"clientSecret": "<Client-Secret>",
"tenantId": "<Entra Tenant ID>",
"scope": "<OAuth2-Scope>",
"tokenUrl": "https://api.example.com/oauth/token",
"apiKeyHeader": "X-API-Key",
"apiKeyValue": "<API-Key>",
"customHeaders": { "X-Custom-Header": "wert" },
"nextLinkPath": "@odata.nextLink",
"nextPagePath": "meta.next_page",
"pageQueryParam": "page",
"pageSizeQueryParam": "per_page",
"updateMethod": "PATCH",
"authenticateSpecRequest": false
}
| Parameter | Pflicht | Standardwert | Beschreibung |
|---|
baseUrl | ✅ | — | Basis-URL der API (ohne abschließenden Schrägstrich; wird bei Bedarf entfernt) |
openApiSpecUrl | ✅ | — | URL zur OpenAPI-Spezifikation (JSON oder YAML) |
authenticateSpecRequest | — | false | true = die Spezifikation wird mit denselben Zugangsdaten wie die API abgerufen; false = ohne Authentifizierung |
customHeaders | — | (leer) | Zusätzliche statische Header, die bei jeder Anfrage mitgeschickt werden (z. B. Mandanten- oder Staging-Header) |
nextLinkPath | — | (leer) | JSON-Pfad zur nächsten Seiten-URL in paginierten Antworten (z. B. @odata.nextLink). Gesetzt ⇒ URL-basierte Paginierung. |
nextPagePath | — | (leer) | JSON-Pfad zur nächsten Seitennummer (z. B. meta.next_page). Erfordert zusätzlich pageQueryParam. |
pageQueryParam | — | (leer) | Query-Parameter für die Seitennummer (z. B. page), zusammen mit nextPagePath |
pageSizeQueryParam | — | (leer) | Query-Parameter für die Seitengröße (z. B. per_page); wenn gesetzt, wird maxPageSize darüber mitgeschickt |
updateMethod | — | PATCH | HTTP-Methode für Aktualisierungen. PUT für APIs, die volle Ersetzung statt Teilaktualisierung erwarten. |
Zusätzlich stehen die universellen Parameter maxPageSize, language,
httpClientTimeoutSeconds, keyVaultUrl, logCreateRequests, logUpdateRequests und
logReceivedData zur Verfügung — siehe Verbindungen.
Weder nextLinkPath noch nextPagePath gesetzt
Ohne eines der beiden Paginierungs-Felder liest der Konnektor nur die erste Seite der
Liste-Antwort — es findet keine automatische Fortsetzung statt.
Authentifizierung
Der OpenAPI-Konnektor nutzt dieselbe Auswahllogik wie die übrigen HTTP-Konnektoren, erweitert
um API-Key-Authentifizierung:
| Methode | Aktivierung | Parameter |
|---|
| Basic Authentication | userName + password gesetzt | userName, password |
| OAuth2 Client Credentials | clientId + clientSecret + tenantId gesetzt (Vorgabe, wenn nichts anderes zutrifft) | clientId, clientSecret, tenantId, scope, optional tokenUrl |
| API Key | apiKeyHeader gesetzt | apiKeyHeader, apiKeyValue |
{
"apiKeyHeader": "X-Qonto-Staging-Token",
"apiKeyValue": "<Token>"
}
tokenUrl — konfigurierbarer OAuth2-Endpunkt
Bei den übrigen HTTP-Konnektoren (D365BC, D365CE, D365NAV) ist der OAuth2-Token-Endpunkt fest
auf den Microsoft-Login-Endpunkt eingestellt. Der OpenAPI-Konnektor führt zusätzlich den
Parameter tokenUrl ein: Ist er gesetzt, wird der Token dort statt beim
Microsoft-Standardendpunkt angefragt. Damit lassen sich auch APIs anbinden, deren
OAuth2-Provider nicht Microsoft Entra ID ist. Bleibt tokenUrl leer, greift weiterhin der
Microsoft-Standardendpunkt.
Zusätzliche statische Header (z. B. mandantenspezifische Tokens, die parallel zu OAuth2 oder
API-Key benötigt werden) lassen sich unabhängig von der Authentifizierungsmethode über
customHeaders mitgeben.
Tabellen- und Feldnamen
- SourceTable / TargetTable: kurzer Ressourcenname, wie er in der OpenAPI-Spezifikation
als letztes Pfadsegment vorkommt (z. B.
clients für /v2/clients). Der Konnektor sucht
in der Spezifikation nach einem Pfad, der auf /<Ressourcenname> endet und keine
Parameter enthält; ein zugehöriger Einzeldatensatz-Pfad (/v2/clients/{id}) wird
automatisch mitaufgelöst. - Alternativ kann auch der vollständige Pfad aus der Spezifikation eingetragen werden
(Rückwärtskompatibilität).
- SourceField / TargetField: Feldname aus dem JSON-Schema der Ressource. Verschachtelte
Felder werden mit Punktnotation adressiert (z. B.
phone.country_code).
Liste- und Einzeldatensatz-Antworten müssen nicht manuell konfiguriert werden: Wrapper-
Schlüssel wie {"clients": [...]} oder {"client": {...}} werden aus der Spezifikation
erkannt. Fehlen entsprechende Hinweise in der Spezifikation, erkennt der Konnektor ersatzweise
die gebräuchlichen Muster value, data und results als Array-Wrapper.
Unterstützte TargetKey-Typen
| Typ | Beschreibung |
|---|
PrimaryKey / Id | Schlüsselwert wird direkt aus dem TargetKey.KeyName-Attribut der Nachricht gelesen und unverändert in die Item-URL eingesetzt |
CustomKey | Ein oder mehrere Feld-Wert-Paare werden als Query-String (key=wert&key2=wert2) an die Liste-Anfrage angehängt; der Datensatz wird darüber gesucht |
Filter | Wie CustomKey, zusätzlich wird id als besonderer keyName-Wert erkannt und dafür message.Id verwendet. Für Update und Löschen wird der Schlüssel des gefundenen Datensatzes verwendet: KeyAttributeFromExisting, sonst der Primärschlüssel der Spezifikation |
Wird bei CustomKey/Filter mehr als ein Datensatz gefunden, bricht die Verarbeitung mit
einem Fehler ab (Found more than 1 record).
Schreiben (Upsert)
Der Konnektor prüft vor jedem Schreibvorgang, ob bereits ein Zieldatensatz existiert
(GetSingleRequest bei PrimaryKey/Id/CustomKey, ein gefilterter Liste-Abruf bei
Filter). Existiert er, wird nur bei tatsächlicher Werteänderung ein Update ausgelöst —
identische Werte führen zu keiner Anfrage.
Anlegen: POST auf den Collection-Pfad
Aktualisieren: PATCH (Vorgabe) oder PUT (updateMethod) auf den Item-Pfad
Anfrage-Body wird bei Bedarf automatisch in einen aus der Spezifikation abgeleiteten
Wrapper-Schlüssel eingebettet (z. B. {"client": {...}}). Ein Job kann das über
SpecialSettings gezielt abschalten:
{ "DoNotWrapRequestBody": true }
Ein 409 Conflict bei Anlegen oder Aktualisieren wird als transiente Ausnahme
behandelt und über die Transitive-Queue erneut verarbeitet (siehe
Architektur → Retry- und Fehlerverhalten).
Löschen
Anders als die SQL-Konnektoren unterstützt der OpenAPI-Konnektor Löschungen: Der
Schlüssel wird wie beim Lookup aufgelöst, anschließend folgt ein DELETE auf den
Item-Pfad. Bei TargetKey vom Typ Filter wird der Datensatz zuerst gesucht. Wird keiner
gefunden, schreibt der Konnektor eine Warnung ins Log und sendet kein DELETE.
InvokeAction — generische Aktionsaufrufe
Neben dem klassischen CRUD-Zyklus unterstützt die DataBridge seit dieser Version
Aktions-Jobs: Ein Job mit Action = InvokeAction (technisch: jeder Wert, der nicht auf
einen bekannten JobActionType passt) ruft einen benannten, nicht-CRUD-Endpunkt auf, statt
einen Datensatz anzulegen oder zu ändern — z. B.
POST /v2/client_invoices/{id}/send_by_einvoice.
Konfiguration:
| Feld | Bedeutung |
|---|
Job.Action | Name der Aktion (z. B. der OpenAPI-operationId oder ein sprechender Bezeichner) — beliebig, solange er nicht NewUpdate, Delete, TimeStamp oder DeleteOnUpdate entspricht |
TableMapping.TargetPath + TargetTable | Ergeben zusammen den Aktionspfad, so wie er in der Spezifikation steht (z. B. TargetPath = "v2/client_invoices/{id}", TargetTable = "send_by_einvoice") |
FieldMapping mit gesetztem TargetField | Optional; ergibt den JSON-Request-Body der Aktion |
Ablauf:
- Der Aktionspfad wird in der Spezifikation nachgeschlagen; die HTTP-Methode wird daraus
übernommen (bevorzugt
POST, sonst PUT/PATCH/DELETE — die erste im Pfad
gefundene, nicht-GET-Methode). - Pfadparameter (
{id} etc.) werden aus message.Id (Parametername id) bzw. aus
message.Attributes aufgelöst; ein nicht auflösbarer Parameter erzeugt lediglich eine
Warnung und bleibt im Pfad stehen. - Ist mindestens ein Zielfeld gemappt, wird daraus ein JSON-Body gebaut und mitgeschickt.
- Bei einem ResponseJob wird die Antwort — über den aus der Spezifikation abgeleiteten
Wrapper-Schlüssel entpackt — als neue Queue-Nachricht mit
ActionCode = NewUpdate
weitergereicht.
Ein fehlender Aktionspfad oder eine Antwort ohne 2xx-Statuscode brechen den Job mit einer
Ausnahme ab.
Job-eigene Source-/Target-Pfade (statt nur Mapping-Tabelle)
(neu, alle Konnektoren betroffen — beim OpenAPI-Konnektor besonders relevant)
Ein Job kann eigene Felder Source und Target tragen, die den SourceTable/TargetTable
der referenzierten Mapping-Zeilen überschreiben. Damit lässt sich ein und dasselbe
Mapping für mehrere Ressourcen bzw. Aktionspfade wiederverwenden. Details:
Jobs → Source und Target.
Änderungserkennung (Watermark)
| Eigenschaft | Wert |
|---|
| Empfohlener WatermarkType | datetime |
| WatermarkField | Beliebiger JSON-Pfad im Antwortobjekt (z. B. updated_at), der bei jedem gelesenen Datensatz zu einem gültigen Zeitstempel ausgewertet werden kann |
Der Watermark-Wert wird über job.WatermarkField als SelectToken-Pfad auf jedes gelesene
JSON-Objekt angewendet. Der Filterausdruck (Job.Filter) wird — anders als bei D365BC/NAV —
nicht in eine standardisierte Query-Syntax übersetzt, sondern unverändert als Query-String
an die Liste-Anfrage angehängt; Aufbau und Platzhalter sind daher von der jeweiligen API
abhängig.
EmbedChildren — eingebettete Kind-Datensätze
(Quell-Feature ist derzeit nur im D365CE-Connector implementiert, das Zielverhalten dazu
liegt im OpenAPI-Konnektor)
Verweist ein Feld-Mapping über die SourceOperation EmbedChildren auf einen anderen Job,
werden dessen Zeilen bereits beim Lesen in die Nachricht des Elterndatensatzes eingebettet.
Beim Schreiben in eine OpenAPI-Zielressource baut der Konnektor daraus ein verschachteltes
JSON-Array (z. B. Rechnungspositionen unter lines) und schreibt es als Teil der
Elternanfrage — ohne Feld-für-Feld-Abgleich mit einem eventuell vorhandenen Array im
Zieldatensatz. Details zur Quellseite: Architektur und
D365CE.
Caching
OpenAPI-Dokument und aufgelöste Ressourcen-Metadaten (Pfade, Wrapper-Schlüssel, Schema) werden
pro Prozess zwischengespeichert. Ein Neuladen der Spezifikation erfordert einen Neustart der
Function App bzw. ein erneutes Kaltstart-Init.