Workflow Konfiguration Middleware Connector

Zuletzt aktualisiert Vor etwa 1 Monat

Einleitung

Ab der Version 2024.1 ist für die Nutzung der Schnittstelle, also dem Datenaustausch von Stamm- und Bewegungsdaten zu JobRouter, ein zusätzlicher Dienst - der Middleware Connector (kurz: MWC) - erforderlich. Der Middleware Connector übernimmt dabei die Kommunikation mit dem SQL-Server auf der einen Seite und Finance auf der anderen Seite. Letzteres läuft über eine eigene API, die in Finance zur Verfügung gestellt wird. Finance übernimmt wie zuvor die Bereitstellung der Stammdaten und die Verarbeitung von bereitgestellten Bewegungsdaten.

Installation und Einrichtung

Die Installation und Einrichtung sind in unserem Download-Portal [Link nicht verfügbar: Page ID 36831277] zur jeweiligen Version beschrieben.

Konfigurationsbeispiele

Import

Ablauf

Der zuständige MWC-Job selektiert die Zeilen aus der SQL-Datenbank anhand verschiedener Filterkriterien, die sich aus der Einrichtung in Finance ergeben. Die selektierten Zeilen werden anschließend per API an Finance übertragen, welche dann über einen zeitgesteuerten Job in der Aufgabenwarteschlange in Finance weiterbearbeitet werden. Damit die aktualisierten Status-Informationen (Feld "bk_status") übertragen werden, fragt ein weiterer MWC-Job die geänderten Datensätze ab und überträgt die Änderungen an die SQL-Datenbank.

Einrichtung in Finance

Aus der Einrichtung in Finance (Workflow Standorte) werden die notwendigen Informationen wie Schritt-Nr. (für den Filter auf das Feld "step") und Status (für den Filter auf das Feld "bk_status") ermittelt.

Aufruf: Dokumentenverwaltung, Stammdaten, Einrichtung Workflow

Aufgabenwarteschlange

In der Aufgabenwarteschlange wird der Bericht 5542103 verwendet, um den Import zu verarbeiten. Über die zugehörige Berichtsanfrageseite kann eine Gruppe vergeben werden, die der Gruppe aus der Einrichtung entspricht, um somit einzelne Einrichtungen gezielt zu filtern, z. B. wenn mehrere Statusinformationen verwendet werden sollen. Über Protokolleinträge oder alternativ Fehler anzeigen können etwaige Fehlermeldungen im Fehlerfall eingesehen werden. Ebenso kann bei den Protokolleinträgen nachvollzogen werden, wann der letzte Import durchgeführt wurde.

Aufruf: Dokumentenverwaltung, Warteschlange

Auswertungen in Finance

Innerhalb der Einrichtung gibt es unter Nacharbeiten mehrere Aufrufe zu den importierten Daten. Zu jedem Import ist dort eine Übersicht zu finden, in welcher die importierten Zeilen zu finden sind. Zu jeder Zeile gibt es dann einen Aufruf "Status" unter Auswerten, wo dann detaillierte Informationen eingesehen werden können. Das kann z. B. im REBU der Status 1001 "Es existiert bereits ein historisierter REBU-Beleg zum jeweiligen Beleg bereit." sein.

Aufruf: Dokumentenverwaltung, Stammdaten, Einrichtung Workflow, Nacharbeiten,

  • Rechnungseingang Importdaten => REBU

  • Kassenbuch Importdaten => KABU

  • Rechnungsausgangsbuch Importdaten => RABU

  • Urlaubsanträge Importdaten => URLAUB

  • Bestellungen Importdaten => BESTELLUNGEN

  • Stammdaten Importdaten => STAMMDATEN

Quellen zur Fehleranalyse

  • Importdatentabellen, um festzustellen, ob die Datensätze in Finance angekommen

  • Sind die Daten in Finance angekommen, dann im Status aus der jeweiligen Importdaten-Übersicht überprüfen, ob entsprechende Informationen vorliegen, warum die Daten nicht weiterverarbeitet wurden

  • Status des Aufgabenwarteschlangenpostens kontrollieren, ob dieser auf einen Fehler gelaufen ist

  • Wenn die Daten nicht in Finance angekommen sind, dann sind im Log vom MWC-Job weitere Informationen zu finden

