Skip to main content

xSuite Interface Windows Prism 5.x – Online-Hilfe

Task "DbTransfer"

Die folgenden Eigenschaften gelten für den Task vom Typ "DbTransfer". Dieser Task stellt eine generisch konfigurierbare Möglichkeit dar, um Datensätze von einem unterstützten Datenbanksystem in ein anderes Datenbanksystem zu übertragen.

Eigenschaft

Beschreibung

Schedule[].Task[].InputDb.ConnectionString*(§)

Schedule[].Task[].InputDb.Password(§)

Schedule[].Task[].InputDb.Select*

In der Eigenschaft .ConnectionString ist die Verbindungszeichenfolge zur Quelldatenbank anzugeben, aus der Daten gelesen werden.

In der Eigenschaft .Select ist die SELECT-Abfrage anzugeben. Für beide Eigenschaften ist die gleiche Syntax zu verwenden wie für die Anbindung externer Datenquellen im Rahmen einer Szenariokonfiguration (siehe Externe Datenquellen). Hier werden auch die gleichen Datenquellen unterstützt wie bei der Anbindung externer Datenquellen.

Das Passwort, das in der Verbindungszeichenfolge benötigt wird, kann separat in .Password definiert und über die Variable %Password% in die Zeichenfolge eingebunden werden.

Schedule[].Task[].OutputDb.ConnectionString*(§)

Schedule[].Task[].OutputDb.Password(§)

Schedule[].Task[].OutputDb.Insert*

Schedule[].Task[].OutputDb.Delete

Die Eigenschaften .ConnectionString und .Password definieren die Verbindungsdaten zur Zieldatenbank, in die die Daten geschrieben werden. Für den schreibenden Zugriff werden als externe Datenbanken Microsoft SQL Server, MongoDB und über OLEDB ansprechbare Systeme unterstützt.

Für das Schreiben der Daten ist eine INSERT-Anweisung in der Eigenschaft .Insert anzugeben. Dabei ist die vom Zielsystem unterstützte SQL-Syntax oder MongoDB-Syntax zu verwenden. Die auszugebenden Werte sollten bei SQL-Datenbanken als typisierte Variablen in der Form @Feldname in die Anweisung eingebunden werden. Dabei muss der Parameter Name der Felder verwendet werden, die unter Schedule[].Task[].Field[] definiert sind. Feldinhalte können alternativ (und bei einer MongoDB ausschließlich) durch eine Textersetzung mit %Feldname% in die Anweisung eingefügt werden. In diesem Fall muss der Ersetzungstext genau die Syntax haben, die für das Datenbanksystem erforderlich ist.

In der Eigenschaft .Delete kann in nativer Syntax optional eine DELETE-Anweisung definiert werden, um die Zieltabelle vor der Übertragung neuer Datensätze zu leeren.

Schedule[].Task[].Field[]

Definition der Felder, die von den Quelldatensätzen in die Zieldatensätze übertragen werden

Die Felder in Form mehrerer Teilparameter definiert:

  1. Name(*): interner Variablenname

  2. InputName: Name des Feldes im Quelldatensatz

  3. Macro: Feldmakroausdruck zur Generierung oder Aufbereitung eines Feldinhalts

Der Name des Quellfeldes ist abhängig vom Quellsystem. Bei einer relationalen Datenbank entspricht der Name z. B. dem Feldnamen, der von der SELECT-Abfrage zurückgeliefert wird. Berechnete oder aggregierte Felder haben keinen dedizierten Namen. Wenn für die aggregierten Felder nicht per AS-Klausel explizit ein Name vorgegeben ist, erhalten diese den Pseudonamen Column {Feldnummer}.

Felder, die nicht aus den Eingabedaten stammen und somit keinen InputName haben, können ebenfalls definiert werden. Diese Felder werden künstlich zu dem Datensatz hinzugefügt und können den Feldwert aus einem Makroausdruck beziehen. Wenn der Feldwert nicht aus einem Makroausdruck bezogen wird, bleibt der Wert leer.

Der Parameter Macro bereitet den Wert eines eingelesenen Feldes vor dessen Ausgabe inhaltlich auf. Außerdem kann dieser Parameter neue Werte generieren. In der Regel basieren die neu generierten Werte auf Werten anderer Felder. Der Makroausdruck muss syntaktisch ein Feldmakro sein. Über die Variablen @Feldname kann in dem Makroausdruck auf alle Felder des aktuellen Datensatz zugegriffen werden. Das Einfügen von Variablen per Textersetzung wird an dieser Stelle nicht unterstützt.

Schedule[].Task[].LogRecords

Schedule[].Task[].LogMacros

Wahrheitswerte, ob die Inhalte eingelesener und aufbereiteter Datensätze und die Einzelschritte der Makroausführung protokolliert werden

