recent.digital

Automatisierung f├╝r JTL Wawi

# Roinx# JTL Wawi+ 3 weitere Tags
123

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

Diese Seite teilen

Digitalisieren Sie Ihre Prozesse und IT-Systeme

cloud

IT-Infrastruktur

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

widgets

Digitales Arbeiten

Office-Anwendungen, Kommunikations-Pl├Ąne, Zeiterfassung.

shopping_cart

Online-Handel & eCommerce

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