Konfiguration des Middleware Connectors

Es gibt mehrere Faktoren, die darüber entscheiden, ob die mitgelieferten Standardkonfigurationen verwendet werden können oder ob eigene verwendet werden müssen. Das sind:

  1. Tabellennamen auf SQL-Ebene

  2. Anzahl an unterschiedlichen Tabellen pro Import, wie z. B. zwei Tabellen für den Rechnungseingang

  3. Nicht alle Tabellen aus dem Standard werden verwendet

Definierter Standard:

Import

Tabellenname

Rechnungseingang

REBUKOPF

REBUZEILE

Rechnungsausgang

RABUKOPF

RABUZEILE

Kassenbuch

KABUKOPF

KABUZEILE

Bestellungen

BESTELLKOPF

Urlaubsanträge

URLAUBANTRAG

NU-Bescheinigungen

STAMMDATEN

Tabellennamen entsprechen dem definierten Standard 

Wenn die Tabellennamen dem definierten Standard entsprechen, können die mitgelieferten Standardkonfigurationen verwendet werden.

Tabellennamen entsprechen nicht dem definierten Standard

Wie in der Einrichtungsbeschreibung bereits vermerkt ist, wird dafür eine eigene Konfigurationsdatei benötigt.

In dem vorliegenden Beispiel wurden die Tabellen REBUKOPF, REBUZEILE, RABUKOPF und RABUZEILE umbenannt. Die geänderten Tabellennamen sind innerhalb der "DataSets" beim "TableName" zu ändern.

{  "HttpApis": [  ],  "SqlDatabases": [    {      "Id": "JobRouterDB",      "Schema": {			...      },      "DataSets": [        {          "Name": "Rebukopf", "TableName": "REBUKOPFWEBCLIENT", "KeyColumns": "processid, step_id",          "WhereFilter": "{{filterRebu}}"        },        {          "Name": "Rebuzeile", "TableName": "REBUZEILEWEBCLIENT", "KeyColumns": "processid, step_id, row_id",          "ParentDataSet": "Rebukopf", "ParentKeyColumns": "processid, step_id"        },        {          "Name": "Kabukopf", "TableName": "KABUKOPF", "KeyColumns": "processid, step_id",          "WhereFilter": "{{filterKabu}}"        },        {          "Name": "Kabuzeile", "TableName": "KABUZEILE", "KeyColumns": "processid, step_id, row_id",          "ParentDataSet": "Kabukopf", "ParentKeyColumns": "processid, step_id"        },        {          "Name": "Rabukopf", "TableName": "RABUKOPFWEBCLIENT", "KeyColumns": "processid, step_id",          "WhereFilter": "{{filterRabu}}"        },        {          "Name": "Rabuzeile", "TableName": "RABUZEILEWEBCLIENT", "KeyColumns": "processid, step_id, row_id",          "ParentDataSet": "Rabukopf", "ParentKeyColumns": "processid, step_id"        },        {          "Name": "Urlaubantrag", "TableName": "URLAUBANTRAG", "KeyColumns": "processid, step_id",          "WhereFilter": "{{filterBLO}}"        },        {          "Name": "Bestellkopf", "TableName": "BESTELLKOPF", "KeyColumns": "processid, step_id",          "WhereFilter": "{{filterEK}}"        },        {          "Name": "Stammdaten", "TableName": "STAMMDATEN", "KeyColumns": "processid, step_id",          "WhereFilter": "{{filterStamm}}"        },        {...}      ],      "ReadOptions": {        "DataSets": [ "Rebukopf", "Rebuzeile", "Kabukopf", "Kabuzeile", "Rabukopf", "Rabuzeile", "Urlaubantrag", "Bestellkopf", "Stammdaten" ]      },      "WriteOptions": {			...      }    }  ]}

Es sind mehrere Importtabellen vorhanden

Im vorliegenden Beispiel sind die Tabellen für den Rechnungseingang mehrfach vorhanden. In diesem Fall werden mindestens zwei eigene Konfigurationsdateien benötigt. Die Anzahl der Konfigurationen hängt von der Anzahl der unterschiedlichen Importtabellen ab. Bei der Erstellung der Konfigurationen sind die Felder "TableName" innerhalb der "DataSets" anzupassen, die "Id" bei den "SqlDatabases" sowie in einer eigenen Konfiguration für den Export* die "Id" bei den "HttpApis". Die ID wird zur Zuweisung der Konfiguration (über das Feld "Datenhaltung") zu einem MWC-Job verwendet. 

Die Status-Änderung für das Feld "BK_Status" wird über den Export-Job Workflow Konfiguration Middleware Connector mit übertragen.

Konfiguration 1 (SQL > Finance):

{  "HttpApis": [  ],  "SqlDatabases": [    {      "Id": "JobRouterDB",      "Schema": {			...      },      "DataSets": [        {          "Name": "Rebukopf", "TableName": "REBUKOPF", "KeyColumns": "processid, step_id",          "WhereFilter": "{{filterRebu}}"        },        {          "Name": "Rebuzeile", "TableName": "REBUZEILE", "KeyColumns": "processid, step_id, row_id",          "ParentDataSet": "Rebukopf", "ParentKeyColumns": "processid, step_id"        },        {          "Name": "Kabukopf", "TableName": "KABUKOPF", "KeyColumns": "processid, step_id",          "WhereFilter": "{{filterKabu}}"        },        {          "Name": "Kabuzeile", "TableName": "KABUZEILE", "KeyColumns": "processid, step_id, row_id",          "ParentDataSet": "Kabukopf", "ParentKeyColumns": "processid, step_id"        },        {          "Name": "Rabukopf", "TableName": "RABUKOPF", "KeyColumns": "processid, step_id",          "WhereFilter": "{{filterRabu}}"        },        {          "Name": "Rabuzeile", "TableName": "RABUZEILE", "KeyColumns": "processid, step_id, row_id",          "ParentDataSet": "Rabukopf", "ParentKeyColumns": "processid, step_id"        },        {          "Name": "Urlaubantrag", "TableName": "URLAUBANTRAG", "KeyColumns": "processid, step_id",          "WhereFilter": "{{filterBLO}}"        },        {          "Name": "Bestellkopf", "TableName": "BESTELLKOPF", "KeyColumns": "processid, step_id",          "WhereFilter": "{{filterEK}}"        },        {          "Name": "Stammdaten", "TableName": "STAMMDATEN", "KeyColumns": "processid, step_id",          "WhereFilter": "{{filterStamm}}"        },        {...}      ],      "ReadOptions": {        "DataSets": [ "Rebukopf", "Rebuzeile", "Kabukopf", "Kabuzeile", "Rabukopf", "Rabuzeile", "Urlaubantrag", "Bestellkopf", "Stammdaten" ]      },      "WriteOptions": {			...      }    }  ]}

Konfiguration 1 (Finance > SQL):

{  "HttpApis": [    {      "Id": "FinanceApi",      "ModifiedAtField": "changedAt",      "DeletedAtField": "deletedAt",      "QueryArguments": [        { "FilterMode": "ModifiedAt", "Parameter": "$filter", "Value": "changedAt gt {{lastSyncTime}} and tableNameExternal eq 'REBUKOPF'", "FallbackValue": "changedAt gt 0001-01-01T00:00:00Z" },        { "FilterMode": "DeletedAt", "Parameter": "$filter", "Value": "deletedAt gt {{lastSyncTime}} and tableNameExternal eq 'REBUKOPF'", "FallbackValue": "deletedAt gt 0001-01-01T00:00:00Z" }      ],      "DataSets": [        {...}      ],      "WriteOptions": {        ...      },      "VariableProviderQuery": "workflowSetup",      "ApiVersionQuery": "workflowApiVersion",      "RequiredApiVersion": "1.0"    }  ],  "SqlDatabases": [  ]}

Konfiguration 2 (SQL > Finance):

{  "HttpApis": [  ],  "SqlDatabases": [    {      "Id": "JobRouterDB2",      "Schema": {			...      },      "DataSets": [        {          "Name": "Rebukopf", "TableName": "REBUKOPFWEBCLIENT", "KeyColumns": "processid, step_id",          "WhereFilter": "{{filterRebu}}"        },        {          "Name": "Rebuzeile", "TableName": "REBUZEILEWEBCLIENT", "KeyColumns": "processid, step_id, row_id",          "ParentDataSet": "Rebukopf", "ParentKeyColumns": "processid, step_id"        },        {          "Name": "Kabukopf", "TableName": "KABUKOPF", "KeyColumns": "processid, step_id",          "WhereFilter": "{{filterKabu}}"        },        {          "Name": "Kabuzeile", "TableName": "KABUZEILE", "KeyColumns": "processid, step_id, row_id",          "ParentDataSet": "Kabukopf", "ParentKeyColumns": "processid, step_id"        },        {          "Name": "Rabukopf", "TableName": "RABUKOPF", "KeyColumns": "processid, step_id",          "WhereFilter": "{{filterRabu}}"        },        {          "Name": "Rabuzeile", "TableName": "RABUZEILE", "KeyColumns": "processid, step_id, row_id",          "ParentDataSet": "Rabukopf", "ParentKeyColumns": "processid, step_id"        },        {          "Name": "Urlaubantrag", "TableName": "URLAUBANTRAG", "KeyColumns": "processid, step_id",          "WhereFilter": "{{filterBLO}}"        },        {          "Name": "Bestellkopf", "TableName": "BESTELLKOPF", "KeyColumns": "processid, step_id",          "WhereFilter": "{{filterEK}}"        },        {          "Name": "Stammdaten", "TableName": "STAMMDATEN", "KeyColumns": "processid, step_id",          "WhereFilter": "{{filterStamm}}"        },        {...}      ],      "ReadOptions": {        "DataSets": [ "Rebukopf", "Rebuzeile", "Kabukopf", "Kabuzeile", "Rabukopf", "Rabuzeile", "Urlaubantrag", "Bestellkopf", "Stammdaten" ]      },      "WriteOptions": {			...      }    }  ]}

Konfiguration 2 (Finance > SQL):

{  "HttpApis": [    {      "Id": "FinanceApiWeb",      "ModifiedAtField": "changedAt",      "DeletedAtField": "deletedAt",      "QueryArguments": [        { "FilterMode": "ModifiedAt", "Parameter": "$filter", "Value": "changedAt gt {{lastSyncTime}} and tableNameExternal eq 'REBUKOPFWEBCLIENT'", "FallbackValue": "changedAt gt 0001-01-01T00:00:00Z" },        { "FilterMode": "DeletedAt", "Parameter": "$filter", "Value": "deletedAt gt {{lastSyncTime}} and tableNameExternal eq 'REBUKOPFWEBCLIENT'", "FallbackValue": "deletedAt gt 0001-01-01T00:00:00Z" }      ],      "DataSets": [        {...}      ],      "WriteOptions": {        ...      },      "VariableProviderQuery": "workflowSetup",      "ApiVersionQuery": "workflowApiVersion",      "RequiredApiVersion": "1.0"    }  ],  "SqlDatabases": [  ]}

Nicht alle Tabellen aus dem definierten Standard werden verwendet

Wie in der Einrichtungsbeschreibung bereits vermerkt ist, wird dafür eine eigene Konfigurationsdatei benötigt.

In dem vorliegenden Beispiel werden die Tabellen REBUKOPF und REBUZEILE verwendet. Die übrigen Tabellen werden innerhalb der "DataSets" entfernt.

{  "HttpApis": [  ],  "SqlDatabases": [    {      "Id": "JobRouterDB",      "Schema": {			...      },      "DataSets": [        {          "Name": "Rebukopf", "TableName": "REBUKOPF", "KeyColumns": "processid, step_id",          "WhereFilter": "{{filterRebu}}"        },        {          "Name": "Rebuzeile", "TableName": "REBUZEILE", "KeyColumns": "processid, step_id, row_id",          "ParentDataSet": "Rebukopf", "ParentKeyColumns": "processid, step_id"        },        {...}      ],      "ReadOptions": {        "DataSets": [ "Rebukopf", "Rebuzeile" ]      },      "WriteOptions": {			...      }    }  ]}

