đĄ Schluss mit Copy-Paste-RPG: Automatisierung per Workflow statt neuer Programme

tiny-tool.de
In vielen IBM i-Projekten sieht man immer wieder das gleiche Muster: Daten aus der Datenbank holen, irgendwie in eine strukturierte Form bringen, in eine Mail packen und verschicken. Immer wieder. Nur jedes Mal ein bisschen anders â und dafĂŒr wird dann oft ein neues RPG-Programm gebaut.
Doch dieses Prinzip ist keineswegs auf RPG beschrĂ€nkt. Auch in Java-, .NET- oder Python-Projekten finden sich Ă€hnliche Strukturen â meist als schnell zusammengeschriebene Utility-Skripte oder Batchprozesse, die irgendwann schwer wartbar werden.
Aber warum eigentlich?
Geht das nicht auch generischer, konfigurierbarer und wiederverwendbar?
Hinweis
Alle auf dieser Website genannten Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Inhaber. Alle Firmen-, Produkt- und Dienstleistungsnamen, die auf diesem Blog verwendet werden, dienen ausschlieĂlich Identifikationszwecken und implizieren keine Verbindung oder UnterstĂŒtzung durch die jeweiligen Inhaber. Werbung ist entsprechend gekennzeichnet.
đ Immer gleiche Aufgaben â immer neue Programme?
Nehmen wir mal diesen typischen Ablauf:
-
Hole SMTP-Server aus einer Konfigurationstabelle
-
Hole die EmpfĂ€nger fĂŒr einen bestimmten Prozess
-
Hole die eigentlichen Nutzdaten (z.âŻB. aus einer View oder einer Abfrage)
-
Erzeuge daraus eine CSV
-
Wende ein E-Mail-Template an
-
Sende die Mail ĂŒber SMTP
In RPG sieht das oft nach viel Code aus. Und wenn sich etwas Ă€ndert â ein neuer Prozess, ein anderes Template, eine andere Tabelle â wird wieder ein neues RPG gebaut. In anderen Plattformen ist es dann vielleicht ein neues Java-Job-File, ein Python-Script oder ein PowerShell-Task. Gleiches Muster, gleiches Problem.
Dabei könnte man diesen Ablauf wunderbar als Workflow definieren â zum Beispiel so:
  - step: executeSql
    name: fetchMailserver
    query: "SELECT smtp_server FROM config WHERE id = 1"
  - step: executeSql
    name: fetchRecipients
    query: "SELECT email FROM recipients WHERE active = 1"
  - step: executeSql
    name: fetchContent
    query: "SELECT name, value FROM report_data"
  - step: transform
    name: transformData
    type: csv
  - step: applyTemplate
    name: applyEmailTemplates
    subjectTemplate: "emailSubject.ftl"
    bodyTemplate: "emailBody.ftl"
  - step: sendEmail
    name: sendNotification
    smtp: "context:fetchMailserver"
