recent.digital
  1. /
  2. /
  3. /

Automatisierung für JTL Wawi

wiki

Aufgaben planen mit Cron

In der <code>workflows.json</code> im Installations-Verzeichnis können beliebig viele Aufgaben (<code>Tasks</code>) mit beliebig vielen Einzelschritten (<code>Steps</code>) angelegt werden. Die Aufgaben werden in flexiblen Zeit-Intervallen (<code>Cronjobs</code>) automatisch ausgeführt werden.

Zeit-Intervalle (Cronjobs) festlegen:

https://crontab.guru/examples.html

Aufgaben-Objekt

Jede Aufgabe ist ein JSON-Objekt und wird in der workflows.json in Knoten Tasks eingefügt.

Felder

Feld

Details

Id

Name der Aufgabe (Keine Leer- und Sonderzeichen)

Interval

Intervall zur Ausführung der Aufgabe. Das Format muss in Cron beschrieben sein. <https://crontab.guru/examples.html

Steps

Objekt mit den einzelnen Schritten.

Aufgaben-Schritte (Steps)

Jeder Schritt hat eigene Konfigurationen mit eigenen Parametern. In den Ressourcen der entsprechenden Funktionen sind die Parameter beschrieben.

Feld

Details

Type

Name der Funktion.

Config

Konfiguration der Funktion mit Parametern

Hier die Liste der Funktionen: Link folgt - sorry

Workflow-Beispiel

{
  "Tasks": [
    {
      "Id": "Bestandsexporte",
      "Interval": "0 */1 * * ?",
      "Steps": [
        {
          "Type": "WriteCsvFromQuery",
          "Config": {
            "TenantId" : "200-001",
            "DestinationFile": "C:\\_ROINX\\_temp\\lager.csv",
            "QueryFile": "C:\\_ROINX\\_addons\\sqlBestandsExport.sql"
          }
        },
	{
          "Type": "InvokeAmeise",
          "Config": {
            "InputFile": "C:\\_ROINX\\_temp\\lager.csv",
            "TemplateId": "IMP1",
            "TenantId": "100-001",
            "JtlHomeDirectory": "C:\\Program Files (x86)\\JTL-Software"
          }
        },
	{
          "Type": "MoveFile",
          "Config": {
            "SourceDirectory": "C:\\_ROINX\\_temp",
            "DestinationDirectory": "C:\\_ROINX\\_archive",
            "FilePattern": "*.csv",
            "AddDatePrefix": true
          }
        }
      ]
    }
  ]
}

Erklärung

Intervall: 0 */1 * * * zu jeder ersten Minuten in jeder Stunde

  1. Schritt “WriteCsvFromQuery”
    Erzeugt eine CSV Datei (DestinationFile) aus dem Ergebnis einer SQL-Abfrage innerhalb einer .sql-Datei (Queryfile) für den Mandanten 200-001 (TenantId).

  2. Schritt “InvokeAmeise”
    Führt die JTL Ameise mit der Import-Vorlage 1 (TemplateId) mit der Datei lager.csv (InputFile) für den Mandanten 100-001 (TenantId) aus.

  3. Schritt “MoveFile”
    Verschiebt alle .csv-Dateien (FilePattern) aus dem Quell-Verzeichnis (SourceDirectory) ins Ziel-Verzeichnis (DestinationDirectory) und versieht alle verschobenen Dateien mit einem Präfix (AddDatePrefix)

Aufgaben manuell ausführen

Aufgaben können außerhalb des Intervalls gestartet werden. Dazu wird der Endpunkt "ManualTaskTrigger" benutzt.

Aufgaben-Name: InvokeAmeise

Zeitgesteuerte Aufgaben können manuell per HTTP-Aufruf gestartet werden.

Methode (HTTP)

Endpunkt

Erklärung

<code>GET </code>

<code>ManualTaskTrigger/{Task-ID} </code>

Startet die Aufgabe mit der {Task-ID}

Autorisierung

"AllowedEndpoints" : [
    "ManualTaskTrigger"
]

Ausführen

Nutzen Sie einen Rest Client wie Postman, um die Anfrage an den Dienst auszuführen.

