Installation, erster Workflow, Variablen und Fehlerbehandlung.
RUNOS ist ein Werkzeug zur Workflow-Automatisierung für Windows. Ein Workflow besteht aus einem Trigger, der ihn startet, und einer Liste von Aktionen, die nacheinander die Arbeit erledigen. RUNOS läuft lokal auf Ihrem Rechner, im Hintergrund im Infobereich der Taskleiste, und ist kostenlos.
Trigger
Eine neue Datei im Ordner, ein Zeitplan oder ein Klick startet den Workflow. Zu den Triggern
Aktionen
Mails senden (SMTP, Mailprogramm), APIs abfragen und E-Rechnungen erzeugen. Zu den Aktionen
Jeder Lauf wird protokolliert. Schlägt etwas fehl, landet die Datei im Ordner Failed, Sie werden benachrichtigt und können eigene Fehler-Aktionen ausführen lassen.
Installation und Lizenz
Voraussetzungen
Windows 10 (Version 1809 oder neuer) oder Windows 11, 64 Bit
Einmalig eine Internetverbindung zur Aktivierung, danach regelmäßig zur Verlängerung der kostenlosen Lizenz
Für MAPI mit Client: Outlook: das klassische Outlook
Für Drucke aus Programmen ohne Export: ein PDF-Drucker, siehe PDFPrinter (PDF24)
Herunterladen und starten
Laden Sie die aktuelle Version von systemberg.de/runos/download herunter. Sie erhalten eine einzelne Datei runos_<Version>.exe.
Legen Sie die Datei an einen festen Ort, zum Beispiel C:\Programme\RUNOS\runos.exe, und starten Sie sie. Eine Installation ist nicht nötig.
Beim ersten Start fragt RUNOS, ob es anonyme Nutzungsstatistiken senden darf. RUNOS funktioniert in beiden Fällen gleich.
RUNOS läuft nur einmal pro Windows-Sitzung. Wird es ein zweites Mal gestartet, beendet sich die ältere Instanz und die neue übernimmt. Wenn Sie das Fenster schließen, läuft RUNOS im Infobereich der Taskleiste weiter, und Ihre Workflows laufen weiter. Beenden im Tray-Menü stoppt alle Workflows.
Lizenz
RUNOS ist kostenlos. Jede Installation erhält trotzdem eine eigene, an diesen PC gebundene Lizenz:
Aktivierung: Beim ersten Start mit Internetverbindung aktiviert sich RUNOS selbst. Ohne Internet laufen Workflows für 7 Tage nach dem ersten Start; danach pausieren sie, bis der PC einmal online war.
Verlängerung: Die kostenlose Lizenz gilt 30 Tage und wird automatisch verlängert, solange der PC zwischendurch online ist (RUNOS prüft etwa einmal am Tag).
Abgelaufen: Ist die Lizenz abgelaufen, pausieren die Workflows. Workflows und Einstellungen bleiben erhalten, und alles läuft weiter, sobald RUNOS die Lizenz erneuert hat. Eine Datei, die ein File-Trigger während einer Pause findet, bleibt im Ordner und wird danach verarbeitet.
Systemuhr: Steht die Uhr des PCs deutlich falsch, pausieren Workflows ebenfalls, bis die Uhrzeit korrigiert ist.
Den Status sehen Sie unter Einstellungen → Lizenz, mit der Installations-ID (für den Support) und Jetzt prüfen.
Updates
Bei der täglichen Prüfung erfährt RUNOS auch, ob eine neue Version erschienen ist, und zeigt eine Benachrichtigung mit dem Download-Link. Zum Aktualisieren beenden Sie RUNOS über das Tray-Menü, ersetzen die alte .exe durch die neue (gleicher Name, gleicher Ort) und starten RUNOS wieder. Workflows, Konnektoren und Einstellungen liegen im Datenordner und bleiben erhalten.
Was sich in welcher Version geändert hat, steht unter Änderungen.
Die Oberfläche
Links im RUNOS-Fenster liegt die Aktivitätsleiste:
Ansicht
Inhalt
Workflows
Liste aller Workflows mit Zustand, Trigger und den letzten Läufen; Vorlagen für neue Workflows
Protokolle
Das Protokoll aller Workflows, filterbar nach Stufe und Workflow
Konnektoren
Gespeicherte Zugänge zu Diensten und APIs, siehe Konnektoren
Playground
Eine Aktion für sich ausprobieren und fertig in einen Workflow kopieren. Zur Auswahl: Print mit Druckerliste und Vorschau, SMTP mit Verbindungstest, Mailvorschau und Testmail, XRechnung mit Rechnungsformular und XML
Workflow-Liste: Jede Zeile zeigt Namen und Trigger, die Schaltfläche Starten / Stoppen und die letzten Läufe als Punkte: grün erfolgreich, gelb mit Warnung oder abgebrochen, rot fehlgeschlagen. Ein Klick öffnet den Workflow im Editor; über das Kontextmenü können Sie ihn starten, stoppen oder löschen. Die Reihenfolge ändern Sie per Drag-and-drop.
Workflow-Editor: Er öffnet sich in einem Tab, den Sie auch in ein eigenes Fenster ziehen können.
Element
Funktion
Name
Klick auf den Namen zum Umbenennen. Der Name im JSON wird mit angepasst.
Speichern (Strg+S)
Prüft das JSON und speichert. Danach gilt der Wert von Autostart.
Ausführen (F5)
Führt die Aktionen einmal aus, mit dem JSON im Editor, gespeichert oder nicht.
Lauschen
Schaltet den Trigger zum Testen ein, solange der Tab offen ist.
JSON-Editor
Nach {{ schlägt er die Variablen dieses Workflows vor, nach einem Punkt deren Felder.
Protokoll
Unter dem Editor, gefiltert auf diesen Workflow. Doppelklick zeigt einen Eintrag vollständig.
Protokoll: Jede Zeile hat Zeit, Stufe (Trace, Debug, Info, Erfolg, Warnung, Fehler, Kritisch), Quelle, Titel und Nachricht. Protokoll in Datei speichern exportiert die sichtbaren Einträge als Text oder CSV. Für die Fehlersuche lohnt sich der Filter Trace: Dann sehen Sie, wie jede Variable aufgelöst wurde und welche Parameter jede Aktion bekam.
Der erste Workflow
In diesem Beispiel überwacht RUNOS einen Ordner. Für jedes PDF, das dort landet, öffnet sich eine neue Mail im Mailprogramm, mit dem PDF als Anhang.
Öffnen Sie links Workflows, klicken Sie auf Neu, geben Sie einen Namen ein, zum Beispiel PDF per Mail, und bestätigen Sie mit Erstellen.
Fügen Sie im Editor dieses JSON ein und speichern Sie:
Klicken Sie auf Lauschen und legen Sie ein PDF in C:\RUNOS\Eingang. Nach spätestens 10 Sekunden öffnet sich die Mail.
Beenden Sie das Lauschen, setzen Sie "Autostart": true und speichern Sie. Ab jetzt läuft der Workflow dauerhaft, auch nach einem Neustart.
Unter der Workflow-Liste finden Sie Vorlagen. Ein Klick legt einen neuen Workflow mit dem Inhalt der Vorlage an; Kommentare (/* … */) im JSON erklären jede Einstellung.
Vorlage
Zeigt
ClassicOutlookMail
Mail mit Anhang über das klassische Outlook (MAPI)
Outlook365Mail
Mail über Microsoft 365 / Outlook.com mit einem Konnektor
WeatherEmailNotification
HTTP-Abfrage einer Wetter-API, IF-Entscheidung, Mail per SMTP
XRechnungInvoiceEmail
XRechnung aus Rechnungsdaten erzeugen, prüfen und mailen
XRechnungInvoiceReference
Alle Felder einer XRechnung mit Beschreibung, als Nachschlagewerk
Aufbau eines Workflows
Ein Workflow ist ein JSON-Objekt. Groß- und Kleinschreibung der Feldnamen spielt keine Rolle. Kommentare /* … */ und // … sind erlaubt.
Status.State ist Completed, Failed, Skipped oder Cancelled. Jedes Auslösen startet einen eigenen, unabhängigen Lauf.
Variablen und Platzhalter
In fast jedem Parameter sind Platzhalter erlaubt. RUNOS ersetzt sie unmittelbar bevor die Aktion läuft:
%…% für Datum, Uhrzeit, Ordner und Umgebungsvariablen. Sie werden zuerst ersetzt.
{{…}} für Daten aus dem Workflow: Ergebnisse von Trigger und Aktionen, InitialData, Konnektoren.
Daten mit {{…}}
Ein Platzhalter ist ein Pfad aus Namen, getrennt durch Punkte, z. B. {{RechnungErstellen.Response.Results.FilePath}}. Groß- und Kleinschreibung spielt keine Rolle.
Wurzel
Inhalt
Verfügbar
InitialData
InitialData des Workflows, ergänzt durch Parametersätze und Skriptblöcke
ein Feldname auf einer Liste greift automatisch auf das erste Element zu
.toString(), .toInt(), .toDouble(), .toBool()
Wert umwandeln
.toBase64()
Base64 des Textes; ist der Wert ein vorhandener Dateipfad, des Dateiinhalts
.length()
Länge eines Textes
Steht der Platzhalter allein im Parameter, wird der Wert mit seinem Typ übernommen (ein Objekt bleibt ein Objekt).
Steht er in einem Text, wird er als Text eingesetzt; Objekte erscheinen als kompaktes JSON. {{!pfad}} liefert immer Text.
Ein Platzhalter, der nicht aufgelöst werden kann, wird zu leerem Text, mit einer Warnung im Protokoll.
Datum, Ordner und System mit %…%
Platzhalter
Beispiel
Hinweis
%DATE% / %TIME%
2026-10-08 / 14-05-09
%yyyy% / %yy% / %MM% / %dd%
2026 / 26 / 10 / 08
%MM% = Monat, groß
%HH% / %hh% / %mm% / %ss% / %fff%
14 / 02 / 05 / 09 / 123
%mm% = Minute, klein
%userdesktop%, %userdocuments%, %userdownloads%
Desktop, Dokumente, Downloads
%userprofile%, %userappdata%, %local%
Benutzerordner, AppData\Roaming, AppData\Local
%programdata%, %programfiles%, %base%
C:\ProgramData, C:\Program Files, Ordner von RUNOS
%username%, %machinename%, %osversion%
Benutzer, PC-Name, Windows-Version
%NAME%
jede Windows-Umgebungsvariable, z. B. %TEMP%
Beispiel: Export_%yyyy%-%MM%-%dd%_%HH%-%mm%.csv → Export_2026-10-08_14-05.csv. Platzhalter dürfen direkt aneinanderstehen (%HH%%mm%%ss%). Ein unbekanntes %…% bleibt stehen.
Die Parameter Body und Signatur der Mail-Aktionen nehmen auch den Pfad einer Text- oder HTML-Datei; Platzhalter darin werden ebenfalls ersetzt. Platzhalter rechnen nicht; für Entscheidungen gibt es IF.
Fehlerbehandlung
Ein Lauf kann an einer Aktion, am Zeitlimit (TimeoutSeconds) oder schon am Trigger scheitern (Ordner nicht lesbar, fehlerhafter Skriptblock). Dann:
Die Fehlerrichtlinie der Aktion entscheidet: wiederholen, überspringen oder den Lauf beenden.
Wird der Lauf beendet, laufen die folgenden Aktionen nicht mehr.
Die Datei des Laufs wird nach <Pool>\Spooler\Failed\<ID>\ verschoben.
Die OnError-Aktionen laufen, mit dem Fehler in {{Error…}}.
Gibt es keine OnError-Aktionen oder schlägt eine fehl, zeigt RUNOS eine Benachrichtigung (und auf Wunsch ein Fehler-Pop-up).
Der Workflow läuft weiter. Nur CancelWorkflow und die Aktion StopWorkflow halten ihn an.
Standard. Der Lauf endet als fehlgeschlagen, der Workflow läuft weiter.
CancelWorkflow
Der Lauf endet und der Workflow wird gestoppt, auch über einen Neustart hinweg.
SkipAction
Aktion als übersprungen markieren, mit der nächsten weitermachen
Retry / RetryThenNotify
Bis zu MaxRetries Wiederholungen, danach wie CancelRun
RetryThenSkip
Bis zu MaxRetries Wiederholungen, danach wie SkipAction
MaxRetries (Standard 0), InitialDelaySeconds (Standard 1) und BackoffStrategy (exponential: 1×, 2×, 4× … oder linear) steuern die Wiederholungen. Die Richtlinie einer Aktion hat Vorrang vor der des Workflows.
OnWarningPolicy gilt für Aktionen, die mit Warnungen enden: LogOnly (Standard), Retry (mit RetryCount und RetryDelaySeconds) oder SkipAction.
OnError-Aktionen
OnError ist eine zweite Aktionsliste, die nur läuft, wenn ein Lauf fehlschlägt:
Sind alle OnError-Aktionen erfolgreich, gilt der Fehler als behandelt. OnError-Aktionen nutzen nur ihre eigene OnErrorPolicy; schlägt eine fehl, werden die restlichen übersprungen.
Testen
Ausführen (F5) startet die Aktionen genau einmal, als hätte der Trigger ausgelöst, ohne den Trigger einzuschalten. Bei einem File-Trigger gibt es dabei keine Datei; {{FilePath}} bleibt leer.
Parametersätze (Pfeil neben Ausführen) sind JSON-Objekte, die über InitialData gelegt werden. So probieren Sie einen Workflow mit verschiedenen Daten aus, ohne das JSON zu ändern. Sie gelten nur für Ausführen.
Lauschen schaltet den Trigger im Testmodus ein, solange der Tab offen ist. Läuft derselbe Workflow schon aus der Liste, fragt RUNOS, ob er gestoppt werden soll.
Playground in der Aktivitätsleiste probiert eine einzelne Aktion ohne Workflow aus, z. B. Print mit Vorschau und Testdruck, SMTP mit Testmail oder XRechnung.
Im Protokoll sehen Sie je Lauf TriggerFired, ActionCompleted je Aktion, Fehler und Warnungen sowie eine Summary.
Einstellungen
Die Einstellungen öffnen Sie über das Zahnrad unten in der Aktivitätsleiste. Den PDF-Drucker richten Sie in PDF24 ein, siehe PDFPrinter (PDF24).
Einstellung
Bedeutung
Anzeigesprache
Systemstandard, Deutsch, Englisch, Französisch, Italienisch oder Spanisch. Wird nach einem Neustart wirksam (Jetzt neu starten).
Mit Windows starten
RUNOS startet bei der Anmeldung minimiert im Infobereich. Beim ersten Start eingeschaltet.
Fehler-Pop-up anzeigen
Bei einem fehlgeschlagenen Lauf öffnet sich ein Fenster im Vordergrund.
Protokolleinträge aufbewahren für
Nur aktuelle Sitzung, 1 Tag oder mehrere Tage (Standard 7)
Skriptblöcke
Blockmarkierungen (Standard #RUNOS / #RUNOS) und Markierungen für mehrzeiligen Text (***), siehe Skriptblöcke
E-Rechnungs-Prüfung
Zustand des KoSIT-Validators (Läuft, Wird gestartet…, Gestoppt, Fehler) mit Starten / Neu starten
Lizenz
Zustand der Lizenz, Installations-ID mit ID kopieren, Jetzt prüfen
Nutzungsstatistik senden
Einmal am Tag Zahlen wie App-Starts, Abstürze, Zahl und Erfolg der Läufe, Aktionstypen mit Fehlern, Versionen. Niemals Workflow-Namen, Dateinamen, Pfade, Inhalte oder Meldungen.
Datenordner
Pfad
Inhalt
C:\ProgramData\RUNOS\Settings.json
Einstellungen
C:\ProgramData\RUNOS\DB\
Workflows, Konnektoren, Protokoll, Verlauf der Läufe, Parametersätze
C:\ProgramData\RUNOS\Repository\
Vorlagen und mitgelieferte Dateien
%LOCALAPPDATA%\RUNOS\
Arbeitsordner der XRechnung-Aktion, KoSIT-Validator und Prüfberichte
Zum Sichern beenden Sie RUNOS und kopieren C:\ProgramData\RUNOS\DB. Verschlüsselte Geheimnisse von Konnektoren kann nur derselbe Windows-Benutzer auf demselben PC lesen.
Häufige Fragen
Ist RUNOS kostenlos? Ja, RUNOS ist kostenlos.
Laufen Workflows, wenn niemand angemeldet ist? Nein. RUNOS läuft in der Sitzung eines angemeldeten Benutzers. Für einen PC, der unbeaufsichtigt arbeitet, bleibt ein Benutzer angemeldet (gesperrter Bildschirm ist in Ordnung).
Mein Workflow startet nicht, wenn eine Datei ankommt. Läuft der Workflow (die Liste zeigt Stoppen)? Passt die Datei zu Filter? Überwacht ein anderer Workflow denselben Ordner? Steht im Protokoll eine Lizenzmeldung?
Mein Workflow war plötzlich gestoppt. Durch "Strategy": "CancelWorkflow", eine StopWorkflow-Aktion oder durch Speichern mit "Autostart": false. Die Ursache steht im Protokoll.
Ein Platzhalter bleibt leer. Protokoll mit Filter Trace öffnen: Dort steht, wozu jeder Platzhalter aufgelöst wurde. Häufig: Tippfehler im Aktionsnamen, die Aktion lief noch nicht, oder der Wert steckt unter Response.Results.Body.
Funktioniert RUNOS mit dem neuen Outlook? Das neue Outlook lässt sich von keinem Programm steuern. Senden Sie über Microsoft 365; für das klassische Outlook gibt es MAPI.
Werden meine Rechnungen irgendwohin hochgeladen? Nein. Erzeugung und Prüfung der XRechnung laufen vollständig auf Ihrem PC.
Support
Öffnen Sie Hilfe in der Aktivitätsleiste und klicken Sie bei Problem melden auf Melden. Wählen Sie den Typ (Frage, Fehler, Funktionswunsch, Sonstiges), geben Sie E-Mail, Betreff und Beschreibung ein und lassen Sie bei Fehlern Aktuelles Protokoll anhängen eingeschaltet. Hilfreich sind die Version (Einstellungen → Info), die Installations-ID und das Workflow-JSON ohne Passwörter.
Veröffentlichte Versionen und Änderungen in Vorbereitung.
Die aktuelle Version steht unter Einstellungen → Info. Neue Versionen gibt es unter systemberg.de/runos/download; RUNOS weist Sie selbst darauf hin.
In Vorbereitung
Nächste Version (in Vorbereitung)
Neu: Aktion Print. Eine oder mehrere Dateien (PDF, Bilder, Text) auf dem Standarddrucker oder einem bestimmten Drucker ausgeben, mit Kopien, Duplex, Seitenbereich, Farbe, Ausrichtung, Papierformat, Fach, Auflösung und Rändern (oben, unten, links, rechts in mm). Ein fehlender Drucker, eine fehlende Datei oder ein Druckfehler lässt die Aktion und damit den Lauf fehlschlagen.
Neu: Playground in der Aktivitätsleiste. Eine Aktion für sich ausprobieren und fertig in einen Workflow kopieren. Für Print: alle Drucker mit Zustand, die Papierformate, Fächer und Auflösungen des gewählten Druckers, Vorschau jeder Seite, Testdruck und Aktion kopieren.
Neu: Aktion FTP. Dateien per SFTP, FTPS oder FTP hochladen, herunterladen, auflisten oder löschen; Anmeldung mit Passwort oder SSH-Schlüssel, Fingerprint legt den Server fest. Jede Übertragung wird über die Größe geprüft, Downloads kommen erst vollständig unter ihrem Namen an, Move löscht die Quelle erst danach. Schlägt eine Datei, die Verbindung oder die Anmeldung fehl, schlägt die Aktion fehl.
Playground für FTP: Verbinden mit Anzeige des Fingerprints, Ordner des Servers durchsuchen und als Quelle oder Ziel übernehmen, Prüfungen, echter Lauf mit einer Zeile pro Datei und Aktion kopieren.
Playground für SMTP: Anbieter-Vorlagen, Anmeldung über einen Basic-Konnektor, Verbindungstest (SMTP und IMAP), Vorschau der Mail mit den wirklich verwendeten Empfängern und Anhängen, Warnungen, Testmail und Aktion kopieren.
Die Spielwiese XRechnung ist jetzt Teil des Playgrounds (Aktion XRechnung) und hat keinen eigenen Eintrag mehr in der Aktivitätsleiste.
If: Schlägt eine Aktion in Do oder Else fehl, schlägt jetzt auch das If fehl, statt den Lauf fortzusetzen.
Loop: Eine fehlgeschlagene Aktion in Do zählt als Fehler des Durchlaufs und wird für BreakOnErrors gezählt.
HttpRequest: Gelingt eine Wiederholung, ist die Aktion erfolgreich (vorher fehlgeschlagen). Parallel mit Urls fragt jetzt wirklich jede Adresse ab.
Zeitplan: RepeatCount = n ergibt genau n Läufe (vorher n − 1).
Platzhalter: %HH%%mm%%ss% direkt hintereinander funktioniert; NewName mit %filename% wird nicht mehr verdoppelt.
Vorlage WeatherEmailNotification korrigiert (Temperatur wurde nicht gelesen, Mailtext war leer).
Einstellungen → Dokumentation führt zu dieser Dokumentation. Sie ist neu gegliedert in Trigger, Aktionen, Operationen, Konnektoren und Einstellungen; jede Aktion hat Übersicht, Struktur und Beispiele. Neu ist die Anleitung zum Einrichten von PDF24 als PDF-Drucker.
Die Frage nach Nutzungsstatistiken beim ersten Start ist jetzt kurz und einfach.
Veröffentlicht
3.46 — 7. Oktober 2026
Neu: Aktion Outlook365. Mails über ein Microsoft-365- oder Outlook.com-Postfach senden, als Entwurf speichern oder in Outlook im Web öffnen. Funktioniert ohne Mailprogramm und mit dem neuen Outlook. Große Anhänge bis 150 MB.
Aktion MAPI überarbeitet. Wahl des Mailprogramms (Client: Standardprogramm, klassisches Outlook oder z. B. Thunderbird), Mode Anzeigen / Senden / Entwurf, Absenderkonto, Antwortadresse, Wichtigkeit, Lese- und Übermittlungsbestätigung, Outlook-Signatur, Anhänge per Muster (*.pdf) und MissingAttachments. Ältere Workflows laufen unverändert weiter.
Neue Vorlagen ClassicOutlookMail und Outlook365Mail, neue Konnektor-Vorlage Microsoft Outlook Mail.
Veröffentlicht
3.45 — 6. Oktober 2026
Skriptblöcke: Listen mit Zeilennummern (BG25.2.BT126=…) und automatische Zeilen für die wiederholbaren Gruppen der XRechnung, sodass ein ERP Rechnungspositionen einfach hintereinander drucken kann.
Beim ersten Start fragt RUNOS, ob es anonyme Nutzungsstatistiken senden darf. Änderbar unter Einstellungen → Nutzungsstatistik senden.
Veröffentlicht
3.42 — 3. Oktober 2026
Jede Datei des Datei-Auslösers bekommt im Spooler einen eigenen Jobordner. Gleichnamige Dateien kommen sich nicht mehr in die Quere; fehlgeschlagene Dateien liegen in Spooler\Failed\<ID>\.
RUNOS läuft nur noch einmal pro Windows-Sitzung; ein neuer Start übernimmt von der älteren Instanz.
Ein Ordner kann nur noch von einem laufenden Workflow überwacht werden.
Veröffentlicht
3.41 — 30. September 2026
Skriptblöcke verwenden die Markierung #RUNOS.
Bessere Fehlermeldungen bei Dateien, die nicht gelesen werden können.
Veröffentlicht
3.40 — 29. September 2026
Neu: Aktion StopWorkflow und Aktionsliste OnError für die eigene Fehlerbehandlung.
Kurzform für Skriptblöcke (Pfad=Wert), eigene Markierungen in den Einstellungen und je Datei-Auslöser, mehrzeilige Werte und Textmarkierungen ***.
Veröffentlicht
3.39 — 28. September 2026
XRechnung: Parameter SaveToFolder. Ohne ihn liegt die XML nur so lange in einem Arbeitsordner, wie die folgenden Aktionen sie brauchen.
Parameter aus Skriptblöcken werden tief zusammengeführt: Ein Block kann einzelne Felder einer Rechnung ändern, ohne die übrigen zu verlieren.
Veröffentlicht
3.37 — 25. September 2026
Offizieller KoSIT-Validator prüft jede XRechnung; Java ist enthalten. Zustand unter Einstellungen → E-Rechnungs-Prüfung.
Die Workflow-Liste zeigt die letzten Läufe als farbige Punkte.
Benachrichtigung bei fehlgeschlagenen Läufen und gestoppten Workflows; Fehler des Auslösers zählen als fehlgeschlagener Lauf.
Veröffentlicht
3.36 — 23. September 2026
Vorschläge im Workflow-Editor: Nach {{ bietet der Editor die Variablen des Workflows an.
Einstellung Fehler-Pop-up anzeigen.
Veröffentlicht
3.35 — 22. September 2026
Skriptblöcke können Aktionen mitbringen, die der Workflow nicht hat.
Umgebrochene Zeilen in Skriptblöcken aus PDFs werden repariert; fehlende Markierungen werden erkannt und gemeldet.
XRechnung 3.0.2 mit eingebauter Regelprüfung, Spielwiese XRechnung und Workflow-Editor mit Tabs.
Der File-Trigger überwacht einen Ordner, den Pool. Jede Datei, die dort ankommt und zum Filter passt, startet einen Lauf. Typische Quellen sind ein ERP, das Belege als PDF ablegt, ein Scanner oder ein PDF-Drucker wie PDF24.
Bevor der Lauf startet, liest der Trigger den Text der Datei. Enthält er Skriptblöcke (#RUNOS … #RUNOS), übernimmt RUNOS daraus Werte für diesen Lauf, zum Beispiel Rechnungsnummer und Empfänger aus dem ERP-Druck.
Ablauf je Datei:
Bei jeder Prüfung (CronExpression) listet der Trigger die passenden Dateien im Pool auf.
Er wartet kurz, bis eine Datei vollständig geschrieben und nicht leer ist. Ist sie nach etwa zwei Sekunden noch leer oder gesperrt, kommt sie bei der nächsten Prüfung dran.
Die Datei wird in einen eigenen Jobordner verschoben: <Pool>\Spooler\<ID>\<Dateiname>. Damit gehört sie diesem Lauf, und keine Datei wird zweimal verarbeitet.
Falls NewName gesetzt ist, wird sie umbenannt.
Bei GetFileContent liest RUNOS den Text und wertet die Skriptblöcke aus.
Der Lauf startet.
Ergebnis des Laufs
Was mit der Datei passiert
erfolgreich, DeleteAfter: false
bleibt im Jobordner im Spooler (Archiv)
erfolgreich, DeleteAfter: true
wird gelöscht, samt Jobordner
fehlgeschlagen
wird nach <Pool>\Spooler\Failed\<ID>\ verschoben. Nach dem Beheben der Ursache legen Sie sie wieder in den Pool.
Hat eine Aktion die Datei schon woanders hin verschoben, bleibt sie dort. Ein Pool-Ordner kann nur von einem laufenden Workflow überwacht werden; ein zweiter Workflow mit demselben Ordner startet nicht, und RUNOS nennt den Workflow, der ihn belegt.
Der überwachte Ordner. Wird angelegt, falls er fehlt. Platzhalter wie %userdocuments% sind erlaubt.
Filter
*.*
Dateimuster, z. B. *.pdf oder RE_*.txt
CronExpression
0/15 * * * * ?
Wie oft der Ordner geprüft wird, siehe Cron-Ausdrücke. Standard: alle 15 Sekunden.
ProcessMode
Single
Single: ein Lauf je Datei. Multi: ein Lauf für alle Dateien einer Prüfung.
ConcurrentJobs
5
Im Modus Single: wie viele Dateien gleichzeitig verarbeitet werden
DeleteAfter
false
true: Die Datei wird nach einem erfolgreichen Lauf gelöscht.
NewName
–
Neuer Dateiname im Spooler, z. B. Rechnung_%yyyy%-%MM%-%dd%. Ohne Endung bleibt die alte Endung.
RepeatCount
0
Nach so vielen Prüfungen stoppt der Trigger. 0 = unbegrenzt.
GetFileContent
true
Text der Datei lesen und als {{FileContent}} bereitstellen. Nötig für Skriptblöcke.
RemoveScript
false
Skriptblöcke nach dem Lesen aus der Datei entfernen. Nur bei TXT, JSON und XML.
ScriptStart, ScriptEnd
aus den Einstellungen
Eigene Markierungen für Skriptblöcke dieses Triggers
Single ist fast immer die richtige Wahl: Jede Datei hat ihren eigenen Lauf mit eigenen Daten. Bei Multi enthält {{Trigger.Response.Results}} alle Dateien einer Prüfung, und {{FilePath}} zeigt auf die zuletzt gelesene.
Gelesener Text
Dateityp
Wie
.txt, .json, .xml
als Text
.pdf
Text aller Seiten wird extrahiert. Gescannte PDFs ohne Textebene liefern keinen Text.
andere
kein Text; der Workflow läuft trotzdem, ohne FileContent und Skriptblöcke
Ein Skriptblock ist ein kurzer Text in der Datei, der diesen einen Lauf ändert: Er setzt Werte in InitialData, ändert Parameter von Aktionen oder fügt Aktionen hinzu. Das gespeicherte Workflow-JSON bleibt unverändert. So kann ein ERP, das nur drucken oder Textdateien schreiben kann, RUNOS sagen, an wen eine Rechnung geht und welche Daten in die XRechnung gehören.
Ein Block steht zwischen Start- und Endmarkierung, standardmäßig beide #RUNOS (änderbar unter Einstellungen → Skriptblöcke oder mit ScriptStart / ScriptEnd). Beginnt der Inhalt mit { und endet mit }, ist er JSON; beginnt er mit Pfad=, ist er die Kurzform; alles andere wird ignoriert.
Kurzform
Jeder Block enthält genau eine Anweisung Pfad=Wert. Der erste Teil des Pfads entscheidet das Ziel:
Pfad beginnt mit
Ziel
Beispiel
InitialData.
ein Wert in InitialData dieses Laufs
InitialData.Invoice.BT1=4711
Name einer Aktion
ein Parameter dieser Aktion (.Parameters darf fehlen)
SendMail.To=a@b.de
newAction.
eine neue Aktion, siehe unten
newAction.Notify=SMTP
alles andere
ein globaler Wert, lesbar als {{Name}}
Kunde=ACME → {{Kunde}}
Der Wert reicht vom ersten = bis zur Endmarkierung, auch über mehrere Zeilen (z. B. ein Mailtext).
Werte sind Text (Menge=5 → "5"). Als JSON geschriebene Werte werden als JSON gelesen: Tags=["a","b"] ist eine Liste.
"…" behält führende und folgende Leerzeichen. Text zwischen den Textmarkierungen (Standard ***) wird genau so übernommen.
{{…}}-Platzhalter bleiben Text und werden später beim Ausführen der Aktion aufgelöst.
Parameter für Aktionen, {"SendMail":{"To":"a@b.de"}}, oder Aktionsblöcke {"Name":…, "Type":…, "Parameters":{…}}
alles andere
globale Werte
Schreibt ein Programm einen langen JSON-Block in ein PDF und bricht dabei die Zeile mitten in einem Wert um, fügt RUNOS den Wert wieder zusammen.
Zusammenführen, Listen und Zeilen
Ein vorhandener Schlüssel bekommt den neuen Wert, ein neuer wird hinzugefügt, alles andere bleibt. Objekte werden Schlüssel für Schlüssel zusammengeführt, Listen werden komplett ersetzt.
Mehrere Blöcke werden in ihrer Reihenfolge angewendet; der spätere gewinnt.
Ein Zahlensegment im Pfad ist eine Zeile einer Liste, gezählt ab 1: InitialData.Positionen.2.Artikel=Mutter. Es darf keine Nummer fehlen.
Für die wiederholbaren Gruppen der XRechnung (BG-25 Positionen, BG-23, BG-17 …) geht es ohne Nummern: Ein Feld, das die aktuelle Zeile schon hat, beginnt die nächste. Siehe XRechnung-Beispiel.
Ein Block, der nicht gelesen werden kann (ungültiges JSON, Pfad=Wert nicht erkennbar, fehlende Zeilennummer, unbekannter Aktionstyp …), lehnt die Datei ab: Sie landet im Failed-Ordner, und Sie erhalten eine Meldung mit der Nummer des Blocks und dem Grund. Dasselbe gilt für eine Datei, die erkennbar Skriptdaten enthält, aber keine Markierungen. Was RUNOS gelesen hat, steht im Protokoll unter ScriptShorthandParsed bzw. ScriptJsonParsed.
Beispiel
Jedes PDF, das im Ordner C:\RUNOS\Eingang landet, wird nach einem erfolgreichen Lauf gelöscht. Das Programm, das die PDFs erzeugt, schreibt den Empfänger als Skriptblock hinein:
Workflows zu festen Zeiten oder in Intervallen starten.
Übersicht
Der Time-Trigger startet einen Lauf zu festen Zeiten, zum Beispiel jeden Werktag um 7 Uhr oder alle fünf Minuten. Der Lauf bekommt vom Trigger nur den Zeitpunkt ({{Trigger.Response.Results.TriggeredAt}}); alle weiteren Daten kommen aus InitialData oder von den Aktionen, zum Beispiel einer HTTP-Abfrage.
Die Zeiten gelten in der Zeitzone des PCs.
Ein Zeitplan feuert nur, solange RUNOS läuft. Termine, in denen RUNOS beendet war, werden nicht nachgeholt.
Dauert ein Lauf länger als der Abstand bis zum nächsten Termin, startet der nächste trotzdem pünktlich. Läufe können sich überschneiden.
kein bestimmter Wert; genau eines der Felder Tag-im-Monat und Wochentag muss ? sein
? * MON
a/b
ab a alle b
0/15 in Sekunden = alle 15 s
a-b
Bereich
MON-FRI, 8-17
a,b
Liste
MON,WED,FRI
L
letzter Tag des Monats
L im Feld Tag-im-Monat
Wochentage: SUN MON TUE WED THU FRI SAT (oder 1–7, Sonntag = 1). Monate: JAN–DEC oder 1–12. Dieselben Ausdrücke verwendet der File-Trigger, um festzulegen, wie oft er seinen Ordner prüft.
Beispiel
Ausdruck
Wann
0/30 * * * * ?
alle 30 Sekunden
0 0/5 * * * ?
alle 5 Minuten
0 0 * * * ?
zu jeder vollen Stunde
0 0 7 * * ?
täglich um 7:00
0 0 7 ? * MON-FRI
werktags um 7:00
0 30 17 ? * FRI
freitags um 17:30
0 0 8-17 ? * MON-FRI
werktags stündlich von 8 bis 17 Uhr
0 0 6 1 * ?
am 1. jedes Monats um 6:00
0 0 22 L * ?
am letzten Tag jedes Monats um 22:00
Werktags um 7:00 eine Liste offener Aufträge abrufen und per Mail melden, wenn es welche gibt:
Ein Workflow mit manuellem Trigger läuft, wenn Sie ihn starten: im Editor mit Ausführen (F5) oder in der Workflow-Liste mit Starten. Er eignet sich für Aufgaben, die jemand bei Bedarf anstößt, und zum Ausprobieren neuer Aktionen. Alle Vorlagen beginnen deshalb mit einem manuellen Trigger.
Starten in der Workflow-Liste löst einen Lauf mit der InitialData des Workflows aus. Der Workflow wird danach weiter als aktiv angezeigt, bis Sie ihn stoppen.
Mit "Autostart": true läuft ein manueller Workflow bei jedem Start von RUNOS einmal.
Ausführen im Editor kann einen Parametersatz verwenden. So starten Sie denselben Workflow mit unterschiedlichen Daten.
Das Ergebnis des Triggers enthält nur den Zeitpunkt ({{Trigger.Response.Results.TriggeredAt}}).
true: löst nur beim ersten Starten aus. Ein erneutes Starten über die Liste löst erst wieder aus, nachdem der Workflow gespeichert oder RUNOS neu gestartet wurde. false: Jedes Starten löst einen Lauf aus (stoppen und wieder starten).
Beispiel
Ein Rundschreiben an alle Kunden aus einer CSV-Datei, das jemand bei Bedarf startet:
Mit einem Webhook soll ein anderes Programm einen Workflow über einen HTTP-Aufruf starten und dabei Daten mitgeben können.
Bis dahin starten Sie Workflows mit einem File-Trigger: Das andere Programm legt eine Datei (zum Beispiel JSON mit einem Skriptblock) in den überwachten Ordner.
XRechnung und ZUGFeRD erzeugen, prüfen und weitergeben.
Übersicht
Die Aktion XRechnung erzeugt aus Rechnungsdaten eine E-Rechnung im Format XRechnung 3.0.2 (UN/CEFACT CII), prüft sie mit dem offiziellen KoSIT-Validator und bettet sie auf Wunsch als ZUGFeRD / Factur-X in ein PDF/A-3 ein. Alles läuft lokal auf Ihrem PC; die Rechnung wird an niemanden gesendet.
TEXT
Rechnungsdaten (JSON) ──▶ Prüfung der Daten ──▶ XML (CII) ──▶ KoSIT-Validator ──▶ ZUGFeRD-PDF (optional)
│
nur geprüfte Rechnungen gehen an die nächste Aktion (Mail, Ablage …)
Wie die Daten aussehen und alle Parameter: Struktur
Vom ERP-Druck zur versendeten XRechnung, Schritt für Schritt: Beispiel
Woher die Rechnungsdaten kommen
Die Rechnung ist ein JSON-Objekt mit den Kennungen der EN 16931 (BT1 Rechnungsnummer, BG4 Verkäufer, BG25 Positionen …). Meist steht der feste Teil (Verkäufer, Bankverbindung) einmal im Workflow, und der veränderliche Teil (Nummer, Käufer, Positionen) kommt per Skriptblock aus der gedruckten Rechnung, aus einer JSON-Datei oder von einer HTTP-Abfrage.
Sie müssen Ihr ERP nicht umbauen: Es genügt, dass die gedruckte Rechnung die Rechnungsdaten als Skriptblöcke enthält. Wie das ERP in einen Ordner druckt, steht unter PDFPrinter (PDF24).
Prüfung
Bevor eine XRechnung RUNOS verlässt, wird sie zweimal geprüft:
Prüfung der Rechnungsdaten (ValidateRequiredFields, Standard an) vor dem Schreiben der XML, nach der Spezifikation XRechnung 3.0.2: Pflichtfelder und -gruppen, Formate (Datum, Zahlen, höchstens zwei Nachkommastellen), Codelisten (Länder, Währungen, Einheiten, Steuerkategorien …), CustomizationID (BR-DE-21), Dokumentregeln (USt-IdNr., IBAN, Zahlungsart, Kontakt des Verkäufers), Zu- und Abschläge, Positionen (Menge × Preis), Umsatzsteuer-Aufschlüsselung und alle Summen (BR-CO-10 bis BR-CO-16). Fehler nennen Feld und Regel, z. B. BT-10 Buyer reference (BT10) is required.
KoSIT-Validator (ValidateWithKosit, Standard an): dieselbe Prüfung, die die Rechnungseingangsplattformen von Bund und Ländern durchführen (XML-Schema, Schematron der EN 16931 und der XRechnung).
Der Validator samt Java-Laufzeit ist in RUNOS enthalten und wird beim ersten Mal nach %LOCALAPPDATA%\RUNOS\KositValidator\ entpackt. Er startet mit RUNOS im Hintergrund; das Laden der Regeln dauert etwa 15–20 Sekunden, danach dauert eine Prüfung deutlich unter einer Sekunde. Den Zustand sehen Sie unter Einstellungen → E-Rechnungs-Prüfung.
XRechnung oder ZUGFeRD?
Format
Was es ist
Für wen
XRechnung (XML)
reine Daten-Datei nach XRechnung 3.0.2
öffentliche Auftraggeber (mit Leitweg-ID in BT10) und alle, die strukturierte Rechnungen verlangen
ZUGFeRD / Factur-X (PDF)
lesbares PDF mit eingebetteter XML
Geschäftskunden, die ein PDF ansehen und die Daten trotzdem maschinell verarbeiten möchten
RUNOS erzeugt ZUGFeRD in den Profilen XRECHNUNG und EN 16931. Beide enthalten die vollständige Rechnung. MINIMUM, BASIC WL, BASIC und EXTENDED bietet RUNOS bewusst nicht an.
Die Spielwiese XRechnung
Unter Playground in der Aktivitätsleiste (Aktion XRechnung) liegt eine Spielwiese für E-Rechnungen: Sie füllen ein Formular aus und sehen sofort das Rechnungs-JSON und die erzeugte XML.
Element
Funktion
Formular
alle Felder der XRechnung 3.0.2 nach Gruppen. Pflichtfelder mit *, die Beschreibung aus dem Standard beim Überfahren der Beschriftung. Wiederholbare Gruppen mit … hinzufügen.
Beispiel laden / Leeren
gültige Beispielrechnung laden / alles leeren
Summen berechnen
Positionsbeträge (BT-131), Umsatzsteuer-Aufschlüsselung (BG-23) und Summen (BG-22)
JSON
das Rechnungs-JSON zum Kopieren in einen Workflow; JSON übernehmen lädt ein eingefügtes JSON ins Formular
XML / Prüfung
die erzeugte XRechnung und dieselbe Datenprüfung wie in der Aktion
Speichern
speichert die XML, sobald alle Pflichtfelder gefüllt sind
Nutzen Sie sie, um mit dem ERP-Anbieter die nötigen Felder festzulegen, den festen Teil der Rechnung vorzubereiten oder eine abgelehnte Rechnung Feld für Feld zu korrigieren. Den KoSIT-Validator führt erst die Aktion aus.
Die Aktion nimmt die erste vorhandene dieser Quellen. In allen Fällen werden {{…}}-Platzhalter in der Rechnung ersetzt.
Reihenfolge
Parameter
Quelle
1
Invoice
die Rechnung direkt als Objekt, oft ergänzt per Skriptblock aus der Datei
2
InvoiceJsonFile
Pfad einer JSON-Datei
3
InvoiceJson
die Rechnung als JSON-Text
4
ContextKey
ein Schlüssel unter InitialData (Standard Invoice), oder ein Pfad mit Punkten wie Abfrage.Response.Results.Body
Eingabe und Prüfung
Parameter
Standard
Bedeutung
AutoCalculateTotals
false
Positionsbeträge (BT-131), Umsatzsteuer-Aufschlüsselung (BG-23) und Summen (BG-22) aus den Positionen berechnen
ValidateRequiredFields
true
Rechnungsdaten vor dem Erzeugen prüfen; Fehler lassen die Aktion fehlschlagen
ValidateWithKosit
true
Die fertige XML mit dem KoSIT-Validator prüfen
FailOnKositReject
true
Eine abgelehnte Rechnung lässt die Aktion fehlschlagen. false: nur Warnung.
KeepKositReport
false
Prüfbericht (XML + HTML) aufbewahren
KositReportFolder
%LOCALAPPDATA%\RUNOS\KositValidator\Reports
Ordner für aufbewahrte Prüfberichte
Ausgabe
Parameter
Standard
Bedeutung
SaveToFolder
false
false: Die XML liegt nur in einem temporären Arbeitsordner (nach einem Tag gelöscht), lange genug für die folgenden Aktionen. true: Sie wird in OutputFolder gespeichert.
OutputFolder
.
Zielordner bei SaveToFolder: true. Eine gleichnamige Datei wird ersetzt.
FileNamePattern
XRechnung_{BT1}_{now:yyyyMMddHHmmss}.xml
{BT1} = Rechnungsnummer, {BT2} = Rechnungsdatum (yyyyMMdd), {now:Format} = aktuelle Zeit; {{…}} ist ebenfalls erlaubt
PrettyPrint
true
XML mit Einrückung schreiben
AttachFiles
–
Liste von Dateipfaden, die als rechnungsbegründende Unterlagen (BG-24) eingebettet werden
ZUGFeRD
Parameter
Standard
Bedeutung
EnableZugferd
false
Zusätzlich ein ZUGFeRD-PDF erzeugen
PdfSourcePath
–
Das vorhandene Rechnungs-PDF, in das die XML eingebettet wird, z. B. {{FilePath}}. Schriften müssen eingebettet sein.
ZugferdConformanceLevel
aus CustomizationID
XRECHNUNG oder EN 16931
Das Ergebnis heißt <Name des PDFs>_ZUGFeRD.pdf (PDF/A-3B, XML als factur-x.xml eingebettet) und liegt neben der XML. Gelingt das Einbetten nicht, gibt es eine Warnung; die XML ist trotzdem gültig.
XRechnung 3.0. Erlaubt sind außerdem die Extension-Kennung und urn:cen.eu:en16931:2017 (EN 16931).
ProfileID
urn:fdc:peppol.eu:2017:poacc:billing:01:1.0
Geschäftsprozess (BT-23)
Das Rechnungs-JSON
Die Schlüssel sind die Kennungen der EN 16931: BT (Business Term) für ein Feld, BG (Business Group) für eine Gruppe.
Kennungen ohne Bindestrich: BT-1 → "BT1", BG-4 → "BG4".
Zusatzangaben mit Suffix: "BT34-1": "EM" ist das Schema der elektronischen Adresse des Verkäufers (EM = E-Mail), ebenso BT49-1, BT125-1/BT125-2, BT157-1.
Wiederholbare Gruppen (Positionen BG25, Umsatzsteuer BG23, Bankverbindungen BG17 …) sind Listen; ein einzelnes Objekt wird ebenfalls akzeptiert.
Datum als JJJJ-MM-TT (auch JJJJMMTT und TT.MM.JJJJ). Beträge mit Punkt: "119.00", ohne Tausendertrennzeichen.
BG2 (Prozesssteuerung) schreibt die Aktion selbst aus CustomizationID und ProfileID.
Nettopreis BT146 / Steuer BT151 Kategorie (S), BT152 Satz / Bezeichnung BT153
Was „Pflicht“ ist, richtet sich nach der XRechnung (CIUS), nicht nur nach der EN 16931; so sind etwa BG6, BT10 und BG16 Pflicht. Alle Felder mit Beschreibung und [REQUIRED] / [optional] enthält die Workflow-Vorlage XRechnungInvoiceReference, und die Spielwiese XRechnung zeigt sie als Formular.
Die XML steht in {{XR.Response.Results.FilePath}}, das ZUGFeRD-PDF in {{XR.Response.Results.Zugferd.ZugferdPath}}, der Prüfbericht (mit KeepKositReport) in {{XR.Response.Results.Kosit.ReportHtml}}.
Wann die Aktion fehlschlägt
Pflichtfelder fehlen oder Geschäftsregeln sind verletzt. Die Meldung nennt alle Felder und Regeln auf einmal.
Der KoSIT-Validator lehnt die Rechnung ab (mit FailOnKositReject) oder konnte gar nicht laufen.
Keine Rechnungsdaten gefunden, oder die XML-Datei ist in einem anderen Programm geöffnet.
Beispiele
Viele ERP- und Warenwirtschaftsprogramme können Rechnungen drucken, aber keine XRechnung erzeugen. Mit RUNOS genügt es, dass die gedruckte Rechnung ein paar zusätzliche Zeilen enthält. RUNOS liest sie, erzeugt daraus die XRechnung, prüft sie mit dem KoSIT-Validator und verschickt sie.
TEXT
ERP druckt Rechnung ──▶ PDF24 speichert PDF im Pool ──▶ RUNOS File-Trigger
│
Skriptblöcke im PDF-Text ◀──────┘
│
XRechnung erzeugen + KoSIT-Prüfung + ZUGFeRD-PDF
│
Mail an den Kunden (SMTP / MAPI / Microsoft 365)
1. Den Druck in einen Ordner leiten
Richten Sie in PDF24 einen Drucker ein, der jedes Dokument automatisch in den Ordner C:\RUNOS\Rechnungen speichert, und wählen Sie ihn im ERP für Rechnungen. Wie das geht, steht unter PDFPrinter (PDF24).
Das PDF muss echten Text enthalten (keine eingescannte Grafik), damit RUNOS die Skriptblöcke lesen kann.
2. Die Rechnungsdaten in den Druck schreiben
Ergänzen Sie das Rechnungsformular Ihres ERP um Zeilen in der Kurzform der Skriptblöcke. Jede Zeile setzt ein Feld der Rechnung. XR ist der Name der XRechnung-Aktion im Workflow (Schritt 3):
Jede Position beginnt mit BT126 (Positionsnummer). Ein erneutes BT126 beginnt die nächste Position. Schreiben Sie jede Position vollständig, bevor die nächste beginnt.
Je Position: Menge (BT129), Einheit (BT130), Nettopreis (BG29.BT146), Steuerkategorie und -satz (BG30.BT151, BG30.BT152) und Bezeichnung (BG31.BT153).
Beträge mit Punkt als Dezimaltrennzeichen und ohne Tausendertrennzeichen.
Die Zeilen dürfen klein gedruckt werden (z. B. 4-Punkt-Schrift am Seitenende, auch weiß auf weiß), müssen aber im Text des PDFs stehen. Lassen Sie keine Zeile umbrechen.
Die letzten beiden Zeilen setzen Empfänger und Betreff der Mail-Aktion SendMail.
Welche Felder es gibt, steht unter Struktur. In der Spielwiese XRechnung können Sie eine Rechnung vorher ausprobieren.
3. Der Workflow
Die festen Daten (Ihr Unternehmen, Bankverbindung, Zahlungsbedingungen) stehen einmal im Parameter Invoice der XRechnung-Aktion. Die Werte aus dem PDF werden darübergelegt.
AutoCalculateTotals berechnet Positionsbeträge, Umsatzsteuer-Aufschlüsselung und Summen, sodass das ERP sie nicht drucken muss. Die Zugangsdaten zum Mailserver liegen in einem Basic-Konnektor namens Mailserver.
4. Testen
Öffnen Sie den Workflow im Editor und klicken Sie auf Lauschen.
Drucken Sie eine Rechnung aus dem ERP auf den PDF24-Drucker.
Im Protokoll sehen Sie die gefundene Datei, die gelesenen Skriptblöcke (ScriptShorthandParsed), das Ergebnis der Prüfung und den Versand.
Schlägt die Prüfung fehl, nennt die Meldung jedes fehlende oder falsche Feld mit der Regel aus dem Standard. Das PDF liegt dann in C:\RUNOS\Rechnungen\Spooler\Failed\. Korrigieren Sie Formular oder Daten und drucken Sie erneut.
Varianten
Nur XML statt ZUGFeRD-PDF:EnableZugferd weglassen und {{XR.Response.Results.FilePath}} anhängen. Öffentliche Auftraggeber verlangen meist die reine XRechnung mit Leitweg-ID in BT10.
Ablage statt Mail:SaveToFolder: true mit OutputFolder legt XML und ZUGFeRD-PDF dauerhaft ab; die Mail-Aktion entfällt.
Daten als JSON-Block: Statt vieler Kurzform-Zeilen kann das ERP einen JSON-Block drucken: #RUNOS {"Actions":{"XR":{"Invoice":{"BT1":"RE-2026-0001", …}}}} #RUNOS.
Daten aus einer Datei: Schreibt das ERP die Rechnung als JSON-Datei, nimmt der File-Trigger *.json und die Aktion "InvoiceJsonFile": "{{FilePath}}".
Vorlage: Die Workflow-Vorlage XRechnungInvoiceEmail enthält einen fertigen Workflow zum Erzeugen, Prüfen und Mailen.
Die Aktion SMTP sendet eine Mail direkt über einen Mailserver. Sie braucht kein Mailprogramm und eignet sich deshalb für PCs, die unbeaufsichtigt laufen. Mit SaveInSent legt RUNOS zusätzlich per IMAP eine Kopie im Gesendet-Ordner ab.
Die Mail wird als HTML gesendet. Enthält der Text bereits HTML-Tags, wird er unverändert übernommen; reiner Text behält seine Zeilenumbrüche.
Steht in Body oder Signatur der Pfad einer .txt- oder .html-Datei, nimmt RUNOS deren Inhalt, mit ersetzten Platzhaltern.
Ungültige Einträge in To, Cc und Bcc werden übergangen. Anhänge, die es nicht gibt, werden ohne Meldung weggelassen; soll ein fehlender Anhang ein Fehler sein, nehmen Sie MAPI mit MissingAttachments: Error.
Server, Anmeldung und Mail probieren Sie am einfachsten im Playground aus.
Schlägt das Senden fehl, endet die Aktion mit Failed, und die Meldung des Servers steht in Message und im Protokoll.
Playground
Unter Playground in der Aktivitätsleiste (Aktion SMTP) stellen Sie die Aktion zusammen und probieren sie aus, ohne JSON zu schreiben:
Mailserver: Unter Anbieter füllen Microsoft 365 / Outlook.com, Gmail, IONOS, Strato, GMX, WEB.DE und Telekom Server und Port aus; sonst tragen Sie den Server selbst ein. Unter Anmeldung wählen Sie einen Basic-Konnektor, dann stehen in der Aktion {{connector.Name.Username}} und {{connector.Name.Password}} statt des Passworts. Ein Passwort, das Sie stattdessen eintippen, steht im Klartext in der Aktion; der Playground weist darauf hin.
Verbindung testen verbindet sich mit derselben Verschlüsselung wie die Aktion und meldet sich an, ohne etwas zu senden. Ist Kopie im Gesendet-Ordner ablegen angehakt, wird auch der IMAP-Server geprüft (mit denselben Zugangsdaten).
Nachricht: Absender, Empfänger, Betreff, Text, Signatur und Anhänge (Durchsuchen…, auch mehrere).
Vorschau: Rechts sehen Sie die Mail so, wie die Aktion sie baut: die Empfänger, die wirklich verwendet werden, Betreff, Anhänge mit Größe und den Text als HTML. Darunter stehen Fehler und Warnungen, z. B. übergangene Empfänger, fehlende Anhänge (die die Aktion ohne Meldung weglässt) oder Anhänge über 20 MB. Platzhalter wie {{FilePath}} haben erst im Workflow-Lauf einen Wert und sind hier leer; %DATE% und Konnektoren werden schon ersetzt.
Testmail senden führt die Aktion nach einer Rückfrage wirklich aus.
Aktion kopieren legt das fertige Aktions-JSON in die Zwischenablage. Fügen Sie es unter Actions eines Workflows ein. Ist In der kopierten Aktion die Datei des Triggers ({{FilePath}}) statt dieser Dateien anhängen angehakt, steht bei Attachments{{FilePath}}, passend für Workflows mit Datei-Trigger.
Beispiel
Jeden Morgen um 6 Uhr die Exportdatei des Tages an die Buchhaltung senden, mit Kopie im Gesendet-Ordner und drei Wiederholungen bei Netzwerkproblemen:
E-Mails im lokalen Mailprogramm öffnen oder versenden.
Übersicht
Die Aktion MAPI übergibt eine Mail an ein Mailprogramm, das auf diesem PC installiert ist. Die Mail geht über das Konto, das dort eingerichtet ist, und landet in dessen Gesendet-Ordner. Sie können sie vor dem Senden anzeigen lassen, direkt senden oder als Entwurf speichern.
Client
Bedeutung
Default
das Standard-Mailprogramm von Windows (Standard)
Outlook
das klassische Outlook, mit allen Optionen dieser Seite
ein Name
ein bestimmtes Mailprogramm, z. B. Thunderbird oder eM Client, so wie es in Windows registriert ist
Mode
Wirkung
Display
Die Mail öffnet sich im Mailprogramm. Sie prüfen sie und senden selbst. (Standard)
Send
Die Mail wird ohne Rückfrage gesendet. Braucht mindestens einen Empfänger.
Draft
Die Mail wird im Ordner Entwürfe gespeichert. Nur mit Client: Outlook.
Über Default oder den Namen eines anderen Programms nutzt RUNOS die Windows-Schnittstelle „Simple MAPI“. Sie kennt nur reinen Text und weniger Optionen: RUNOS wandelt HTML in Text um und lässt ReplyTo, Importance, DeliveryReceipt, OutlookSignature und From weg; jede ausgelassene Option steht als Warnung im Ergebnis.
Nur Outlook: Konto oder freigegebenes Postfach, von dem gesendet wird
To, Cc, Bcc
–
Empfänger, getrennt durch ; oder ,. Name <a@b.de>, eine Liste oder der Pfad einer Datei mit Adressen.
ReplyTo
–
Antwortadresse (nur Outlook)
Subject
–
Betreff
Body, Signatur
–
Text oder Pfad einer Text- bzw. HTML-Datei
BodyFormat
Auto
Auto, Html oder Text. Auto nimmt HTML, wenn Text oder Signatur HTML-Tags enthalten.
OutlookSignature
false
Outlook-Signatur des sendenden Kontos anhängen (nur Outlook)
Attachments
–
Ein Pfad, mehrere getrennt durch ; oder Zeilenumbrüche, eine Liste oder ein Muster wie C:\Out\*.pdf
MissingAttachments
Error
Error: Fehlt ein Anhang, schlägt die Aktion fehl. Skip: ohne ihn senden, mit Warnung.
Importance
Normal
Low, Normal, High (nur Outlook)
ReadReceipt
false
Lesebestätigung anfordern
DeliveryReceipt
false
Übermittlungsbestätigung anfordern (nur Outlook)
Timeout
60
Sekunden, die RUNOS wartet, bis Outlook gesendet hat, falls Outlook vorher nicht lief
Alle Werte dürfen Platzhalter enthalten, auch Ja/Nein-Werte ("true", "ja", "1"). Die früheren Parameter DisplayBeforeSend, HighImportance und IsHtml funktionieren weiter.
Status ist Sent, Displayed, Saved (Entwurf), Cancelled (geöffnet und ohne Senden geschlossen) oder Error.
Beispiel
Jedes PDF aus dem Ordner C:\RUNOS\Angebote als Entwurf im klassischen Outlook ablegen, aus dem gemeinsamen Postfach vertrieb@example.com, mit Outlook-Signatur:
APIs anbinden, Daten austauschen und Cloud-Dienste verbinden.
Übersicht
Die Aktion HttpRequest ruft eine Webadresse auf, typischerweise eine REST-API. Damit verbinden Sie RUNOS mit fast jedem Dienst: Mails über Microsoft 365 senden, Gmail lesen, Kontakte in Odoo anlegen, Aufträge aus einem Shop abrufen, Wetterdaten lesen, Dateien herunterladen.
Die Antwort steht den folgenden Aktionen zur Verfügung, JSON-Antworten bereits als Objekt:
Kopfzeilen als Objekt, z. B. { "Accept": "application/json" }
QueryParameters
–
Werte, die an die URL angehängt werden (?a=1&b=2), richtig kodiert
Body
–
Inhalt der Anfrage, als { "Value": … }. Nur bei Methoden außer GET und HEAD.
BodyType
json
Wie Body.Value gesendet wird, siehe unten
AuthType
None
None, Bearer, Basic oder ApiKey, siehe unten
AuthToken
–
Token, Zugangsdaten oder Schlüssel für AuthType
Timeout
30000
Zeitlimit je Anfrage in Millisekunden
MaxRetries
2
Wiederholungen bei Verbindungsfehlern und Zeitüberschreitung, mit wachsender Pause. Gelingt eine Wiederholung, ist die Aktion erfolgreich; die gescheiterten Versuche stehen als Warnung im Ergebnis.
Urls, Parallel
– , false
Mit Parallel: true und einer Liste in Urls wird jede Adresse abgefragt, bis zu MaxParallelRequests (Standard 5) gleichzeitig
AutoPagination
false
Weiteren Seiten automatisch folgen: @odata.nextLink (Microsoft Graph), next und nextPageUrl. Jede Seite wird ein Eintrag in Response.Results.
RateLimitDelay
0
Pause nach jeder Anfrage in Millisekunden
DownloadPath
–
Antwort als Datei speichern. Endet der Pfad auf \ oder ist er ein Ordner, wird der Dateiname vom Server oder aus der URL übernommen; sonst ist er der vollständige Dateiname.
IfNoneMatch, IfModifiedSince
–
Bedingte Anfrage mit ETag bzw. Datum
Alle Texte, auch in Headers, QueryParameters und Body, dürfen Platzhalter enthalten.
Body
BodyType
Gesendet als
json
JSON (application/json). Ein Objekt in Value wird zu JSON, ein Text wird unverändert gesendet.
form
Formular (application/x-www-form-urlencoded). Value ist ein Objekt mit den Feldern.
raw
Text (text/plain)
binary
Bytes des Textes in Value
none
ohne Inhalt
Der Inhaltstyp ergibt sich aus BodyType. Ein Content-Type in Headers wird bei Anfragen mit Body derzeit durch diesen Typ ersetzt.
Anmeldung
AuthType
AuthToken
Gesendet wird
Bearer
das Token oder der Schlüssel
Authorization: Bearer <Token>
Basic
benutzer:passwort
Authorization: Basic <Base64>
ApiKey
der Schlüssel
X-API-KEY: <Schlüssel>
Braucht eine API einen anderen Header, setzen Sie ihn in Headers: { "x-api-key": "{{connector.Wetter.ApiKey}}" }. Welche Werte ein Konnektor liefert, steht bei None, ApiKey, Basic und OAuth2.
Body ist bei JSON-Antworten ein Objekt, sonst der Text der Antwort. Mit DownloadPath steht der Pfad der Datei in DownloadedFile.
In JSON-Antworten werden alle Werte als Text abgelegt: Zahlen als Text (18.3 → "18.3"), true als "true", false und null als leerer Text. Vergleiche in IF wie > 25 funktionieren trotzdem.
Antwortet der Server mit einem Fehlercode (4xx, 5xx), endet die Aktion mit Failed. Der Code steht in StatusCode, die Antwort trotzdem in Body.
Felder, deren Name password, token, apikey, api_key oder secret enthält, werden als ***MASKED*** gespeichert, damit sie nicht im Protokoll landen.
Beispiele
Microsoft 365
Microsoft 365 und Outlook.com erreichen Sie über Microsoft Graph. Es muss kein Mailprogramm laufen, und es funktioniert auch mit dem neuen Outlook. Für den häufigsten Fall, eine Mail mit Anhängen senden, gibt es außerdem die fertige Aktion Outlook365.
Einmalig: Konnektor anlegen
Öffnen Sie Konnektoren, klicken Sie auf Neu und wählen Sie die Vorlage Microsoft Outlook Mail (für Kontakte: Outlook Contacts).
Nennen Sie den Konnektor OutlookMail (bzw. OutlookContacts) und speichern Sie.
Klicken Sie auf Im Browser anmelden, melden Sie sich mit dem Postfach an und bestätigen Sie die Berechtigungen.
Der Status zeigt danach Bereit. RUNOS erneuert die Anmeldung selbst. Mehr unter OAuth2.
Mit AutoPagination folgt RUNOS dem @odata.nextLink von Graph; jede Seite ist ein Eintrag in Response.Results. Die Kontakte der ersten Seite stehen in {{Kontakte.Response.Results.Body.value}} und lassen sich mit einer Loop durchlaufen:
Die Aktion Outlook365 sendet Mails über denselben Konnektor, ohne dass Sie das Graph-JSON selbst schreiben. Sie lädt große Anhänge in Teilen hoch und kann Entwürfe anlegen.
Send sendet; Draft speichert im Ordner Entwürfe; Display speichert als Entwurf und öffnet ihn in Outlook im Web
From
–
Leer: das angemeldete Postfach. Sonst ein freigegebenes Postfach oder eines mit „Senden als“-Rechten.
To, Cc, Bcc, ReplyTo
–
Empfänger, getrennt durch ; oder ,. Name <a@b.de>, Listen und Dateien mit Adressen sind erlaubt.
Subject
–
Betreff
Body, Signatur
–
Text oder Pfad einer Text- bzw. HTML-Datei
BodyFormat
Auto
Auto, Html oder Text
Attachments
–
Pfad, mehrere getrennt durch ;, eine Liste oder ein Muster wie C:\Out\*.pdf. Bis 150 MB je Datei.
MissingAttachments
Error
Error oder Skip
Importance
Normal
Low, Normal, High
ReadReceipt, DeliveryReceipt
false
Bestätigungen anfordern
SaveToSentItems
true
Kopie in Gesendete Elemente. Bei großen Anhängen bleibt sie immer dort.
Timeout
100
Zeitlimit je Anfrage an Microsoft in Sekunden
Das Ergebnis enthält je Mail Mode, Status (z. B. Sent), From, To, Subject, Attachments und Message; bei Draft und Display außerdem MessageId und WebLink zum Entwurf.
Meldung
Lösung
No connector named “…”
Konnektor anlegen oder den Namen in Connector korrigieren
… is not signed in
Auf der Seite Konnektoren Im Browser anmelden klicken
Fehler 403 bei From
Für das Postfach fehlen „Senden als“-Rechte
Die Workflow-Vorlage Outlook365Mail enthält ein fertiges Beispiel.
Gmail
Über die Gmail API liest RUNOS Mails aus einem Google-Konto, ohne Mailprogramm: ungelesene Mails suchen, ihre Details abrufen und sie als gelesen markieren. Zum Senden über Gmail nehmen Sie die Aktion SMTP.
Einmalig: Zugang einrichten
Google verlangt eine eigene OAuth-Anwendung:
Legen Sie in der Google Cloud Console ein Projekt an und aktivieren Sie die Gmail API.
Richten Sie den OAuth-Zustimmungsbildschirm ein und tragen Sie Ihr Google-Konto als Testnutzer ein.
Legen Sie unter Anmeldedaten eine OAuth-Client-ID vom Typ Desktop-App an. Notieren Sie Client-ID und Clientschlüssel.
In RUNOS: Konnektoren → Neu → Vorlage Gmail API. Nennen Sie den Konnektor Gmail, tragen Sie Client ID und Client secret ein und speichern Sie.
Im Browser anmelden und den Zugriff bestätigen.
Die Vorlage fordert die Berechtigungen gmail.send und gmail.readonly an. Zum Markieren als gelesen ergänzen Sie in den Scopeshttps://www.googleapis.com/auth/gmail.modify und melden sich erneut an. Mehr unter OAuth2.
q versteht dieselben Suchbegriffe wie das Suchfeld von Gmail. Die Antwort enthält in Body.messages eine Liste mit id je Mail. Die Details lesen Sie je Mail in einer Loop:
Im Durchlauf steht die Kurzvorschau in {{MailLesen.Response.Results.Body.snippet}}. Prüfen Sie vorher mit IF, ob es überhaupt Mails gibt: {{Ungelesen.Response.Results.Body.resultSizeEstimate}} > 0.
Als gelesen markieren
Im selben Durchlauf entfernt diese Aktion das Label UNREAD, damit die Mail beim nächsten Abruf nicht wieder erscheint (Scope gmail.modify nötig):
Mit einem Time-Trigger (z. B. alle 5 Minuten) wird daraus ein Postfach, das RUNOS regelmäßig abarbeitet.
Mail senden
Die Gmail API erwartet zum Senden den vollständigen Mailtext als Base64. Das lässt sich mit HttpRequest derzeit nicht aus Platzhaltern zusammensetzen. Senden Sie über Gmail deshalb mit der Aktion SMTP:
Schalten Sie im Google-Konto die Bestätigung in zwei Schritten ein und erzeugen Sie unter Sicherheit → App-Passwörter ein App-Passwort.
Legen Sie einen Basic-KonnektorGmailSmtp an: Benutzername = Gmail-Adresse, Passwort = App-Passwort.
Odoo speichert Kontakte (Kunden, Lieferanten, Ansprechpartner) im Modell res.partner. Ab Odoo 19 bietet Odoo dafür die JSON-2-API: Jede Methode eines Modells ist eine Adresse /json/2/<Modell>/<Methode>, die Anmeldung erfolgt mit einem API-Schlüssel.
Einmalig: API-Schlüssel und Konnektor
In Odoo: Klicken Sie oben rechts auf Ihren Namen → Mein Profil → Kontosicherheit → Neuer API-Schlüssel. Kopieren Sie den Schlüssel; Odoo zeigt ihn nur einmal.
In RUNOS: Konnektoren → Neu → Leerer Konnektor. Name Odoo, Base URLhttps://ihrefirma.odoo.com, Auth-Typ API key, den Schlüssel einfügen. Speichern.
Haben Sie mehrere Datenbanken auf einem Server, tragen Sie unter Erweitert → Extra JSON die Datenbank ein: { "Database": "ihrefirma" }.
domain ist der Suchfilter von Odoo: eine Liste von Bedingungen [Feld, Operator, Wert], z. B. ["is_company", "=", true] oder ["name", "ilike", "Muster"].
Die Antwort ist eine Liste der gefundenen Kontakte. Den ersten Treffer lesen Sie mit {{KontaktSuchen.Response.Results.Body.0.name}}, die Anzahl mit {{KontaktSuchen.Response.Results.Body.count}}.
Ohne X-Odoo-Database (bei nur einer Datenbank) bleibt der Header leer und wird nicht gesendet.
Kontakt anlegen, wenn er fehlt
Zusammen mit IF: Nur wenn die Suche nichts gefunden hat, wird der Kontakt angelegt.
PDFs, Bilder und Texte auf einem Drucker ausgeben.
Diese Aktion ist in der Dokumentation beschrieben, im Changelog aber noch der nächsten Version zugeordnet. Verfügbarkeit mit Ihrer RUNOS-Version abgleichen.
Übersicht
Die Aktion Print druckt eine oder mehrere Dateien auf einem Drucker, der auf diesem PC installiert ist – zum Beispiel jede eingehende Rechnung zusätzlich auf Papier. Es öffnet sich kein Fenster; der Druck läuft ohne Rückfrage.
Dateityp
Endungen
PDF
.pdf
Bilder
.png, .jpg, .jpeg, .bmp, .gif, .tif, .tiff (mehrseitige TIFF-Dateien Seite für Seite)
Text
.txt, .log, .csv, .xml, .json (Schrift Consolas 9 pt, ohne eingestellte Ränder 1,27 cm Rand, zu lange Zeilen werden abgeschnitten)
PDF-Seiten und Bilder werden auf den bedruckbaren Bereich des Papiers (oder den Bereich innerhalb der eingestellten Ränder) verkleinert, wenn sie größer sind, aber nie vergrößert, und mittig gesetzt. Ohne feste Ausrichtung (Landscape) wird jede Seite so gedreht, wie sie angelegt ist: Querformat-Seiten quer, Hochformat-Seiten hoch.
Fehler: RUNOS prüft vor der ersten Seite den Drucker, alle Dateien, die Dateitypen und die Optionen. Ist etwas davon ungültig, schlägt die Aktion fehl, ohne etwas zu drucken. Danach werden die Dateien nacheinander gedruckt. Schlägt eine fehl, werden die übrigen nicht mehr gedruckt (Skipped) und die Aktion schlägt fehl. Wie bei jeder Aktion endet der Lauf dann bzw. greift die Fehlerbehandlung des Workflows.
Welche Drucker es gibt, was sie können und wie eine Datei gedruckt aussieht, zeigt der Playground.
Den umgekehrten Weg, vom Drucken eines Programms in einen Ordner, beschreibt PDFPrinter (PDF24).
Die zu druckende(n) Datei(en): ein Pfad, mehrere getrennt durch ; oder Zeilenumbrüche, eine Liste oder ein Muster wie C:\Out\*.pdf. Die Dateien werden in dieser Reihenfolge gedruckt; Treffer eines Musters alphabetisch.
MissingFiles
Error
Error: Fehlt eine Datei oder findet ein Muster nichts, schlägt die Aktion fehl. Skip: ohne sie weiterdrucken, mit Warnung. Fehlen alle, druckt die Aktion nichts und endet erfolgreich mit Warnungen.
Printer
default
default = der Standarddrucker von Windows, sonst der Name eines installierten Druckers, wie er unter Einstellungen → Drucker & Scanner steht (Groß-/Kleinschreibung egal). Ist der Drucker nicht installiert, schlägt die Aktion fehl; die Fehlermeldung nennt die installierten Drucker.
Copies
1
Anzahl Exemplare jeder Datei (sortiert). Kann der Druckertreiber nicht so viele Kopien, wird die Datei entsprechend oft gedruckt.
Duplex
default
Simplex (einseitig), LongEdge (beidseitig, Bindung an der langen Kante) oder ShortEdge (an der kurzen Kante). Kann der Drucker nicht beidseitig drucken, wird einseitig gedruckt, mit Warnung.
FromPage, ToPage
default
Erste und letzte Seite (ab 1), bei jeder Datei; bei Textdateien zählen die gedruckten Seiten. Ein ToPage hinter der letzten Seite druckt bis zum Ende; ein FromPage hinter der letzten Seite ist ein Fehler.
Color
default
true = farbig, false = schwarzweiß. Druckt der Drucker nicht farbig, gibt es eine Warnung.
Landscape
default
true = quer, false = hoch. default: PDF-Seiten und Bilder nach ihrer eigenen Ausrichtung, Text wie im Drucker eingestellt.
PaperSize
default
Papierformat, wie der Drucker es nennt, z. B. A4 oder Letter.
PaperSource
default
Papierfach, wie der Drucker es nennt, z. B. Fach 2.
Resolution
default
High, Medium, Low, Draft oder dpi wie 600 bzw. 600x600.
MarginTop, MarginBottom, MarginLeft, MarginRight
default
Rand in Millimetern vom Papierrand, z. B. 15 oder 12.5. Der Inhalt wird in den Bereich innerhalb der Ränder eingepasst. Ein Rand kleiner als der nicht bedruckbare Rand des Druckers zählt als dieser. default: der Rand des Druckers, bei Textdateien zusätzlich 1,27 cm. Lassen die Ränder weniger als 1,27 cm Platz, schlägt die Aktion fehl.
default (oder ein leerer Wert) lässt die Einstellung des Druckers unverändert. Kennt der Drucker ein angegebenes Papierformat, Fach oder eine Auflösung nicht, schlägt die Aktion fehl; die Fehlermeldung nennt die verfügbaren Werte. Alle Werte dürfen Platzhalter enthalten, auch Zahlen und Ja/Nein-Werte ("true", "ja", "1").
Status ist Printed, Error (die Datei, an der es scheiterte) oder Skipped (nach einem Fehler nicht mehr gedruckt). Pages zählt die Seiten eines Exemplars. Schlägt schon die Prüfung vor dem Druck fehl (Drucker, Datei, Option), ist Results leer und ErrorCount 1; die Meldung steht in Status.Errors. Warnungen (kein Duplex, keine Farbe, übersprungene Dateien) stehen in Status.Warnings.
Playground
Unter Playground in der Aktivitätsleiste (Aktion Print) stellen Sie die Aktion zusammen, ohne JSON zu schreiben:
Drucker: Links stehen alle installierten Drucker, der Standarddrucker zuerst, mit Zustand (Bereit / Offline). Die Schaltfläche neben einem Drucker kopiert seinen Namen für Printer.
Einstellungen: Dateien wählen (Durchsuchen…, auch mehrere), dann Exemplare, Duplex, Seitenbereich, Farbe, Ausrichtung und die Ränder oben, unten, links und rechts in mm (leer = Rand des Druckers). Papierformat, Papierfach und Auflösung bieten genau die Werte an, die der gewählte Drucker kennt.
Vorschau: Rechts sehen Sie jede Seite auf dem Papier, so wie RUNOS sie druckt: verkleinert, mittig, gedreht, nur der gewählte Seitenbereich, bei Color: false in Graustufen. Die gestrichelte Linie ist der Bereich, in den gedruckt wird: innerhalb der Ränder bzw. des nicht bedruckbaren Rands des Druckers. Die Seite füllt die Breite der Vorschau; mit Strg+Mausrad zoomen Sie, der Zoom bleibt beim Blättern erhalten. Darunter stehen dieselben Fehler und Warnungen, die die Aktion melden würde.
Testdruck druckt die gewählten Dateien nach einer Rückfrage wirklich, z. B. um Duplex oder Papierfach zu prüfen.
Aktion kopieren legt das fertige Aktions-JSON in die Zwischenablage. Fügen Sie es unter Actions eines Workflows ein. Ist In der kopierten Aktion die Datei des Triggers ({{FilePath}}) statt dieser Dateien drucken angehakt, steht dort {{FilePath}} statt der gewählten Dateien – passend für Workflows mit Datei-Trigger.
Beidseitig, Papierfach, Auflösung und Exemplare erledigt der Drucker selbst; die Vorschau zeigt sie nicht, sondern nennt sie unter dem Bild.
Beispiel
Jede Rechnung, die im Ordner C:\RUNOS\Rechnungen ankommt, zweimal beidseitig auf dem Drucker „Buchhaltung“ ausgeben:
Diese Aktion ist in der Dokumentation beschrieben, im Changelog aber noch der nächsten Version zugeordnet. Verfügbarkeit mit Ihrer RUNOS-Version abgleichen.
Übersicht
Die Aktion FTP tauscht Dateien mit einem Server aus: Sie lädt Dateien von diesem PC hoch, lädt sie herunter, listet sie auf oder löscht sie. Sie beherrscht drei Protokolle:
Protokoll
Port
Verschlüsselung
SFTP (Standard)
22
SSH; Anmeldung mit Passwort und/oder Schlüsseldatei
FTPS
21 (ImplicitTls: 990)
TLS. Ein Server ohne TLS ist ein Fehler; RUNOS weicht nie auf unverschlüsseltes FTP aus.
FTP
21
keine: Passwort und Dateien gehen im Klartext
Damit Übertragungen zuverlässig sind, macht die Aktion Folgendes:
Jede Übertragung wird über die Größe geprüft. Nach dem Hochladen vergleicht RUNOS die Dateigröße auf dem Server mit der lokalen; beim Herunterladen muss die Datei mit der Größe ankommen, die der Server gemeldet hat. Weichen sie ab, zählt die Datei als Fehler. Einem Server, der keine Größe meldet, wird vertraut.
Heruntergeladene Dateien werden unter einem vorläufigen Namen geschrieben (name.part) und erst umbenannt, wenn sie vollständig und geprüft sind. Ein Datei-Trigger, der den Ordner überwacht, sieht nie eine halbe Datei.
Move löscht die Quelle erst nach der Prüfung. Lässt sich die Quelle nicht löschen, ist die Datei trotzdem angekommen: Das ist eine Warnung, kein Fehler, und die Datei wird beim nächsten Mal noch einmal übertragen.
Eine fehlerhafte Datei hält die anderen nicht auf. Am Ende schlägt die Aktion fehl, wenn eine Datei fehlgeschlagen ist oder Verbindung bzw. Anmeldung nicht geklappt haben. Wie bei jeder Aktion endet dann der Lauf oder die Fehlerbehandlung des Workflows greift (z. B. drei Wiederholungen mit RetryThenNotify).
Fehlende Ordner auf der Zielseite werden angelegt.
Server, Anmeldung und Übertragung probieren Sie am einfachsten im Playground aus; dort sehen Sie auch die Ordner auf dem Server.
FTPS: TLS ab dem ersten Byte (Port 990) statt AUTH TLS (Port 21)
PassiveMode
true
FTP/FTPS: passiver Modus. Nur false, wenn der Server aktiven Modus verlangt.
IgnoreCertificateErrors
false
FTPS: auch ein Zertifikat annehmen, dem Windows nicht vertraut (selbst signiert). Besser: Fingerprint.
Timeout
60
Sekunden für den Verbindungsaufbau und jede Antwort des Servers
Übertragung
Parameter
Standard
Bedeutung
Operation
Upload
Upload, Download, List oder Delete
Source
–
Was übertragen, aufgelistet oder gelöscht wird, siehe unten
Destination
–
Upload: Ordner auf dem Server (leer = Anmeldeordner). Download: Ordner auf diesem PC (Pflicht).
Filter
*
Ist Source ein Ordner: nur diese Dateien, z. B. *.pdf;*.xml
Recursive
false
Unterordner einbeziehen; ihre Struktur bleibt am Ziel erhalten
IfExists
Overwrite
Die Zieldatei gibt es schon: Overwrite (überschreiben), Skip (überspringen, zählt als Skipped) oder Error (zählt als Fehler)
Move
false
Upload/Download: Quelle nach geprüfter Übertragung löschen
NewName
–
Upload/Download: Name der Datei am Ziel. Kennt %filename%, %filenamewithoutextension%, %extension% (der jeweiligen Datei) sowie %yyyy%, %MM%, %dd%, %HH%, %mm%, %ss%.
Source ist je nach Operation:
Upload: ein oder mehrere Pfade auf diesem PC, getrennt durch ;: eine Datei ({{FilePath}}), ein Ordner (seine Dateien, die zu Filter passen) oder ein Muster wie C:\Export\*.xml. Eine Datei oder ein Ordner, den es nicht gibt, ist ein Fehler.
Download, List, Delete: ein Pfad auf dem Server: eine Datei (/ausgang/auftrag.xml), ein Ordner (/ausgang, seine Dateien, die zu Filter passen) oder ein Muster (/ausgang/*.xml). Eine Datei oder ein Ordner, den es nicht gibt, ist ein Fehler; ein Muster, zu dem nichts passt, nicht. Ein Pfad ohne führenden / beginnt im Anmeldeordner.
Delete löscht nur Dateien, nie Ordner, und braucht eine Source. List listet die Dateien auf (mit Recursive auch die der Unterordner).
Platzhalter in Pfaden: {{FilePath}}, {{InitialData…}}, Konnektoren und %yyyy%, %MM%, %dd% (z. B. /archiv/%yyyy%/%MM%) werden vor der Übertragung ersetzt.
Fingerprint
Ohne Fingerprint nimmt die Aktion jeden SFTP-Server an, der unter der Adresse antwortet, und jeden FTPS-Server, dessen Zertifikat Windows vertraut. Mit Fingerprint nimmt sie nur diesen einen Server an und lehnt jeden anderen vor der Anmeldung ab; das Passwort erreicht also nie einen falschen Server.
SFTP: der Host-Schlüssel, wie ssh, WinSCP oder FileZilla ihn zeigen: SHA256:ohD8VZ… (die ältere MD5-Form aa:bb:cc:… geht auch).
FTPS: der SHA-256- oder SHA-1-Hash des Zertifikats in Hex (mit oder ohne Doppelpunkte). Ein so festgelegtes Zertifikat wird auch angenommen, wenn es selbst signiert ist.
Am einfachsten geht es im Playground: Verbinden zeigt den Fingerprint des Servers, und Diesen Fingerprint verwenden übernimmt ihn in die Aktion. Jeder Lauf schreibt ihn außerdem nach Meta.Fingerprint. Ändert sich der Schlüssel des Servers (neuer Server, neues Zertifikat), schlägt die Aktion mit einer entsprechenden Meldung fehl; tragen Sie dann den neuen Fingerprint ein.
Status ist OK, Skipped (gibt es schon, IfExists: Skip) oder Error mit dem Grund in Message. List liefert die Dateien stattdessen in Files, jede mit Name, Path, Size (Bytes, -1 wenn unbekannt) und Modified. Eine folgende Aktion liest sie als {{DateienAuflisten.Response.Files}}, z. B. in einem Loop.
Playground
Unter Playground in der Aktivitätsleiste (Aktion FTP) stellen Sie die Aktion zusammen und probieren sie am echten Server aus:
Server: Protokoll, Server und Port (ein Wechsel des Protokolls setzt den üblichen Port). Unter Anmeldung wählen Sie einen Basic-Konnektor, dann stehen in der Aktion {{connector.Name.Username}} und {{connector.Name.Password}} statt des Passworts. Bei SFTP optional eine Schlüsseldatei, bei FTPS implizites TLS und das Annehmen nicht vertrauenswürdiger Zertifikate, bei FTP/FTPS der passive Modus.
Verbinden verbindet sich und meldet sich genauso an wie die Aktion und zeigt den Anmeldeordner unter Dateien auf dem Server. Unter der Schaltfläche steht der Fingerprint des Servers; Diesen Fingerprint verwenden übernimmt ihn in die Aktion.
Dateien auf dem Server: Doppelklick öffnet einen Ordner, der Pfeil geht eine Ebene nach oben, und Sie können einen Pfad eintippen und Enter drücken. Als Quelle übernimmt die gewählte Datei bzw. den Ordner (oder den angezeigten Ordner) als Source für Herunterladen, Auflisten und Löschen; Als Ziel als Zielordner für das Hochladen.
Übertragung: Vorgang, Quelle (Durchsuchen… für Dateien auf diesem PC), Ziel (Durchsuchen… für einen lokalen Ordner beim Herunterladen), Filter, Unterordner, Verhalten bei vorhandener Datei, Verschieben und neuer Name. Rechts stehen Fehler und Warnungen, z. B. eine lokale Datei, die es nicht gibt, unverschlüsseltes FTP oder ein Server ohne Fingerprint.
Ausführen führt die Aktion wirklich aus (fragt vorher, außer beim Auflisten) und zeigt eine Zeile pro Datei. Danach wird die Dateiliste des Servers neu geladen.
Aktion kopieren legt das fertige Aktions-JSON in die Zwischenablage. Fügen Sie es unter Actions eines Workflows ein. Ist In der kopierten Aktion die Datei des Triggers ({{FilePath}}) statt dieser Dateien hochladen angehakt, steht bei Source{{FilePath}}, passend für Workflows mit Datei-Trigger.
Beispiel
Jede Rechnung an den Partner senden. Ein Datei-Trigger nimmt jede XRechnung aus dem Exportordner und lädt sie auf den SFTP-Server des Partners, in einen Ordner pro Monat. Drei Wiederholungen bei Netzwerkproblemen:
Alle 15 Minuten Aufträge abholen. Alle neuen XML-Dateien aus dem ausgang des Partners herunterladen und dort entfernen (Move), in einen Ordner, den ein anderer Workflow überwacht. Weil Downloads unter einem vorläufigen Namen ankommen, sieht dieser Workflow nur vollständige Dateien:
Mit AI sollen Workflows Texte und Dokumente mit einem KI-Modell verarbeiten können, zum Beispiel Daten aus einem Beleg auslesen oder eine Antwort formulieren.
KI-Dienste mit REST-API (z. B. OpenAI) erreichen Sie schon heute mit HTTPRequest und einem ApiKey-Konnektor; die Konnektor-Vorlage OpenAI gibt es bereits.
Struktur
Für diese geplante Aktion ist noch keine Parameterstruktur veröffentlicht. Die Referenz wird mit der Veröffentlichung ergänzt.
Beispiel
Für diese geplante Aktion ist noch kein ausführbares Beispiel veröffentlicht. Die Referenz wird mit der Veröffentlichung ergänzt.
Den nächsten Schritt von einer Bedingung abhängig machen.
Übersicht
Die Operation If prüft eine Bedingung und führt dann die Aktionen in Do aus, oder, wenn die Bedingung nicht zutrifft, die in Else. Do und Else enthalten Aktionen mit demselben Aufbau wie Actions, auch weitere If oder Loop. Ihre Namen müssen im ganzen Workflow eindeutig sein; ihre Ergebnisse sind danach wie gewohnt über den Namen erreichbar.
Eine Bedingung vergleicht einen Wert links mit einem festen Wert rechts: {{Pfad}} Operator Wert.
Operator
Bedeutung
Für
==, !=
gleich, ungleich
Zahlen, Texte, Wahrheitswerte
>, <, >=, <=
größer, kleiner …
nur Zahlen
&&, ||
und, oder
mehrere Vergleiche
Links steht ein Platzhalter (oder ein Wert), rechts ein fester Wert. Platzhalter rechts werden nicht ersetzt.
Zahlen werden auch als Text erkannt, mit Punkt oder Komma: "1234,50" und "1234.50" ja, "1.234,50" nicht.
Texte rechts in Anführungszeichen: {{Land}} == "DE". Groß- und Kleinschreibung zählt.
Wahrheitswerte: == true nur bei echten Wahrheitswerten. Aus einer HTTP-Antwort kommen sie als Text; vergleichen Sie dann mit "true".
Kann der Platzhalter links nicht aufgelöst werden, ist der Vergleich falsch, auch bei !=.
&& und || lassen sich mischen, aber nicht klammern: a && b || c bedeutet „(a und b) oder c“.
ExecutedBranch ist If (Do lief), Else oder None (Bedingung falsch und kein Else). Welchen Wert RUNOS verglichen hat, steht im Protokoll unter ConditionEvaluated.
Schlägt eine Aktion in Do oder Else fehl, laufen die restlichen Aktionen des Zweigs nicht mehr, und das If schlägt mit deren Fehlermeldung fehl. Danach gilt die Fehlerrichtlinie des If; mit RetryThenNotify wird der ganze Zweig wiederholt.
Workflow anhalten mit StopWorkflow
Die Aktion StopWorkflow beendet den aktuellen Lauf sofort und stoppt danach den Workflow. Es starten keine neuen Läufe mehr, auch nicht nach einem Neustart von RUNOS, bis Sie ihn in der Liste wieder starten. Bei Ausführen im Editor endet nur der Lauf.
Begründung für das Protokoll, mit Platzhaltern. Ohne Angabe: „Stopped by action.“ Das Ergebnis enthält sie als Response.Reason.
StopWorkflow funktioniert überall: in einem If, in einer Loop oder am Ende von OnError, damit nach einer Fehlermeldung nicht jede weitere Datei am selben Problem scheitert.
Rechnungen ohne Empfängeradresse nicht senden, sondern melden und den Workflow anhalten. Der Workflow enthält "InitialData": { "Email": "" }, ein Skriptblock in der Datei setzt die Adresse. Ohne diesen Vorgabewert wäre {{InitialData.Email}} nicht auflösbar und der Vergleich immer falsch.
Die Operation Loop führt die Aktionen in Do einmal für jedes Element von Items aus, zum Beispiel für jede Zeile einer CSV-Datei oder jeden Eintrag einer API-Antwort.
Items
Durchläufe
item
eine Zahl, z. B. 5
5
{{item.value}} = 1 … 5
Range(10,15)
6
{{item.value}} = 10 … 15
eine JSON-Liste, z. B. ["a","b"] oder {{Abfrage.Response.Results.Body.items}}
je Element
Objekte bleiben Objekte ({{item.id}}), einfache Werte stehen in {{item.value}}
Pfad einer .json-Datei mit einer Liste
je Element
wie oben
Pfad einer .csv-Datei oder CSV-Text über mehrere Zeilen
je Zeile
{{item.<Spaltenname>}}
irgendetwas anderes
1
{{item.value}} = der Text
CSV: Trennzeichen ist ;, wenn die erste Zeile eines enthält, sonst ,. Die erste Zeile ist die Kopfzeile, außer eine ihrer Zellen ist eine ganze Zahl; ohne Kopfzeile heißen die Spalten col0, col1, … Werte in Anführungszeichen mit Trennzeichen darin werden nicht unterstützt.
Nach so vielen fehlgeschlagenen Durchläufen abbrechen; die Schleife endet dann als fehlgeschlagen
DelayMs
–
Pause nach jedem Durchlauf in Millisekunden
Platzhalter im Durchlauf
Inhalt
{{item}}
das aktuelle Element (immer ein Objekt)
{{item.value}}
der Wert bei einfachen Elementen
{{index}}
Position, beginnend bei 0
{{count}}
Anzahl aller Elemente
Das Ergebnis einer Aktion in Do steht unter ihrem Namen und wird bei jedem Durchlauf überschrieben; nach der Schleife enthält es den letzten Durchlauf. Verschachtelte Schleifen teilen sich item, index und count: In der inneren Schleife beziehen sie sich auf deren Element.
StopReason ist Completed, BreakOnErrors oder StopWorkflow (eine StopWorkflow-Aktion in Do hat Schleife und Lauf beendet).
Schlägt eine Aktion in Do fehl, werden die restlichen Aktionen dieses Durchlaufs übersprungen, und der Fehler wird mit der Nummer des Elements in Status.Errors und ErrorCount vermerkt. Die Schleife macht mit dem nächsten Element weiter, bis BreakOnErrors erreicht ist. Ein Lauf mit Fehlern in einzelnen Durchläufen erscheint in der Workflow-Liste rot.
Beispiel
kunden.csv:
TEXT
Name;Email;Kundennummer
Muster GmbH;info@muster.de;1001
Beispiel AG;post@beispiel.de;1002
Mit der Operation AI soll ein KI-Modell entscheiden können, welcher Weg im Workflow genommen wird, zum Beispiel anhand des Inhalts einer Mail oder eines Belegs.
Bis dahin entscheiden Sie mit IF anhand fester Bedingungen.
Gemeinsame Werte ohne Authentifizierung verwalten.
Übersicht
Ein Konnektor speichert, wie RUNOS einen Dienst erreicht: Adresse und Zugangsdaten. Workflows verweisen über den Namen darauf, so stehen keine Geheimnisse im Workflow-JSON, und ein geändertes Passwort pflegen Sie an einer Stelle.
Auth-Typ
Für
Seite
None
Dienste ohne Anmeldung, oder nur gemeinsame Werte
diese Seite
ApiKey
API-Schlüssel, z. B. OpenAI, GitHub, Odoo, Wetterdienste
Ein Konnektor vom Typ None hat keine Zugangsdaten. Er speichert nur die Basis-URL und unter Erweitert → Extra JSON beliebige eigene Werte, etwa eine Mandantennummer oder eine Region. Nützlich für öffentliche APIs und für Werte, die mehrere Workflows teilen.
Konnektor anlegen
Öffnen Sie links Konnektoren und klicken Sie auf Neu.
Wählen Sie Leerer Konnektor oder eine Vorlage.
Vergeben Sie einen Namen ohne Leerzeichen, zum Beispiel Wetter. Über diesen Namen sprechen Workflows den Konnektor an.
Wählen Sie den Auth-Typ, füllen Sie die Felder aus und klicken Sie auf Speichern.
Testen sendet eine angemeldete Anfrage an die Basis-URL und zeigt die Antwort. Der Status oben zeigt Bereit, Token läuft bald ab, Token abgelaufen, Zugangsdaten fehlen oder Keine Authentifizierung. Duplizieren legt eine Kopie an, zum Beispiel für ein zweites Postfach.
Vorlage
Auth-Typ
Microsoft Outlook Mail, Outlook Contacts
OAuth2 (Microsoft Graph)
Azure Service Principal
OAuth2 Client Credentials
Gmail API
OAuth2 (Google)
GitHub, OpenAI, OpenWeatherMap
ApiKey
FTP Server, Internal REST API
Basic
Sicherheit
Mit Geheimnisse verschlüsseln (Standard) speichert RUNOS API-Schlüssel, Passwörter, Client Secret und Tokens verschlüsselt für den angemeldeten Windows-Benutzer. Ein anderer Benutzer oder ein anderer PC kann sie nicht lesen; auf einem neuen PC geben Sie sie neu ein.
Struktur
Unter In einem Workflow verwenden zeigt RUNOS den Platzhalter und kopiert ihn auf Klick:
Viele Dienste vergeben einen API-Schlüssel, den jede Anfrage in einem Header mitschickt. Ein Konnektor vom Typ ApiKey speichert den Schlüssel verschlüsselt, zusammen mit dem Header und dem Präfix, die der Dienst erwartet. Wie Sie einen Konnektor anlegen, steht unter None.
Den Schlüssel erzeugen Sie beim Dienst selbst, meist unter Einstellungen → API oder Profil → API-Schlüssel.
Struktur
Feld
Bedeutung
API key
der Schlüssel (verschlüsselt gespeichert)
Header
Name des Headers, Standard Authorization; z. B. x-api-key
Scheme
Präfix vor dem Schlüssel, wenn der Header Authorization ist, z. B. Bearer oder token
Base URL
Adresse der API, für Testen und als {{connector.<Name>.BaseUrl}}
Testen sendet den Schlüssel so, wie Header und Scheme es festlegen: Authorization: Bearer <Schlüssel>, oder x-api-key: <Schlüssel>.
In der Aktion HTTPRequest setzen Sie den Header selbst und holen nur den Schlüssel aus dem Konnektor:
Konnektor OpenAI aus der Vorlage OpenAI: Header Authorization, Scheme Bearer, Basis-URL https://api.openai.com/v1/. Eine Zusammenfassung des gelesenen PDF-Textes anfordern:
Ein Konnektor vom Typ Basic speichert Benutzername und Passwort, das Passwort verschlüsselt. Das ist der richtige Ort für jedes Passwort, das ein Workflow braucht: das Postfach für SMTP, den Zugang zu einer internen REST-API oder einem FTP-Server. Wie Sie einen Konnektor anlegen, steht unter None.
Struktur
Feld
Bedeutung
Platzhalter
Username
Benutzername
{{connector.<Name>.Username}}
Password
Passwort (verschlüsselt gespeichert)
{{connector.<Name>.Password}}
Base URL
Adresse des Dienstes
{{connector.<Name>.BaseUrl}}
Testen meldet sich wirklich an, wenn die Basis-URL eine Serveradresse ist (smtp://, imap://, ftp://, ftps://, sftp://, z. B. sftp://sftp.partner.de:22); bei jeder anderen Adresse sendet es eine Anfrage mit Authorization: Basic … an die Basis-URL.
Beispiel
Mailserver für SMTP. Konnektor Mailserver, Auth-Typ Basic, Benutzername rechnung@example.com, Passwort des Postfachs:
SFTP-Server für FTP. Konnektor Partner, Basis-URL sftp://sftp.partner.de, Benutzername und Passwort des Zugangs. Die Aktion FTP nimmt Protokoll, Host und Port aus der Basis-URL:
Mit OAuth2 melden Sie sich einmal im Browser beim Anbieter an; RUNOS bekommt dafür ein Zugriffstoken und ein Erneuerungstoken und erneuert den Zugriff danach selbst. Ein Passwort speichert RUNOS dabei nicht. So arbeiten Microsoft 365, Outlook.com und Google (Gmail). Wie Sie einen Konnektor anlegen, steht unter None.
OAuth-Flow
Wann
Authorization Code
Ein Benutzer meldet sich im Browser an, z. B. mit seinem Postfach. Für MS365 und Gmail.
Client Credentials
Ein Dienstkonto ohne Benutzer, z. B. eine App-Registrierung in Microsoft Entra (Vorlage Azure Service Principal). Es gibt keine Browser-Anmeldung; RUNOS holt das Token mit Client ID und Client Secret.
Anmelden: Bei Authorization Code klicken Sie auf Im Browser anmelden. RUNOS öffnet die Anmeldeseite des Anbieters und wartet an der Redirect URI (Standard http://localhost:5000/) auf die Rückmeldung. Danach sind Access- und Refresh-Token gespeichert.
Erneuern: RUNOS erneuert das Token automatisch, wenn ein Workflow den Konnektor verwendet und das Token in weniger als einer Minute abläuft. Mit Token erneuern fordern Sie sofort ein neues an. Lässt sich das Token nicht mehr erneuern (Passwort geändert, Zugriff widerrufen), zeigt der Status Token abgelaufen; melden Sie sich dann erneut an.
Struktur
Feld
Bedeutung
Client ID, Client secret
Kennung und Geheimnis der Anwendung beim Anbieter (für Microsoft-Vorlagen ist die Client ID vorbelegt)
Scopes
Berechtigungen, getrennt durch Leerzeichen, z. B. offline_access Mail.Send
Auth endpoint, Token endpoint
Adressen des Anbieters für Anmeldung und Token
Redirect URI
Adresse, an der RUNOS die Anmeldung entgegennimmt; muss beim Anbieter eingetragen sein
OAuth flow
Authorization Code oder Client Credentials
Access token, Refresh token, Expires
nach der Anmeldung: die Tokens (verschlüsselt) und ihr Ablauf
Die Aktion Outlook365 bekommt nur den Namen des Konnektors ("Connector": "OutlookMail") und kümmert sich selbst um die Anmeldung.
Beispiel
Microsoft 365, Benutzer meldet sich an. Vorlage Microsoft Outlook Mail, Name OutlookMail, Im Browser anmelden. Danach die eigenen Kalendereinträge der nächsten Tage lesen (dafür in den ScopesCalendars.Read ergänzen und erneut anmelden):
Dienstkonto mit Client Credentials. Vorlage Azure Service Principal: In Microsoft Entra eine App registrieren, Anwendungsberechtigungen (z. B. User.Read.All) erteilen und mit Administratorzustimmung bestätigen; Client ID, Client Secret und im Token endpoint die Mandanten-ID eintragen. Scope https://graph.microsoft.com/.default.
PDF24 als Eingang für automatisierte Prozesse einrichten.
Viele Programme, etwa ein ERP oder eine Warenwirtschaft, können Belege nur drucken. RUNOS arbeitet aber mit Dateien in einem Ordner. Die Brücke ist ein PDF-Drucker: Er erscheint in jedem Programm als normaler Drucker, schreibt aber ein PDF in einen Ordner. Diesen Ordner überwacht ein File-Trigger.
RUNOS verwendet dafür den kostenlosen PDF24 Creator. Sie richten ihn einmal ein; danach landet jeder Druck auf diesem Drucker ohne Rückfrage als PDF im Ordner, und RUNOS verarbeitet ihn.
Laden Sie den PDF24 Creator von tools.pdf24.org herunter und installieren Sie ihn. Dabei wird der Drucker PDF24 angelegt.
2. Einstellungen öffnen
Öffnen Sie die PDF24 Toolbox und darin die Einstellungen, Bereich PDF-Drucker.
3. Einen eigenen Drucker für RUNOS anlegen
Klicken Sie oben neben der Druckerauswahl auf + und legen Sie einen zweiten PDF-Drucker an, zum Beispiel mit dem Namen RUNOS. So bleibt der normale Drucker PDF24 unverändert, und nur Drucke auf RUNOS gehen an den Workflow. Wählen Sie oben den neuen Drucker aus, bevor Sie weitermachen.
4. Automatisch speichern einstellen
So sollen die Einstellungen aussehen (englische Oberfläche):
Einstellung
Wert
Warum
PDF-Drucker-Werkzeug
Dokumente nach dem Drucken automatisch speichern (Automatically save documents after printed)
Kein Dialog, kein Assistent: Jeder Druck wird sofort als Datei gespeichert.
Erstellte PDF-Dateien im Creator öffnen, wenn die Anwendung geöffnet ist
aus
Sonst öffnet sich ein Fenster statt zu speichern.
Ausgabeverzeichnis (Output Directory)
der Pool des File-Triggers, z. B. C:\RUNOS\Rechnungen
Genau diesen Ordner überwacht RUNOS. Keine Platzhalter wie %Y im Ordner, der Pool ist ein fester Ordner.
Dateiname (Filename)
%Y-%m-%d %H-%M-%S $fileName
Datum und Uhrzeit vor dem Dokumentnamen machen jeden Dateinamen eindeutig.
Profil (Profile)
Beste Qualität (Best quality)
Der Text bleibt als Text im PDF; nur so kann RUNOS Skriptblöcke lesen.
Fortschritt beim Speichern anzeigen
aus
Ordner nach dem Speichern öffnen
aus
Sonst öffnet sich bei jedem Druck ein Explorer-Fenster.
Vorhandene Datei überschreiben
aus
Eine Datei, die RUNOS noch nicht abgeholt hat, darf nicht überschrieben werden.
Dateinamen vor dem Speichern abfragen
aus
Der Druck soll ohne Rückfrage durchlaufen.
Folgenden Befehl nach dem Speichern ausführen
aus
Die Verarbeitung übernimmt RUNOS.
Die Platzhalter im Dateinamen: %Y Jahr, %m Monat, %d Tag, %H Stunde, %M Minute, %S Sekunde, $fileName Name des Dokuments, den das druckende Programm übergibt. Speichern Sie die Einstellungen.
5. Den Workflow darauf ausrichten
Der Pool des File-Triggers ist das Ausgabeverzeichnis aus Schritt 4, der Filter*.pdf:
Der File-Trigger wartet, bis PDF24 die Datei vollständig geschrieben hat, und verschiebt sie dann in seinen Spooler. Der Ordner bleibt so leer, und PDF24 kann jederzeit weiter hineinschreiben.
6. Im Programm den Drucker wählen und testen
Wählen Sie im ERP (bzw. im Programm, aus dem gedruckt wird) den Drucker RUNOS, zum Beispiel für das Rechnungsformular.
Öffnen Sie den Workflow in RUNOS und klicken Sie auf Lauschen.
Drucken Sie einen Beleg. Nach wenigen Sekunden erscheint im Protokoll TriggerFired mit dem Dateinamen und, wenn vorhanden, den gefundenen Skriptblöcken.
Wie Sie daraus eine geprüfte XRechnung machen, zeigt das XRechnung-Beispiel.
Wenn es nicht klappt
Problem
Ursache und Lösung
Beim Drucken öffnet sich ein PDF24-Fenster
Für diesen Drucker ist nicht Automatisch speichern eingestellt, oder oben war beim Einstellen ein anderer Drucker gewählt.
Es kommt keine Datei im Ordner an
Das Ausgabeverzeichnis stimmt nicht mit dem Pool überein, oder die Einstellung gilt nur für einen anderen Windows-Benutzer (siehe Schritt 2).
Die Datei kommt an, aber der Workflow startet nicht
Läuft der Workflow (Liste zeigt Stoppen)? Passt der Filter?
Skriptblöcke werden nicht gefunden
Das PDF enthält keinen Text. Profil Beste Qualität wählen; das Formular darf die Zeilen nicht als Grafik drucken.