Regelwerk
Mit dem Regelwerk können vielfältige Automatisierungen erstellt werden. Einstellungen bei denen das Regelwerk verfügbar ist sind meistens mit f(x) gekennzeichnet. Die Textfelder bei Stempelvorlagen und Emailvorlagen sind nicht gekennzeichnet, können aber auch Regelwerkfunktionen verwenden. Regelwerkfunktionen innerhalb von Text müssen in geschweifte Klammern (normaler Text {beispielfunktion(a, b)} weiterer Text) gesetzt werden.
Bei Entscheidungsknoten im Workflow dürfen keine geschweiften Klammern verwendet werden, sondern nur ein reiner Regelwerkausdruck, der eine Wahr- oder Falschwert zurückgibt.
Allgemein
Variablenname | Beschreibung | Beispiel |
---|---|---|
now.year | Jahr | 2024 |
now.monthNum | Monat (Nummer) | 01 |
now.monthName | Monatsname | Januar |
now.monthShort | Monatsname (Abk). | Jan |
now.nmonthShort | Nummerierter Monatsname (Abk.) | 01-Jan |
now.nmonthName | Nummerierter Monatsname | 01-Januar |
now.defaultDateFormat | Formattiertes Datum | 31.01.2024 |
now.isoFormat | ISO-Datum | 2024-01-31 |
workflowRun.executingUser.name | Name des ausführenden Benutzers | Administrator |
workflowRun.workflow.name | Name des aktuellen Workflows | Rechnungsworkflow |
workflowRun.currentNode.name | Name des aktuellen Workflow-Knotenpunktes | sachliche Prüfung |
Dokument
Variablenname | Beschreibung | Beispiel |
---|---|---|
document.name | Dokumentenname | VRE1076068.pdf |
docbox.documentLink | Link zum Dokument | cloud.docbox.eu/document |
Textfunktionen
Funktion | Beschreibung |
---|---|
+ | Texte aneinanderhängen "Rechnung" + ".pdf" => Rechnung.pdf |
left(str,n) | Erste n Zeichen left("VRE1076068.pdf", 3) => VRE |
right(str,n) | Letzte n Zeichen right("VRE1076068.pdf", 3) => pdf |
substring(str,pos,n) | n Zeichen von str ab Position pos Falls n<0: Länge minus Betrag von n substring("VRE1076068.pdf", 3, 7) => 1076068 substring("VRE1076068.pdf", 3, -1) => 1076068.pdf |
replace(str, subject, replace) (ab 7.6.1) | Ersetzt jedes subject innerhalb von str mit replace. Kann verwendet werden um Leerzeichen zu entfernen. replace("+49 9924 943240", " ", "") => +499924943240 |
regexReplace(str, regex, replace) (ab 7.6.1) | Ersetzt den regulären Austruck regex innerhalb von str mit der replace Formel. Mit \nummer können gefundene Capture groups verwendet werden. regexReplace("Ihr Auftrag intern123 ist eingegangen", "intern([0-9]+)", "AU\1") => Ihr Auftrag AU123 ist eingegangen |
regex(str,pattern) | Teilstring anhand eines regulären Ausdrucks (PCRE) regex("VRE1076068.pdf", "[0-9]+") => 1076068 |
length(str) | Liefert die Anzahl Zeichen eines Strings length("VRE1076068.pdf") => 14 |
indexOf(str,substr,from) | Liefert die erste Position eines Substrings oder -1 falls nicht enthalten, beginnend ab der Position from indexOf("ab cd ef", "cd", 0) => 3 indexOf("ab cd ef", "cd", 4) => -1 |
contains(str,substr) | Liefert einen Wahrheitswert (Boolean)zurück, ob ein Substring enthalten ist contains("ab cd ef", "cd") => true contains("ab cd ef", "gh") => false |
toLower(str) | Wandelt den Text in Kleinbuchstaben um toLower("Max.Mustermann@example.com") => max.mustermann@example.com toLower("max.mustermann@example.com") => max.mustermann@example.com |
baseName(dateiname) | Liefert den Dateinamen ohne Endung (sofern vorhanden) baseName("VRE1076068.pdf") => VRE1076068 baseName("Rechnung") => Rechnung |
fileExtension(dateiname) | Liefert die Dateiendung eines Dateinamen (Leerstring wenn nicht vorhanden) fileExtension("VRE1076068.pdf") => pdf fileExtension("Rechnung") => |
appendToFilename(dateiname, str) | Hängt einen Text an den Dateinamen an und behält die Dateiendung bei appendToFilename("VRE1076068.pdf", "_geprüft") => VRE1076068_geprüft.pdf |
Zahlenfunktionen
Die gängigen Rechenoperationen wie Addition(+), Subtraktion(-), Multiplikation(*) und Division(/) können normal verwendet werden. Um Operationen zu gruppieren können Klammern verwendet werden.
Beispiele:
10 / 5 => 2 1 + 2 * 3 => 7 (1 + 2) * 3 => 9
Datumsfunktionen
Funktion | Beschreibung |
---|---|
dateFormat(date, format) | Formattiert ein Datum, optional mit Uhrzeit, gemäß dem angegebenen Format. Für das Format können Ausdrücke aus der untenstehenden Tabelle verwendet werden. dateFormat("2024-01-30", "dd.MM.yyyy") => 30.01.2024 |
now() | Liefert das aktuelle Datum |
dateAdd(date, count, unit) | Ermöglich Datums-/Zeitberechnungen indem count mal die Zeit unit hinzugefügt wird. Es sind auch negative Werte für count möglich. Für unit sind die Werte aus der untenstehenden Tabelle zulässig dateAdd("2024-01-30", 2, "days") => 2024-02-01 dateAdd("2024-01-30", -1, "months") => 2023-12-30 |
Datumsformat Optionen
Ausdruck | Ergebnis |
---|---|
d | Tag ohne führende Null (1 bis 31) |
dd | Tag mit führender Null (01 bis 31) |
ddd | Abgekürzter Wochentag (Mon bis Son) |
dddd | Ausgeschriebener Wochentag (Montag bis Sonntag) |
M | Monat ohne führende Null (1 bis 12) |
MM | Monat mit führender Null (01 bis 12) |
MMM | Abgekürzter Monatsname (Jan bis Dez) |
MMMM | Ausgeschriebenr Monatsname (Januar bis Dezember) |
yy | 2 stelliges Jahr (00 bis 99) |
yyyy | Jahr |
h | Stunde ohne führende Null (0 bis 23) |
hh | Stunde mit führender Null (00 bis 23) |
m | Minuten ohne führende Null (0 bis 59) |
mm | Minuten mit führender Null (00 bis 59) |
s | Sekunden ohne führende Null (0 bis 59) |
ss | Sekunden mit führender Null (00 bis 59) |
zzz | Millisekunden (000 to 999) |
AP oder A | AM oder PM. Wenn dieser Ausdruck vorkommt, wird das 12h Format aktiviert |
ap oder a | am oder pm. Wenn dieser Ausdruck vorkommt, wird das 12h Format aktiviert |
t | Abkürzung der Zeitzone (beispielsweise CEST) |
tt | Zeitzonenoffset ohne Doppelpunkt (beispielsweise +0200) |
ttt | Zeitzonenoffset mit Doppelpunkt zwischen Stunden und Minuten (beispielsweise +02:00) |
tttt | Name der Zeitzone (beispielsweise Europe/Berlin) |
Zeiteinheiten
unit Parameter | Einheit |
---|---|
d oder days | Tage |
months | Monate |
y oder years | Jahre |
s oder seconds | Sekunden |
minutes | Minuten |
h oder hours | Stunden |
Vergleichsoperatoren
Operator | Beschreibung | Beispiel |
---|---|---|
= | Ist gleich | "Rechnung" = "Rechnung" => true |
!= | Ungleich | 1 != 5 => true |
< | Kleiner als | 1 < 5 => true |
<= | Kleiner oder gleich | "aaa" <= "aab" => true |
> | Größer als | "aaa" > "aab" => false |
>= | Größer oder gleich | 5 >= 5 => true |
or | Logische oder Verknüpfung | 15 < 10 or 15 > 100 => false |
and | Logische und Verknüpfung | 15 >= 10 and 15 <= 100 => true |
Weiterhin können die Konstanten true und false verwendet werden.
Sonstige Funktionen
Funktion | Beschreibung |
---|---|
if(cond,then,else) | Liefert den Wert von then wenn cond wahr ist und den Wert von else wenn nicht. if(1 = 1, "Ja", "Nein") => Ja if(0 > 2, 0, 2) => 2 |
folderExists(path) | Prüft ob ein Ordner existiert folderExists("INBOX/Administrator") => true folderExists("Mandant/nicht vorhandener Ordner") => false |
Erweiterte Beispiele
Nachfolgend einige Funktionsbeispiele. (Vollständigkeit ohne Gewähr)
Auftragsnummer aus dem Emailbetreff extrahieren
Es kommen Emails an bei denen der Betreff den Text "Auftrag 123456" mit einer 6 stelligen Aufragsnummer enthält. Diese Auftragsnummer soll in ein Metafeld gespeichert werden. Dazu fügen wir in einem Worklfow einen Knotenpunkt mit der Aktion "Metadaten extrahieren" ein. Bei Metafeld wird das Zielmetafeld ausgewählt und in Wert wird folgende Regel eingetragen: {right(regex(meta.Subject, "Auftrag [0-9]{6}"), 6)}
Erklärung: Ein Regulärer Ausdruck um 6 Ziffern von 1 bis 9 zu erkennen ist "[0-9]{6}". Damit wir nicht eine zufällige andere 6 stellige Zahlen erkennen stellen wir noch den Text Auftrag davor. Damit dieser Text nicht in das Metafeld übernommen wird verwenden wir mit der Funktion right(x, 6) nur die letzten 6 Zeichen.
Kunden über Fortschritt eines Vorgangs benachrichtigen
Wenn ein Dokument einen bestimmten Workflowstatus erreicht soll der Kunde informiert werden, dass der Auftrag in den nächsten 2 Tagen fertiggestellt ist. Dazu erstellt man eine Emailvorlage mit folgendem Text:
Hallo {meta.Anrede} {meta.Kundenname},
Ihr Auftrag wird bearbeitet und ist voraussichtlich am {formatDate(dateAdd(now(), 2, "days"), "dd.MM.yyyy")} abgeschlossen.
Erklärung: Mit dateAdd rechnen wir 2 Tage zum aktuellen Datum (now()) hinzu. Das Ergebnis wird dann mit der formatDate Methode im deutschen Datumsformat ausgegeben.
Skontodatum abhängig von Zahlungsart befüllen
Das Feld Fälligkeitsdatum (m. Skonto 1) soll bei einer SEPA Lastschrift mit dem Rechnungsdatum befüllt werden, bei einer Überweisung mit einem Datum 7 Tage nach dem Rechnungsdatum und sonst leer gelassen werden. Für die Zahlart gibt es ein Auswahl-Metafeld "zahlart" mit den Werten "SEPA", "Überweisung" und "Sonstige". Im Workflow gibt es dann einen Knotenpunkt mit der Aktion "Metadaten extrahieren". Als Zielmetafeld muss Fälligkeitsdatum (m. Skonto 1) gewählt werden und als Wert die Regel {if(meta.zahlart = "SEPA", meta.invoiceDate, if(meta.zahlart = "Überweisung", dateAdd(meta.invoiceDate, 7, "days"), null))}
Erklärung: Mit dem ersten if(meta.zahlart = "SEPA", meta.invoiceDate, sonst) behandeln wir den Fall einer SEPA Lastschrift. Im Sonst Parameter wird dann mit einem weitern if(meta.zahlart = "Überweisung", datum bei Überweisung, null) zwischen Überweisung und Sonstige unterschieden. Bei Überweisung wird die dateAdd(meta.invoiceDate, 7, "days") Funktion verwendet um 7 Tage zum Rechnungsdatum hinzuzuaddieren. Und für den nicht explizit genannten Fall von Sonstige wird null (leeres Metafeld) verwendet.
Dokument in Auftragsordner archivieren
In einem Workflow wird das Metafeld Auftragsnummer befüllt. Am Ende sollte das Dokument in einen Auftragsordner archiviert werden.
Dazu erstellen wir einen Knoten "automatische Archivierung" und stellen eine Verschiebeaktion mit dem Ziel "Mandant/Aufträge/{meta.Auftragsnummer}" ein.
Dokument in Auftragsordner archivieren mit manueller Prüfung bei neuen Aufträgen
Eine mögliche Erweiterung des vorherigen Beispiels ist eine Prüfung ob es bereits einen Auftragsordner gibt. Beispielsweise weil für für eine Neuanlage der Bearbeiter noch weitere manuelle Arbeiten zu erledigen hat.
Dazu setzen wir vor den Knotenpunkt "automatische Archivierung" einen Entscheidungsknoten. Für den Pfeil zur automatischen Archivierung verwenden wir als Bedingung den Ausdruck folderExists("Mandant/Aufträge/" + meta.Auftragsnummer). Den Pfeil für die Standardbedingung verbinden wir mit einem neu angelegten Knoten "manuelle Überprüfung". Hier können dann die notwendigen Schritte für die manuellen Arbeiten und Prüfungen hinterlegt werden. Nach der manuellen Überprüfung geht es dann entweder zur "automatischen Archivierung". Man kann auch einen weiterer Knoten mit der Aktion "archivieren mit Dialog" hinzugefügen, für den Fall, dass die Auftragsnummer nur falsch ausgefüllt wurde.
Funktionen testen
Der Dialog Funktionen testen ist eine einfache Möglichkeit alle Regelwerk Funktionen live zu testen. Er kann auf der Seite Module / Metafelder über das Käfersymbol in der Toolbar aufgerufen werden. In das Textfeld Funktionstext wird dabei die zu testende Funktion eingegeben und nach einem Klick auf ausführen erscheint das Ergebnis. Um Dokumentbezogene Funktionen oder Metafelder zu verwenden muss im Feld Dokumenten Id die Id des zu testenden Dokumentes eingetragen werden.