Sie können bei Bedarf auch die Anfrage direkt über Ihren Browser absetzen.

Dazu geben Sie in Ihren Browser <http://die-adresse-ihres-servers:5000/ManualTaskTrigger/Aufgaben-ID> ein.
Sie müssen Sie dann im Browser mit Ihrer Mandanten-ID und Ihrem API-Key authentifizieren.

Achten Sie darauf, dass Ihr Mandant für die Benutzung dieses Endpunkts autorisiert ist.

Beispiel-Anfrage

<https://service.domain:5000/ManualTaskTrigger/Bestandsexporte>

Workflow-Beispiel

{
  "Tasks": [
    {
      "Id": "Bestandsexporte",
      "Interval": "0 */1 * * ?",
      "Steps": [
        {...}
      ]
    }
  ]
}

Aufrufen der JTL Ameise mit Parametern

Aufgaben-Name: InvokeAmeise

Aufgaben Parameter

Jeder Schritt hat eigene Konfigurationen mit eigenen Parametern. In den Ressourcen der entsprechenden Funktionen sind die Parameter beschrieben.

Parameter

Details

Notwendig

InputFile

Zu Importierende Datei mit Pfad

ja

TemplateId

ID der Importvorlage

ja

TenantId

Import-Mandant

ja

JtlHomeDirectory

Pfad zum Installationsverzeichnis der JTL Wawi

Ja

Beispiel-Konfiguration

{
          "Type": "InvokeAmeise",
          "Config": {
            "InputFile": "C:\\_ROINX\\_temp\\lager.csv",
            "TemplateId": "IMP1",
            "TenantId": "100-001",
            "JtlHomeDirectory": "C:\\Program Files (x86)\\JTL-Software"
          }
        },

Ausführen von Programmen und Scripten

Beliebige ausführbare Dateien können mit Argumenten aufgerufen und ausgeführt werden.

Aufgaben-Name: InvokeExecutable

Aufgaben Parameter

Jeder Schritt hat eigene Konfigurationen mit eigenen Parametern. In den Ressourcen der entsprechenden Funktionen sind die Parameter beschrieben.

Parameter

Details

Notwendig

Executable

Pfad zur ausführbaren Datei

ja

Arguments

Argumente für die ausführbare Datei

optional

Beispiel für die Ausführung eines Powershells

{
  "Tasks": [
    {
      "Id": "PowershellAufgabe1",
      "Interval": "0 */1 * * ?",
      "Steps": [
	      {
          "Type": "InvokeExecutable",
          "Config": {
            "Executable" : "C:\\Program Files\\PowerShell\\7\\pwsh.exe",
            "Arguments": [
              ". C:\\tmp\\random.ps1"
            ]
          }
        }
      ]
    }
  ]
}

Ausführen von SQL-Befehlen

Abfragen, die in .sql-Dateien gespeichert sind, können von Roinx als Schritt in einer Aufgabe ausgeführt werden.
Sie können auch direkt Abfragen (Queries) in die Aufgabe eingeben.

Aufgaben-Name: WriteCsvFromQuery

Aufgaben Parameter

Jeder Schritt hat eigene Konfigurationen mit eigenen Parametern. In den Ressourcen der entsprechenden Funktionen sind die Parameter beschrieben.

Parameter

Details

Notwendig

TenantId

Mandaten-ID, dessen Datenbankverbinung genutzt werden soll

ja

DestinationFile

Datei mit Pfad in der das Ergebnis gespeichert wird

ja

QueryFile

Pfad zur .sql Datei

optional

QueryText

SQL Befehl

optoinal

Beispiel: Abfrage mit SQL-Befehl (Query)

{
  "Tasks": [
    {
      "Id": "AbfrageDurchQuery",
      "Interval": "0 */1 * * ?",
      "Steps": [
        {
          "Type": "WriteCsvFromQuery",
          "Config": {
            "TenantId" : "100-001",
            "DestinationFile": "C:\\tmp\\foo.csv",
            "QueryText": "select 1 as foo, 2 as bar, 3 as baz, 4 as quux"
          }
        }
      ]
    }
  ]
}

