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.

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.

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
document.metamaskDuplicate Duplikat laut Metamaske true oder false

 

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

 

Beispiele

Text auf Stempeln abhängig von Metadaten anzeigen

Man hat eine Checkbox pro Gewerk und möchte auf dem Stempel anzeigen welche Gewerke ausgewählt wurden:

 

Kontrolliert:{if(meta.checkboxElektro, " Elektro", "")}{if(meta.checkboxHeizung, " Heizung", "")}{if(meta.checkboxSanitär, " Sanitär", "")}

Man hat ein optionales Metafeld Vorgangnummer und möchte den Text "Vorgang:" nur anzeigen, falls tatsächlich eine Vorgangnummer eingetragen wurde. Das ist mit folgendem Stempeltext möglich:

 

Abgelehnt
{if(meta.vorgangnummer!="", "Vorgang: ", "")}{meta.vorgangnummer}

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.