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
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).
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.
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"
}
}