Export

Ablauf

Mit der Ausführung des Berichtes 5542104 in der Aufgabenwarteschlange werden die Stammdaten vorbereitet. Der MWC ruft dann die geänderten Stammdaten per API ab und überträgt diese in die SQL-Datenbank. Bestehende Datensätze werden dabei aktualisiert.

Einrichtung in Finance

Im Register "Exportumfang" in der Einrichtung werden die gewünschten Stammdaten ausgewählt, welche aus den jeweiligen Mandanten exportiert werden sollen. Die gewünschten Mandanten werden über die Einrichtung einer Firmengruppe im Register "Allgemein" vorgenommen.

Aufruf: Dokumentenverwaltung, Stammdaten, Einrichtung Workflow

Aufgabenwarteschlange

Für den Export wird in der Aufgabenwarteschlange der Bericht 5542104 verwendet. In der Berichtsanfrageseite kann wie beim Import die Gruppe eingeschränkt werden und zudem festgelegt werden, ob die Stammdaten neu exportiert werden sollen oder nicht. Das wird über die Auswahl "Neu zusammenstellen" gesteuert. Über Protokolleinträge oder alternativ Fehler anzeigen können etwaige Fehlermeldungen im Fehlerfall eingesehen werden. Ebenso kann bei den Protokolleinträgen nachvollzogen werden, wann der letzte Export durchgeführt wurde.

Aufruf: Dokumentenverwaltung, Warteschlange

Quellen zur Fehleranalyse

  • Status des Aufgabenwarteschlangenpostens kontrollieren, ob dieser auf einen Fehler gelaufen ist

  • Sofern dort keine Fehler aufgetreten sind, dann sind im Log vom MWC-Job weitere Informationen zu finden

Mit Ausnahme des Importes über mehrere Tabellen ist keine eigene Konfiguration für den Export erforderlich. Die notwendigen Informationen zur Zieldatenbank ergeben sich aus der Job-Konfiguration (Verbindungsinformationen innerhalb des Zielabschnittes) des MWC.

Konfiguration des Middleware Connectors

Getrennte Übertragung der Stammdaten und BK_Status-Änderungen

Konfiguration 1 (BK_Status und Upload):

{  "HttpApis": [    {      "Id": "FinanceApi",      "ModifiedAtField": "changedAt",      "DeletedAtField": "deletedAt",      "QueryArguments": [        { "FilterMode": "ModifiedAt", "Parameter": "$filter", "Value": "changedAt gt {{lastSyncTime}}", "FallbackValue": "changedAt gt 0001-01-01T00:00:00Z" },        { "FilterMode": "DeletedAt", "Parameter": "$filter", "Value": "deletedAt gt {{lastSyncTime}}", "FallbackValue": "deletedAt gt 0001-01-01T00:00:00Z" }      ],      "DataSets": [        { "Name": "Rebukopf", "Query": "rebukoepfe", "SupportsDeletedAt": false },        { "Name": "Rebuzeile", "Query": "rebuzeilen" },        { "Name": "Kabukopf", "Query": "kabukoepfe", "SupportsDeletedAt": false },        { "Name": "Kabuzeile", "Query": "kabuzeilen", "SupportsDeletedAt": false },        { "Name": "Rabukopf", "Query": "rabukoepfe", "SupportsDeletedAt": false },        { "Name": "Rabuzeile", "Query": "rabuzeilen", "SupportsDeletedAt": false },        { "Name": "Urlaubantrag", "Query": "personalUrlaube", "SupportsDeletedAt": false },        { "Name": "Bestellkopf", "Query": "einkaufBestellungen", "SupportsDeletedAt": false },        { "Name": "Stammdaten", "Query": "stammdatenImporte", "SupportsDeletedAt": false }      ],      "WriteOptions": {        "OutputStringForNullDate": "0001-01-01T00:00:00Z",        "FieldMappings": [          { "DataSet": "Rebuzeile", "SourceField": "produktbuchungsgrupp", "TargetField": "produktbuchungsgruppe" },          { "DataSet": "Urlaubantrag", "SourceField": "personalnr", "TargetField": "personalnummer" },          { "DataSet": "Rebukopf", "SourceField": "freigabevermerk", "TargetField": "freigabevermerk@odata.mediaEditLink" },          { "DataSet": "Rebukopf", "SourceField": "pruefvermerk", "TargetField": "pruefvermerk@odata.mediaEditLink" },          { "DataSet": "Stammdaten", "SourceField": "Dokument_ID", "TargetField": null }        ]      },      "VariableProviderQuery": "workflowSetup",      "ApiVersionQuery": "workflowApiVersion",      "RequiredApiVersion": "1.0"    }  ],  "SqlDatabases": [  ]}

Konfiguration 2 (Stammdaten):

{  "HttpApis": [    {      "Id": "FinanceApi",      "ModifiedAtField": "changedAt",      "DeletedAtField": "deletedAt",      "QueryArguments": [        { "FilterMode": "ModifiedAt", "Parameter": "$filter", "Value": "changedAt gt {{lastSyncTime}}", "FallbackValue": "changedAt gt 0001-01-01T00:00:00Z" },        { "FilterMode": "DeletedAt", "Parameter": "$filter", "Value": "deletedAt gt {{lastSyncTime}}", "FallbackValue": "deletedAt gt 0001-01-01T00:00:00Z" }      ],      "DataSets": [        { "Name": "Abwarten", "Query": "queryBKAbwarten" },        { "Name": "Adresse_Typ", "Query": "queryBKAdresseTypen" },        { "Name": "Adresse", "Query": "queryBKAdressen" },        { "Name": "Anlage_AFA", "Query": "queryBKAnlagenAfa" },        { "Name": "Anlage", "Query": "queryBKAnlagen" },        { "Name": "Anzahlungsvorgaenge_D", "Query": "queryBKAnzVorgaengeD" },        { "Name": "Anzahlungsvorgaenge", "Query": "queryBKAnzVorgaenge" },        { "Name": "Artikel", "Query": "queryBKArtikel" },        { "Name": "Artikellieferant", "Query": "queryBKArtikellieferanten" },        { "Name": "BAS", "Query": "queryBKBAS" },        { "Name": "Bauleiter", "Query": "queryBKBauleiter" },        { "Name": "Bestellungen", "Query": "queryBKBestellungen" },        { "Name": "Buchungsmatrix_Einrichtung", "Query": "queryBKBuchungsmatrix" },        { "Name": "Debitor", "Query": "queryBKDebitoren" },        { "Name": "Debitorposten", "Query": "queryBKDebitorposten" },        { "Name": "Dokument_Rechnung_Lieferschein", "Query": "queryBKDokumenteRechnungen" },        { "Name": "Einkaufslieferzeile", "Query": "queryBKLieferzeilen" },        { "Name": "EKListenpreis", "Query": "queryBKListenpreise" },        { "Name": "Ergebniszuordnung", "Query": "queryBKErgebniszuordnungen" },        { "Name": "Geraet", "Query": "queryBKGeraete" },        { "Name": "Geschäftsbuchungsgruppe", "Query": "queryBKGGruppen" },        { "Name": "Gueltige_Kreditoren_Kostenart", "Query": "queryBKKreditorenKar" },        { "Name": "Kassenbuch", "Query": "queryBKKassenbuecher" },        { "Name": "Kostenart", "Query": "queryBKKostenarten" },        { "Name": "Kostenstelle", "Query": "queryBKKostenstellen" },        { "Name": "Kostenstellentyp", "Query": "queryBKKostenstellentypen" },        { "Name": "Kostentraeger", "Query": "queryBKKostentraeger" },        { "Name": "Kreditor", "Query": "queryBKKreditoren" },        { "Name": "Kreditorbank", "Query": "queryBKKreditorBanken" },        { "Name": "KSt_BAS", "Query": "queryBKKStBAS" },        { "Name": "KSt_Kar", "Query": "queryBKKStKar" },        { "Name": "KSt_KTr", "Query": "queryBKKStKTr" },        { "Name": "Lagerfach", "Query": "querybkLagerfaecher" },        { "Name": "Lagerort", "Query": "queryBKLagerorte" },        { "Name": "Lieferant", "Query": "queryBKLieferanten" },        { "Name": "Mandant", "Query": "queryBKMandanten" },        { "Name": "Mengeneinheit", "Query": "queryBKMengeneinheiten" },        { "Name": "Mitarbeiter_SUB", "Query": "queryBKMitarbeiterSUB" },        { "Name": "MWST_Buchungsmatrix_Einr", "Query": "queryBKMWSTBuchungsmatrix" },        { "Name": "MWST_Geschäftsbuchungsgrp", "Query": "queryBKMWSTGGruppen" },        { "Name": "MWST_Produktbuchungsgrp", "Query": "queryBKMWSTPGruppen" },        { "Name": "Niederlassung", "Query": "queryBKNiederlassungen" },        { "Name": "NU_AdrBeschPosVer", "Query": "queryBKNUAdrBeschPosVer" },        { "Name": "NU_Adresse_BesPos", "Query": "queryBKNUAdresseBesPos" },        { "Name": "NU_Bes_uebergreifend", "Query": "queryBKNUBesuebergreifend" },        { "Name": "Nummernserie", "Query": "queryBKNummernserien" },        { "Name": "NURechnung", "Query": "queryBKNURechnungen" },        { "Name": "NUSubNu", "Query": "queryBKNUSubNu" },        { "Name": "NUTeilvertrag", "Query": "queryBKNUTeilvertraege" },        { "Name": "PersonalstammBLO", "Query": "queryBKPersonalstammBLO" },        { "Name": "Produktbuchungsgruppe", "Query": "queryBKPGruppen" },        { "Name": "Projekt", "Query": "queryBKProjekte" },        { "Name": "ProjektBeteiligte", "Query": "queryBKProjektBeteiligte" },        { "Name": "Sachkonto", "Query": "queryBKSachkonten" },        { "Name": "Sparte", "Query": "queryBKSparten" },        { "Name": "Währung", "Query": "queryBKWaehrungen" },        { "Name": "Währungswechselkurs", "Query": "queryBKWaehrungswechselkurse" },        { "Name": "Zahlungsbedingung", "Query": "queryBKZahlungsbedingungen" },        { "Name": "ZV_Kopf", "Query": "queryBKZahlungen" },        { "Name": "ZV_Zeile", "Query": "queryBKZahlungszeilen" }      ],      "WriteOptions": {        "OutputStringForNullDate": "0001-01-01T00:00:00Z",        "FieldMappings": [                  ]      },      "VariableProviderQuery": "workflowSetup",      "ApiVersionQuery": "workflowApiVersion",      "RequiredApiVersion": "1.0"    }  ],  "SqlDatabases": [  ]}

FAQ

Fehlermeldung “Keine Daten zum Einfügen.”

Durch verschiedene Trigger oder Stored Procedures kann es im Zusammenhang mit dem BulkInsert von Daten zu Fehlern kommen. Dieses Problem kann umgegangen werden, wenn in einer appsettings.json im Program Data Verzeichnis [Link nicht verfügbar: Page ID 489098962] die folgende Einstellung für “UseSqlServerBulkOperations” auf false gesetzt wird. Wichtig dabei ist, das übergeordnete “MwcOptions” mit zu übernehmen.

"MwcOptions": {    "UseSqlServerBulkOperations": false  }

Fehlermeldung “Der Job wurde abgebrochen”

Bei großen Datenmengen, die über die API aus Finance heraus übertragen werden, kann es zu einem HTTP Timeout kommen. Der Default-Wert von 1000 kann in der appsettings.json im Program Data Verzeichnis [Link nicht verfügbar: Page ID 489098962] erhöht werden, um das Problem zu lösen.

"MwcOptions": {    "HttpTimeout": 1000  }