Der SDK-Helper
Der SDK-Helper ist die zentrale Schnittstelle zwischen C#-Skripten und der Syncler-Anwendung.
Er ermöglicht den Datenaustausch (Quell-/Ziel-/Kontextdaten), steuert Sync-Parameter, liefert Hilfsfunktionen (z. B. Logging, HTTP-Aufrufe, Parameterverwaltung) und stellt Modelle (z. B. Datensatz-Abbildungen) bereit.
Geltungsbereich: Alle Eigenschaften und Methoden des Helpers beziehen sich immer auf den aktuellen Account/Mandanten.
Syncler stellt zusätzlich ausgewählte .NET-APIs und Newtonsoft.Json (z. B. JObject, JArray, JToken) bereit, um JSON-Daten komfortabel zu lesen und zu erzeugen.
Lebenszyklus & Einsatz
- Skriptstart: Der Helper wird dem Skript beim Start als Objekt
Helperübergeben. - Kontextzugriff: Skripte lesen/setzen Sync-Parameter (z. B. Filter, Konflikt-/Fehlerverhalten) und greifen auf Quell-/Zieldaten zu.
- Operationen: Daten lesen/schreiben, Mappings abfragen/aktualisieren, Protokolle schreiben, HTTP/Service-Aufrufe durchführen, Warteschlangen-Einträge anlegen u. v. m.
- Rückgabe: Modifizierte Daten/Ergebnisse werden an den Workflow (Transformation, Sync, SDK-Konnektor) zurückgegeben.
Eigenschaften
Einige Eigenschaften wirken steuernd auf SDK-Syncs (werden vom Sync ausgewertet).
JSON-Typen:JObject,JArray(Newtonsoft.Json).
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
Helper.IsCancelled |
bool |
Zeigt an, dass ein Abbruch angefordert wurde (siehe Cancel()). |
Helper.ConnectionId |
int |
System-ID (Konnektor) des aktuellen Kontexts; für API-Aufrufe nutzbar. |
Helper.ProcessId |
int |
Sync-ID des aktuellen Kontexts; wird u. a. in Mapping-/Log-Methoden verwendet. |
Helper.ClientNumber |
int |
Mandantennummer des Syncs (Datenstrukturierung, Filter für Mappings). |
Helper.WhereClause |
string |
Quell-Filter für die Datenermittlung; kann die Sync-Ausführung beeinflussen. |
Helper.ForceQueryAll |
bool |
Volles Lesen ohne Änderungsgrenzwert (übersteuert Änderungslogik). |
Helper.ConflictAction |
string |
Konfliktverhalten: USE_SOURCE, USE_TARGET, SKIP, IGNORE, SOURCE_CHANGES. |
Helper.ErrorAction |
string |
Fehlerverhalten: REPEAT_ALL, REPEAT_DIFFERENCES, QUERY_NEXT, IGNORE, STOP. |
Helper.ClientWhereClause |
string |
Übereinstimmungs-/Dublettensuche bei unbekannten Datensätzen. |
Helper.DublettActionNoMatch |
string |
Verhalten kein Treffer: SKIP, SKIP_WITH_WARNING, WRITE, REPEAT, REPEAT_WRITE. |
Helper.DublettActionOneMatch |
string |
Verhalten ein Treffer: SKIP, SKIP_WITH_WARNING, MAPPING_ONLY, MAPPING_AND_SYNCH, WRITE_NEW. |
Helper.DublettActionMultipleMatches |
string |
Verhalten mehrere Treffer: SKIP, SKIP_WITH_WARNING, MAPPING_ONLY_FIRST, MAPPING_AND_SYNCH_FIRST, WRITE_NEW. |
Helper.SecondWhereClause |
string |
Zweitfilter (nach Transformation) zur Auswahl transformierter Quelldaten. |
Helper.SourceObject |
string |
Name des Quellobjekttyps (SDK-Sync). |
Helper.TargetObject |
string |
Name des Zielobjekttyps (SDK-Sync & SDK-Konnektor). |
Helper.SourceType |
string |
Typ/Bezeichnung des Quellsystems. |
Helper.TargetType |
string |
Typ/Bezeichnung des Zielsystems. |
Helper.SourceSchemaObject |
JObject |
Schemaobjekt des Quelltyps. |
Helper.TargetSchemaObject |
JObject |
Schemaobjekt des Zieltyps. |
Helper.Statement |
string |
Abfrage-Statement der aktuellen Query-Anforderung (JSON-Abfrage-Skripte). |
Helper.Action |
JObject |
Ausführungsparameter der aktuellen Operation. |
Helper.Page |
int |
Paging-Zähler (Start: 0), wird pro Lese-Durchlauf erhöht. |
Helper.SkipLoading |
bool |
Wird durch SkipLoad() gesetzt; überspringt das Lesen der Quelle. |
Helper.InnerException |
string |
Fehlertext für Datensatz-Skripte (bei Ergebnis Failed erforderlich). |
Helper.GetObject |
JObject |
Aktueller Quelldatensatz (Datensatz-Skripte in SDK-Syncs). |
Helper.GetChildObjects |
JArray |
Positionsliste bei geschachtelten Daten; Objekt-Flag "DELETE": true kann Positionen löschen (systemabhängig). |
Helper.SetObject |
JObject |
Aktuelles Zielobjekt (SDK-Sync Datensatzskript, SDK-Konnektor, JSON-Write-Skript). Hinweis: Eine Änderung der Daten in einem SDK-Sync funktioniert nicht mit diesem Objekt, da es keine Änderungserkennung hat. Hierfür muss das Quellobjekt geändert und der Wert per Feldzuordnung übertragen werden. |
Helper.SetObjectChanges |
JObject |
Differenzen im Zielobjekt (SDK-Konnektor); echte Änderungen bei vorhandenem Primärschlüssel. |
Helper.IsNewSetObject |
bool |
Flag: Das Zielobjekt ist ein neuer Datensatz. |
Helper.DeleteSetObject |
bool |
Flag: Das Zielobjekt soll gelöscht werden. |
Helper.Mappings |
JArray |
Feldzuordnungen des Syncs. Einträge mit SourcePath, SourceColumn (SchemaColumn), TargetPath, TargetColumn (SchemaColumn). |
Methoden
Ausführung steuern
Helper.Cancel()
Fordert den Abbruch der aktuellen Ausführung an (SDK-Syncs werten dies aus).Helper.SkipLoad()
Überspringt den Lese-Schritt (Quelle) in SDK-Syncs.
Parameter lesen/schreiben
Helper.GetParam(string name) : string
Liefert den Parameterwert (oder""wenn nicht vorhanden).Helper.GetParam<T>(string name, T defaultValue = default) : T
Liefert typisiert; bei NichtvorhandenseindefaultValue.Helper.GetParamOrNull<T>(string name) : T
Liefert typisiert odernull(für explizit nullable, z. B.DateTime?).Helper.SetParam<T>(string name, T value)
Legt/aktualisiert einen Parameter.
Feldnotation & Parsing
Helper.FieldStringToColumnObject(string fieldString) : JObject
Wandelt eine Feldnotation (z. B. aus Filtern) in ein JObject mit adressierbaren Eigenschaften um.
Datensatz-Abbildungen (Mappings)
Helper.GetDataMappingBySourceId(int processId, string sourceId) : SisDataMappingHelper.GetDataMappingByTargetId(int processId, string targetId) : SisDataMappingHelper.GetDataMappingComplementaryBySourceId(int processId, string sourceId, string targetObject = null) : List<SisDataMapping>Komplementäre Mappings entgegengesetzter Syncs (für Konfliktmanagement/Zielerkennung).
Helper.GetDataMappingParallelByTargetId(int processId, string targetId) : List<SisDataMapping>Parallele Mappings gleicher Richtung (Ziel-Änderungsinformation muss häufig mitgezogen werden).
Helper.SaveDataMapping(SisDataMapping mapping) : SisDataMapping
Legt eine neue oder aktualisiert eine bestehende Datensatz-Abbildung.Helper.IncreaseOwnDataMapping(SisDataMapping mapping, object newUpdatedInfoA, object newUpdatedInfoB, bool onlyA = false, bool onlyB = false)
Aktualisiert Änderungsinformationen (Quelle/Ziel) für das eigene Mapping (Konfliktauflösung).Helper.IncreaseComplementaryMappings(string currentSourceId, string currentTargetId, object newUpdatedInfoA, object newUpdatedInfoB, bool onlyA = false, bool onlyB = false)
Sucht/aktualisiert komplementäre Mappings (teilweise Aktualisierung möglich).Helper.IncreaseParallelMappings(string currentSourceId, string currentTargetId, object newUpdatedInfoA, object newUpdatedInfoB, bool onlyA = false, bool onlyB = false)
Sucht/aktualisiert parallele Mappings (Konfliktpfade entschärfen).
Sync-Informationen
Helper.GetProcessInfoList(int? sourceConnectionId = null, int? targetConnectionId = null) : List<SisProcessInfo>
Liefert Infos zu Syncs des Accounts (optional gefiltert nach Systemen).Helper.GetProcessInfoComplementary(int processId) : List<SisProcessInfo>
Komplementäre Syncs des angegebenen Syncs.Helper.GetProcessInfoParallel(int processId) : List<SisProcessInfo>
Parallele Syncs des angegebenen Syncs.
Protokoll & Nachrichten
Helper.InsertLog(SisLog log)Helper.InsertLog(string message, int level)
Speichert Protokolleinträge (in der Account-Datenbank). Level:
0=Message,1=Error,2=Warning,3=Info/Notice,4=Feedback,5=Debug.Helper.InsertMessage(string message, int level)
Schreibt Broadcast-Nachrichten (UI-Ticker, nicht dauerhaft).
HTTP & Service-Aufrufe
Helper.InvokeUrl(string url, string method, JObject header, string data, bool base64 = false) : string
Führt einen HTTP-Request aus; Header alsJObject(Eigenschaft=Headername).
Beibase64=truewird der Antwort-Body Base64-kodiert zurückgegeben.Helper.ServiceCall(string method, string url, string data) : string
Ruft die Syncler-API auf (alsurlnur den Endpunkt übergeben).
Parameterverwaltung (persistente interne Parameter)
Helper.GetParameterList(string name, string connectionId = null, string processId = null) : List<SisParam>
Liest Parameterlisten (optional nach System/Sync einschränken).Helper.SaveParameter(SisParam parameter, string connectionId = null, string processId = null)
Speichert/aktualisiert einen Parameter.Helper.DeleteParameter(int parameterId)
Löscht einen Parameter.
Datenzugriff über Konnektoren
Helper.InvokeGetData(string connectionId, string targetObject, List<SisParam> getParams) : JArray
Ruft Daten aus einem System ab (Schema =targetObject).
Übliche Parameter-Namen (abhängig vom System/Konnektor):
GETDATA_ID,GETDATA_RELATED_ID,GETDATA_RELATED,GETDATA_WHERE,GETDATA_MODIFIED,GETDATA_ORDER,LAST_SYNC_DATE,LAST_SYNC_VERSION.Helper.InvokeSetData(string connectionId, string targetObject, JObject jsonObject) : JObject
Schreibt Daten via System/Konnektor (Schema =targetObject).
Zusatzoptionen (z. B.DELETE) können imjsonObject["Params"]gesetzt werden.
Warteschlange (Aktionen)
Helper.InsertAction(int processId, DateTime executeDate, bool isAdhoc, List<SisParam> actionParams)
Legt einen Warteschlangen-Eintrag für einen Sync an.
Konvertierungen
Helper.ToDouble(object value) : double
Kulturunabhängige Zahlkonvertierung nachdouble.
Datenmodelle
SisParam
Name : string– ParameternameValue : object– WertID : int– interne ID (wird beim Speichern vergeben)
Hilfsmethoden:
GetValue() : string– Wert als StringGetValue<T>(T defaultValue)– typisierter Wert oder DefaultGetValueOrNull<T>() : T– typisierter Wert odernullHasValue() : bool– Wert vorhanden?
SisDataMapping (Datensatz-Abbildung)
ID : int– interne DB-IDProcessId : int– zugehöriger SyncDescription : string– BeschreibungSourceRecordId : string– Quell-IDTargetRecordId : string– Ziel-IDLastSyncDate : DateTime– letztes Sync-DatumTargetIsDeleted : bool– Ziel wurde gelöschtLastSyncInfo : List<SisParam>– Änderungs-/Zusatzinformationen
SisProcessInfo (Syncbeschreibung)
ID : int,Name : string,DisplayName : stringSourceObject : string,TargetObject : stringSourceConnectionId : int,TargetConnectionId : intClientNumber : int– MandantennummerIsScheduled : bool– Zeitsteuerung aktivSourceType : string,TargetType : string,ProcessType : string
SisLog (Protokoll)
CreatedDate : DateTime– ErstelldatumLevel : int–0..5(Message/Error/Warning/Info/Feedback/Debug)ProcessId : int– zugehöriger SyncActionId : int– zugehöriger Queue-EintragRecordType : string– DatensatztypRecordId : string– Datensatz-IDLogMessage : string– Meldung
Best Practices
- Deterministisch & kompakt: Skripte kurz halten, keine teuren I/O-Operationen; komplexe Flows mit Standard-Transformationen/Syncs lösen.
- Logging sparsam & hilfreich: Klarer Kontext, keine sensitiven Daten protokollieren; Level sinnvoll wählen.
- JSON robust handhaben: Null-Checks, Typprüfungen, ISO-Zeitformate (UTC) verwenden.
- Paging nutzen:
Helper.Pagefür große Datenmengen berücksichtigen (wenn der ausführende Schritt dies unterstützt).