Pull the trigger – Action, Scheduler!
Pull the trigger – Action, Scheduler!
Automatisierte Prozesse laufen auf zwei Arten ab: Entweder werden sie von externen Triggern in Gang gesetzt wie dem Eintreffen einer E-Mail in einem Postfach; oder sie laufen nach “Schema F” ab, d. h. nach einem Zeitplan. Dieser Zeitplan kann jedoch intelligent gestaltet werden und muss nicht notwendigerweise anspruchslos sein. Im vorliegenden Fall sollen Tracking Daten je Wochentag zu unterschiedlichen Zeitpunkten in ein Kernsystem eingelesen werden, damit dieses sie umgehend an Kunden als Statusmeldung versendet. Da Tracking Daten aber deutlich vor diesem Zeitpunkt eintreffen, müssen sie gepuffert werden und dürfen erst später weitergeleitet werden. Ansonsten würden LKWs vergeblich losfahren und auf die avisierte Ware warten müssen. Ein teures Spiel in der Transportlogistik.
Von Montag bis Freitag sollen die Transporte mit einem Bereitstellungszeitpunkt täglich um 17 Uhr an die Auftraggeber der einzelnen Transporte kommuniziert werden. Das übernimmt unser Transportmanagementsystem, welches die Meldungen in einem bestimmten Format einliest. Die Meldungen selbst schickt der Dienstleister B als Excel Listen per E-Mail an Dienstleister A, der diese anschließend in das moderne JSON-Format konvertiert. Der Grund: Excel ist ein undurchsichtiges, proprietäres Format zum maschinellen Verarbeiten, auch wenn es großen Stärken für den Endanwender am PC hat. Wir haben dazu in einem früheren LinkedIn Artikel berichtet.
Samstags sollen die Transporte abweichend von den übrigen Werktagen nicht um 17 Uhr gemeldet werden, sondern mit Bereitstellungszeitpunkt Sonntag um 6 Uhr früh. Die Excel Liste zu diesen Samstagstransporten trifft jedoch erst am Montag im Laufe des Tages ein, soll dann aber unmittelbar die Statusmeldung an die Auftraggeber auslösen.
Wie kann dieser Anwendungsfall unkompliziert umgesetzt werden? Workato als führende Automatisierungs- und Integrationsplattform bietet sogenannte „Scheduled Trigger” an. Das sind zeitliche Konfigurationsmöglichkeiten am Anfang eines Recipe (wie Workato einen Automatisierungsprozess nennt). Eine solche Konfiguration kann z. B. ein Zeitpunkt jede Stunde oder alle 10 Minuten sein, aber auch ein fester Zeitpunkt wie z. B. 17:15 Uhr. Natürlich lässt sich auch die Zeitzone einstellen, die gerade im internationalen Geschäft bedeutsam ist.
Im vorliegenden Fall hilft ein fester Zeitpunkt aber nicht, genauso wenig wie ein regelmäßiger Zeitpunkt. Vielmehr ist eine Differenzierung zwischen Wochentag und Wochenende nötig, sodann eine weitere zeitliche Differenzierung zwischen 17 Uhr und 6 Uhr.
Was wäre die Welt ohne Cron-Jobs, die unter Linux bestens bekannt sind! Um maximale Flexibilität zu gewährleisten, bieten Workato “Scheduled Trigger” auch diese Option. In unserem Fall erstellen wir zwei Trigger: Einen Trigger, welcher die Wochentag Dienstag bis Freitag 17 Uhr abdeckt und zu diesen Zeitpunkten das Recipe startet. Im Cron-Format sieht das so aus: 5 17 * * 2-5. Übersetzt: Fünf Minuten nach 17 Uhr, jeden Tag, jeden Monat, an den Wochentagen 2 (Dienstag) bis 5 (Freitag). Einen weiteren Trigger, welcher den Samstag abdeckt und die Statusmeldung mit einem Zeitstempel von Sonntag 6 Uhr Früh am darauffolgenden Montag versendet, sobald die Excel Liste eingetroffen ist. Dieser zweiter Trigger soll jedoch nur montags in der Zeit zwischen 6 und 21 Uhr ausgelöst werden, dafür alle 30 Minuten, sofern eine neue Excel Liste eingetroffen ist. Im Cron-Format: */30 6-20 * * 1. Übersetzt: Alle 30 Minuten, zwischen 6 und 20(:59) Uhr, jeden Tag, jeden Monat, am Wochentag Montag.
Es gibt jedoch noch eine weitere Möglichkeit: So können statt eines Cron-Triggers auch zwei Ruby-Funktionen in ein und demselben Recipe benutzt werden; eine zur Prüfung, des Wochentags und dann eine weitere zur Prüfung, ob es bereits 6 Uhr oder 17 Uhr ist. Über eine Lookup-Action stellt man sicher, dass am Montag um 17 Uhr nicht nochmals der Samstagtransport übergeben wird, wenn das bereits um 6 Uhr schon der Fall war.
In der Triggerbedingung bedient man sich eines kleinen Tricks: Man sieht mit einfachen Ruby-Funktionen in der Triggerkonfiguration nach, ob im Array [1, 2, 3, 4, 5] der aktuelle Wochentag (wday) enthalten ist und ob es 6 Uhr oder 17 Uhr ist. 1 entspricht Montag, 2 Dienstag usw… Ist das der Fall, dann wird die Zustellung der Statusmeldungen veranlasst.
Welchen Weg man benutzen möchte, liegt im Ermessen des Entwicklers. Als Freund von Klarheit und Einfachheit sollte der umsichtige Entwickler selbsterklärende Konstrukte bevorzugen. Daher neigt der Autor zum ersten Ansatz mit zwei Recipe-Aufrufen, d. h. zwei separaten Triggern. Zwar erhöht das die Anzahl der eingesetzten Recipes, jedoch hilft es dem Unternehmen auch Monate nach der Inbetriebnahme, die Absicht des Urhebers auf einen Blick zu erkennen. In diesem Sinn: Pull the trigger!