Im Standard werden Informationen dieser Art mit dem Log-Grad Debug protokolliert. Im Vergleich zu der normalen Dokumentverarbeitung wird bei dem Transfer von Datenbank-Datensätzen tendenziell mit einer deutlich größeren Anzahl von Sätzen gearbeitet. Dies kann zu vielen Protokolleinträgen und langen Logs führen. Daher kann die Protokollierung an dieser Stelle separat aktiviert werden. Dies sollte jedoch nur in Ausnahmefällen genutzt werden, z. B. zur Problemanalyse.

Standardwert: FALSE

Schedule[].Task[].MaxErrorRecords

Zahlenwert, nach wie vielen fehlerhaft verarbeiteten Datensätzen der Task als Ganzes abgebrochen wird

Um trotz vereinzelter Fehler möglichst viele Datensätze ohne Abbruch zu übertragen, kann hier ein entsprechender Schwellwert definiert werden, wie viele Fehler toleriert werden sollen. Für die vor einem Abbruch bereits erfolgreich transferierten Sätze findet kein Rollback statt.

Standardwert: 0 (sofortiger Abbruch nach einem Fehler)

Beispiel

Der folgenden Auszug einer Task-Konfiguration dient als Beispiel für einen einfachen Datentransfer von einer Datenbanktabelle des Microsoft SQL Servers in eine andere Datenbanktabelle:

{
   "Type": "DbTransfer",
   "InputDb": {
      …
      "Select": "SELECT [InField1], [InField2], [InField3] FROM [InTable]"
   },
   "OutputDb": {
      …
      "Delete": "DELETE FROM [OutTable]",
      "Insert": "INSERT INTO [OutTable]([OutField1], [OutField2], [OutField3])
                 VALUES (@FIELD1, @FIELD2, @FIELD3)"
   },
   "Field": [
      "FIELD1, InField1",
      "FIELD2, InField2",
      "FIELD3, InField3"
   ]
}

Dieses Beispiel zeigt, dass die Zuordnung der internen Feldnamen zu den Eingabefeldern aus der Quelltabelle über die .Fields-Auflistung erfolgt. Die Zuordnung zu den Ausgabefeldern in der Zieltabelle erfolgt hingegen direkt innerhalb der INSERT-Anweisung.

Bei der Übertragung der Quellfeldwerte in die Zielfeldwerte muss auf die Kompatibilität der Datentypen geachtet werden. Ohne zusätzliche Aufbereitung durch Makrofunktionen werden die Quellwerte unverändert in die Zielfelder übernommen. Jedoch erfolgt bereits hier eine implizite Konvertierung der eingelesenen Werte in einen äquivalenten .NET-Datentyp und bei der Ausgabe zurück in den Zieldatentyp. Dabei werden alle .NET-Datentypen unterstützt. Die direkte Weitergabe der Werte kann bei einigen speziellen Datentypen der Datenbanksysteme aber dennoch problematisch sein, wenn diese Typen kein direktes Äquivalent in .NET haben oder die Quelldatenbank und die Zieldatenbank nicht die gleichen Typen nutzen.

Wenn Makrofunktionen zur Generierung und Aufbereitung der Werte verwendet werden, wird der Umfang der nutzbaren Datentypen weiter beschränkt auf die Typen, die der interne Makrointerpreter unterstützt. Die vielfältigen Ausprägungen von Datenbank-Datentypen können in der Regel implizit in die Datentypen des Makrointerpreters umgewandelt werden. Text-Datentypen und numerische Datentypen können in der Regel z. B. implizit in die Typen "Text" und "Number" des Makrointerpreters umgewandelt werden und dadurch in Makros genutzt werden. Ausgeschlossen hiervon sind Datentypen, die Binärdaten aufnehmen. Alternativ zu den internen Makrofunktionen können Quellwerte und Zielwerte auch direkt innerhalb der SELECT- und INSERT-Anweisungen durch entsprechende CAST-Funktionen konvertiert werden.

Bei der Verwendung von Makrofunktionen ist außerdem zu beachten, dass der interne Makrointerpreter NULL-Werte nicht unterstützt. Der Makrointerpreter verwendet stattdessen leere Standardwerte in Abhängigkeit vom Datentyp, z. B. einen Leerstring ("") für einen leeren Textwert. Eine Makrofunktion liefert daher kein NULL als Ergebnis zurück. Der Umgang mit NULL-Werten als Eingabeparameter ist abhängig von der konkreten Implementierung der Makrofunktion. Wenn in dem obigen Beispiel das Quellfeld InField1 ein Textfeld wäre und das Zielfeld OutField1 einen numerischen Datenbank-Datentyp hätte, könnte eine Makrofunktion zur typgerechten Konvertierung ParseAsNumber(@FIELD1) lauten. Wenn aber z. B. aber der Quellwert NULL ist, wird diese Funktion als Ergebnis den Wert 0 für einen leeren Zahlenwert zurückliefern. Um explizit den Originalwert NULL an das Zielfeld durchzureichen, ist eine zusätzliche Prüfung der Art If(!IsNull(@FIELD09), ParseAsNumber(@FIELD09)) erforderlich. Die Konvertierung wird dann nur durchgeführt, wenn der Quellwert nicht NULL ist, ansonsten bliebe der Wert unverändert.