Beispiel: Abfrage mit .sql-Datei

{
  "Tasks": [
    {
      "Id": "AbfrageMitDatei",
      "Interval": "0 */1 * * ?",
      "Steps": [
        {
          "Type": "WriteCsvFromQuery",
          "Config": {
            "TenantId" : "100-001",
            "DestinationFile": "C:\\tmp\\foo2.csv",
            "QueryFile": "C:\\tmp\\foo.sql"
          }
        }
      ]
    }
  ]
}

Dateien verschieben

Es können einzelne Dateien oder mehrere Dateien in einem Verzeichnis verschoben werden.
Beim Verschieben vieler Dateien, kann die Datei-Endung angegeben werden, die Sie verschieben wollen.

Aufgaben-Name: MoveFile

Aufgaben Parameter

Jeder Schritt hat eigene Konfigurationen mit eigenen Parametern. In den Ressourcen der entsprechenden Funktionen sind die Parameter beschrieben.

Parameter

Details

Notwendig

SourceDirectory

Quellverzeichnis

ja

DestinationDirectory

Zielverzeichnis

ja

FilePattern

Dateipfad oder Verzeichnispfad mit *.Endung

ja

AddDatePrefix

Setzt einen Zeitstempel vorne an die verschobene Datei

optoinal

Beispiel für alle Dateien mit einer Endung

{
  "Tasks": [
    {
      "Id": "AlleCsvDateienVerschieben",
      "Interval": "0 */1 * * ?",
      "Steps": [
	      {
          "Type": "MoveFile",
          "Config": {
            "SourceDirectory": "C:\\tmp",
            "DestinationDirectory": "C:\\tmp\\foo",
            "FilePattern": "*.csv",
            "AddDatePrefix": true
          }
        }
      ]
    }
  ]
}

Beispiel für eine einzelne Datei

{
  "Tasks": [
    {
      "Id": "EineDateiVerschieben",
      "Interval": "0 */1 * * ?",
      "Steps": [
	      {
          "Type": "MoveFile",
          "Config": {
            "SourceDirectory": "C:\\tmp",
            "DestinationDirectory": "C:\\tmp\\foo",
            "FilePattern": "MyFile.csv",
            "AddDatePrefix": true
          }
        }
      ]
    }
  ]
}

WebRequest (HTTP Request)

Es kann ein Web-Request an einen entfernten Endpunkt geschickt werden. Die Antwort vom Webserver kann gespeichert und in einer Variable für die nächste Aufgabe genutzt werden.

Aufgaben-Name: WebRequest

Aufgaben Parameter

Jeder Schritt hat eigene Konfigurationen mit eigenen Parametern. In den Ressourcen der entsprechenden Funktionen sind die Parameter beschrieben.

GET Request

Parameter

Details

Notwendig

Method

Request Methode (GET, POST)

ja

Url

Request URL

ja

OutputVariable

Variable, die die Reponse speichert

optional

POST Request

Parameter

Details

Notwendig

Method

Request Methode (GET, POST)

ja

Url

Request URL

ja

OutputVariable

Variable, die die Reponse speichert

Optional

JsonBodyTemplatePath

Pfad zur JSON-Datei, die als Body geschickt wird

Ja

Headers

JSON Object des Headers

Ja

Die Properties in der OutputVariable können mit Dotliquid aufgelöst werden.
Im Beispiel-Code haben wir ein Beispiel dafür erstellt.

Beispiel für alle Dateien mit einer Endung

{
      "Type": "WebRequest",
      "Config": {
          "Method": "GET",
          "Url": "https://jsonplaceholder.typicode.com/posts/1",
          "OutputVariable": "LoginResponse"
      }
  },
  {
      "Type": "WebRequest",
      "Config": {
          "Method": "POST",
          "Url": "https://jsonplaceholder.typicode.com/posts",
          "Headers" : {
              "Authorization": "Bearer {{LoginResponse.Body.userId}}"
          },
          "OutputVariable": "postResponse",
          "JsonBodyTemplatePath" : "C:\\tmp\\template.json"
      }
  }