recent.digital

Automatisierung für JTL Wawi

# Roinx# JTL Wawi+ 3 weitere Tags

ROINX automatisiert diverse Aufgaben auf Windows Servern und in der Wawi.

Torben Zarnick

Aufgaben planen mit Cron

In der workflows.json im Installations-Verzeichnis können beliebig viele Aufgaben (Tasks) mit beliebig vielen Einzelschritten (Steps) angelegt werden. Die Aufgaben werden in flexiblen Zeit-Intervallen (Cronjobs) 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
GET ManualTaskTrigger/{Task-ID} 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"
      }
  }

Auf dieser Seite

Digitalisieren Sie Ihre Prozesse und IT-Systeme

IT-Infrastruktur

Cloudinfrastrukturen, Arbeitsplatz-Sicherheit, Cybersecurity, Server-Systeme.

Digitales Arbeiten

Office-Anwendungen, Kommunikations-Pläne, Zeiterfassung.

Online-Handel & eCommerce

Onlineshops, Warenwirtschaft, Kassensysteme, Zahlungen erhalten am Point of Sale oder Online.