đ§ Die Lösung: Workflows statt „Coding-Orgie“
Um genau solche wiederkehrenden Aufgaben einfacher zu handhaben, habe ich ein kleines Workflow-Framework gebaut: hermes-workflow â ein modularer Ansatz auf Basis von Java und Spring Boot, bei dem Prozesse deklarativ per YAML beschrieben werden. Kein neues RPG-Programm mehr, kein wildes Copy-Paste.
Aktuell wird ein Hotfolder ĂŒberwacht, in den z.âŻB. Job-Files gelegt werden können. Weitere Auslöser sind denkbar (und technisch leicht erweiterbar), etwa:
-
interaktive Aufrufe
-
Zeitsteuerung (z.âŻB. via Quartz oder cronĂ€hnlich)
-
Queues (z.âŻB. MQ, Datenbank-Queues oder IBM i Data Queues)
-
oder WebSocket-basierte Trigger
Und das Beste: Spring Boot machtâs plattformunabhĂ€ngig. Das Ganze lĂ€uft nicht nur auf der IBM i, sondern ĂŒberall â lokal, in der Cloud oder im Docker-Container. Datenbankseitig reicht alles, was per JDBC erreichbar ist.
âïž Hinweis: Das Projekt ist öffentlich verfĂŒgbar â in erster Linie als Lern- und Ăbungsidee gedacht. Wenn du Java- und Spring Boot-Kenntnisse mitbringst (oder gerade einsteigst), kannst du hier gut experimentieren â und nebenbei moderne Integrationsideen aufgreifen, die weit ĂŒber IBM i hinausgehen.
đ€ Aber kann man nicht einfach SQL verwenden, um JSON direkt zu erzeugen?
Klingt verlockend. Und ja â Db2 for i bietet seit V7R3 tatsĂ€chlich eingebaute JSON-Funktionen wie:
-
JSON_OBJECT
â erzeugt ein JSON-Objekt aus Spaltenwerten -
JSON_ARRAY
â erzeugt Arrays von Werten oder Zeilen -
JSON_TABLE
â bringt JSON-Daten wieder in relationale Tabellenform
Diese Funktionen sind sehr nĂŒtzlich, wenn man:
-
einfache Objekte direkt aus SQL erzeugen möchte,
-
schnell ein flaches JSON fĂŒr eine Web-API liefern will,
-
kleine JSON-Strukturen fĂŒr externe Tools oder Services braucht,
-
eingehende JSON-Daten parsen und relational weiterverarbeiten will.
đ Kurz gesagt: FĂŒr klar strukturierte, flache Daten ist das eine schnelle Lösung â besonders wenn man direkt aus Views oder Tabellen arbeitet.
𧱠…aber fĂŒr alles andere?
Sobald die Anforderungen wachsen â z.âŻB.:
-
verschachtelte Objekte mit mehreren Ebenen,
-
dynamische Inhalte (z.âŻB. abhĂ€ngig vom Prozesskontext),
-
unterschiedliche Strukturen je nach Datensatz,
-
Fehlerbehandlung, Transformation, Logging, ReUse â
…wirdâs in reinem SQL sehr schnell komplex und schwer wartbar. Vor allem wenn man spĂ€ter auch noch andere Ausgabeformate benötigt â oder die Struktur regelmĂ€Ăig anpassen muss.
Und genau hier kommt der Workflow-Ansatz ins Spiel:
SQL liefert die Rohdaten â danach ĂŒbernehmen gezielte, konfigurierbare Verarbeitungsschritte.
đ ïž Formatvielfalt durch XSLT: JSON, HTML, Markdown und mehr
Ein Highlight des Systems: Wir nutzen XSLT, um die Daten nach der Abfrage in verschiedenste Formate zu bringen â flexibel, nachvollziehbar und konfigurierbar.
Mitgeliefert sind bereits Transformationen in:
-
CSV â z.âŻB. fĂŒr Excel-Importe oder AnhĂ€nge
-
HTML â fĂŒr direkt lesbare Report-Mails oder Webausgaben
-
JSON & JSONL â fĂŒr moderne API-Formate oder Streaming-Verarbeitung
-
Markdown (MD) â fĂŒr lesbare Log-Dateien, E-Mail-Reports oder technische Doku
Und das Beste: Alles definierbar per YAML und XSLT â ganz ohne stĂ€ndiges Nachprogrammieren im Backend.
âš Fazit:
SQL + JSON-Funktionen? Super fĂŒr klar umrissene Aufgaben.
Aber wenn du flexibel bleiben willst â in Struktur, Format und Verarbeitung â dann ist ein Workflow-System wie dieses die deutlich robustere und wartungsfreundlichere Lösung.
đ Und was kommt als NĂ€chstes?
Das Workflow-System ist bewusst so aufgebaut, dass es mitwachsen kann â und du es StĂŒck fĂŒr StĂŒck an deine Anforderungen anpassen kannst. Die bisherigen Funktionen decken schon viele typische Automatisierungs-Szenarien ab, aber das Potenzial ist noch lange nicht ausgeschöpft.
Folgende Erweiterungen stehen auf der Roadmap â oder lassen sich mit wenig Aufwand ergĂ€nzen:
-
Zeitgesteuerte AusfĂŒhrung von Workflows (z.âŻB. tĂ€glich um 6:00 Uhr morgens)
-
Trigger durch Queues, z.âŻB. IBM MQ, Datenbank-Queues â oder sogar IBM i Data Queues
-
REST-basierte AusfĂŒhrung, z.âŻB. um Prozesse ĂŒber eine API anzustoĂen
-
JSON als Eingabequelle: Derzeit liegt der Fokus auf SQL als Input, aber technisch ist es problemlos möglich, auch JSON-Daten aus Dateien, Webservices oder REST-POST-Aufrufen zu verarbeiten. Damit wĂ€re z.âŻB. auch die Umsetzung klassischer API-basierten EingĂ€nge (Webhook â Workflow) ein Kinderspiel.
-
Weitere Transformationen: Du möchtest aus JSON direkt eine HTML-Tabelle erzeugen oder Markdown-Reports per Slack schicken? Dank XSLT und dem offenen Template-System geht das â heute schon oder bald ganz leicht.
đ Fazit: Was heute eine flexible Lösung fĂŒr âSQL rein, CSV rausâ ist, kann morgen zur zentralen Integrations- und Automatisierungsplattform in deiner IBM i-Umgebung werden â oder darĂŒber hinaus.
𧩠Noch Fragen? Lust auf mehr?
Wenn du dich in deinem Projekt regelmĂ€Ăig dabei ertappst, wie du âmal eben schnellâ ein neues RPG-Programm schreibst, nur um Daten zu holen, zu formatieren oder zu verschicken â dann ist es vielleicht Zeit fĂŒr einen neuen Ansatz.
Workflows statt Copy-Paste. Konfiguration statt Boilerplate. Wiederverwendbare Steps statt Programmfragmenten.
Mit dem hermes-workflow möchte ich zeigen, wie man mit einfachen Mitteln wiederkehrende Aufgaben strukturieren und automatisieren kann â und dabei ganz nebenbei moderne Technologien wie Spring Boot, XSLT und YAML nutzt.
đ Und wenn du neugierig geworden bist: In einem Folgeartikel zeige ich dir, wie du eigene Workflows definierst, mit Templates arbeitest und sogar dynamische Entscheidungen in deine AblĂ€ufe einbauen kannst.
âš AuĂerdem werde ich regelmĂ€Ăig Einblicke in die Implementierung geben und den Funktionsumfang StĂŒck fĂŒr StĂŒck erweitern â ganz praxisnah, mit Fokus auf Wiederverwendbarkeit, Transparenz und ein bisschen SpaĂ an moderner IBM i-Entwicklung.
đ Neugierig geworden?
Der Quellcode zum Workflow-System ist öffentlich auf GitHub verfĂŒgbar:
đ Zum Source-Code auf GitHub
đ Weitere Artikel auf meinem Blog zum Thema:
- Ăber diesen Blog
- JDBC â was ist das eigentlich?
- Java & IBM i via JDBC integrieren
- XSLT verstehen â Die Macht der XML-Daten-Transformation
- Maven und die pom.xml
- Spring Boot Runner â Ăbersicht und Einsatzmöglichkeiten
- Spring Boot Annotations â Ăberblick und Anwendung
- Java-Anwendungen auf IBM i (AS/400) deployen
đ Weitere lesenswerte Ressourcen: