Wissenswertes über Bedingungen
Sie haben an mehreren Stellen die Möglichkeit, eigene Bedingungen zu definieren, die dynamisch auf Werte des Belegs reagieren. Beispiele hierfür sind die Bearbeiterfindung für einen Schritt oder die Entscheidung, welcher Schritt als nächstes gewählt wird. Diese Bedingungen werden in der Ausdruckssprache Urkel spezifiziert.
Sie können Urkel-Ausdrücke an verschiedenen Stellen verwenden. Je nach Anwendungsfall stehen Ihnen im Kontext verschiedene Objekte zur Verfügung. Dieser Abschnitt erläutert die Funktionsweise der verschiedenen Einsprungpunkte sowie die jeweils verfügbaren Objekte.
Bearbeiterfinder
Urkel-Ausdrücke in Bearbeiterfindern werden für jeden Benutzer und jede Gruppe einmal aufgerufen. Gibt ein Ausdruck für einen Benutzer oder eine Gruppe true zurück, so wird der Benutzer bzw. die Gruppe in das Ergebnis aufgenommen.
In Bearbeiterfindern stellt die Software die folgenden Objekte zur Verfügung: voucher, user, group, step.
Bedingungen
Jede Verbindung zwischen zwei Schritten hat eine als Urkel-Ausdruck angegebene Bedingung.
In der Bedingung stellt die Software die folgenden Objekte zur Verfügung: voucher, step.
Wissenswertes zu Syntax, Semantik und Datentypen
Jeder Urkel-Ausdruck hat einen Datentyp. Die verfügbaren Datentypen sind:
Boolean
String
Number (Dezimalzahl)
Liste
Regulärer Ausdruck
Die verwendeten Ausdrücke müssen auf oberster Ebene vom Typ Boolean sein.
Einfache Ausdrücke vom Typ Boolean
Die einfachsten Ausdrücke vom Typ Boolean sind die Literale true und false. Ausdrücke vom Typ Boolean können wiederum durch die Operatoren AND und OR verknüpft werden. Dabei gelten folgende Regeln:
true AND false ergibt false
false OR true ergibt true
Über ein vorangestelltes NOT kann ein Ausdruck vom Typ Boolean negiert werden. NOT true ergibt false.
Vergleiche zwischen zwei Ausdrücken
Ausdrücke anderer Typen können miteinander verglichen werden. Hierzu stehen die Operatoren =, !=, <, >, <=, >= zur Verfügung. Beide Operanden müssen den gleichen Typ haben. Das Ergebnis eines Vergleichs ist Boolean. Zum Beispiel:
"abc" = "def" ergibt false
5 > 7 ergibt false
"def" != "def" ergibt false
Operationen auf Listen
Um mehrere Werte darstellen zu können, bietet Urkel einen eingebauten Listentypen. Listen sind sortiert und können Werte beliebiger Typen aufnehmen. Einige Eigenschaften von Belegen oder Benutzern sind vom Typ Liste. In Urkel-Ausdrücken können Listen auch direkt spezifiziert werden. Der Ausdruck (true, false) ergibt eine Liste mit den Werten true und false. Der Ausdruck (true, 1 < 2, 3) ergibt eine Liste mit den Werten true, true und 3.
Hat eine Liste nur Werte vom Typ Boolean als Elemente, so können die Operatoren ALL und ANY angewandt werden. ALL l1 ergibt true, wenn die Liste l1 nur wahre Werte enthält. ANY l1 ergibt true, wenn die Liste l1 mindestens einen wahren Wert enthält.
Die Länge einer Liste l1 kann über len(l1) ermittelt werden. Das Ergebnis ist vom Typ Number.
Mithilfe der Operatoren IN und NOT IN kann geprüft werden, ob ein Wert in einer Liste enthalten oder nicht enthalten ist. Zum Beispiel:
1 IN (1, 2, 3) ergibt true
1 < 2 IN (3 > 4, 5 > 6, 7 > 8) ergibt false
Strings und Reguläre Ausdrücke
Der Typ String kann Zeichenketten aufnehmen. Zeichenketten können über die üblichen Vergleichsoperatoren verglichen werden. Zusätzlich können Strings mithilfe des Operators =~ durch einen regulären Ausdruck geprüft werden. Der reguläre Ausdruck muss dabei auf der linken Seite stehen. Zum Beispiel:
/^(Freigabe|Buchhaltung) \d+$/ =~ "Freigabe 1" ergibt true
/\d{4}/ =~ "123" ergibt false
Über die Syntax #{} können Sie Ausdrücke in String-Literale und reguläre Ausdrücke einfügen. Zum Beispiel:
"Buchung #{voucher.posting_text}" ergibt Buchung Telekom, wenn der Buchungstext Telekom ist.
/^Freigeber_#{voucher.company.nr}$/ =~ "Freigeber_23" ergibt true, wenn die Mandantennummer 23 ist.
Zugriff auf die Eigenschaften des Belegs oder Benutzers
Alle Urkel-Ausdrücke werden in einem Kontext ausgeführt, in dem bestimmte Objekte, wie zum Beispiel der aktuelle Benutzer oder Beleg, zur Verfügung stehen. Aus Urkel-Ausdrücken heraus können Sie auf Eigenschaften dieser Objekte über die Punkt-Notation zugreifen:
voucher.posting_text ergibt die Eigenschaft Buchungstext des Objektes Beleg.
voucher.company.nr ergibt die Eigenschaft Nr der Eigenschaft Mandant des Objektes Beleg.
Welche Objekte im Kontext zur Verfügung stehen, variiert je nach Anwendungsfall.
Wissenswertes zu Objekten und Feldern
In diesem Abschnitt finden Sie eine Erläuterung aller in Urkel-Ausdrücken zur Verfügung stehenden Objekte und der dazugehörigen Eigenschaften. Welche Objekte tatsächlich zur Verfügung stehen, variiert je nach Anwendungsfall.
Beleg (voucher)
Eigenschaft | Typ | Beschreibung |
---|---|---|
doc_id | String | Die ID des Dokuments im Repository. |
company.nr | String | Nummer des Mandanten. |
company.name | String | Name des Mandanten. |
vendor.nr | String | Nummer des Kreditors. |
vendor.name | String | Name des Kreditors. |
vendor.email | String | E-Mail-Adresse des Kreditors. |
net_amount | Number | Nettobetrag der Rechnung in Cent. |
net_amount_lcy | Number | Nettobetrag der Rechnung in Cent in Hauswährung. |
gross_amount | Number | Bruttobetrag der Rechnung in Cent. |
gross_amount_lcy | Number | Bruttobetrag der Rechnung in Cent in Hauswährung. |
pay_amount | Number | Zahlbetrag der Rechnung in Cent. |
pay_amount_lcy | Number | Zahlbetrag der Rechnung in Cent in Hauswährung. |
vat_amount | Number | MwSt der Rechnung in Cent. |
vat_amount_lcy | Number | MwSt der Rechnung in Cent in Hauswährung. |
currency.id | String | ID der Währung. |
currency.code | String | Code der Währung (z.B. EUR). |
currency.name | String | Name der Währung. |
barcode | String | Barcode. |
internal_number | String | Interne Belegnummer. |
external_number | String | Externe Belegnummer. |
document_date | String | Belegdatum. |
payment_date | String | Zahlungsdatum. |
posting_period | String | Buchungsperiode. |
document_type.id | String | ID der Belegart. |
document_type.name | String | Name der Belegart. |
posting_text | String | Buchungstext. |
customN mit N zwischen 1 und 20 | String | Die kundenspezifischen Felder. |
amount_allocated? (mode) | Boolean | Ist der Kopfbetrag vollständig auf die Positionen aufgeteilt? mode gibt an, welche Konstellation überprüft wird:
|
amount_allocated_tolerance? (mode, tolerance) | Boolean | Ist der Kopfbetrag auf die Positionen aufgeteilt, mit Abweichungstoleranz? Diese Funktion ist hilfreich, wenn Netto- oder Bruttobetrag exakt aufgeteilt werden sollen, der jeweils andere Betrag aber aufgrund von Rundungsdifferenzen minimal abweichen darf. mode gibt an, welche Konstellation überprüft wird. tolerance gibt die Toleranz in Cent an.
|
verified? | Boolean | Sind alle Belegzeilen sachlich richtig gezeichnet? Hinweis: Eine Belegzeile, die bestellbezogen richtig ist und damit als sachlich richtig gilt, wird von dieser Bedingung nicht akzeptiert. Belegzeilen müssen von einem Benutzer als sachlich richtig markiert worden sein. |
matches_po? | Boolean | Passen alle Belegzeilen zu ihren jeweiligen Bestellzeilen? Hinweis: Eine Belegzeile, die von einem Benutzer als sachlich richtig markiert wurde, wird von dieser Bedingung nicht akzeptiert. Die Belegzeile muss über den Bestelldatenabgleich als bestellbezogen richtig gewertet worden sein. |
matches_po_or_verified? | Boolean | Passen alle Belegzeilen entweder zur jeweiligen Bestellzeile oder sind sachlich richtig gezeichnet? |
verifiers | Liste von Strings | Die Liste der Namen aller Benutzer und Gruppen, die als sachliche Prüfer eingetragen sind. |
outstanding_verifiers | Liste von Strings | Die Liste der Namen aller Benutzer und Gruppen, die als sachliche Prüfer für Positionen eingetragen sind, die noch nicht sachlich richtig gezeichnet wurden. |
has_purchase_orders? | Boolean | Hat der Beleg Bestellbezug? |
has_goods_receipts? | Boolean | Befinden sich Wareneingänge auf dem Beleg? |
<eigenschaft>.present? mit <eigenschaft> als Platzhalter für eine Eigenschaft des Beleg-Objects | Boolean | Ist die Eigenschaft gefüllt? |
<eigenschaft>.blank? mit <eigenschaft> als Platzhalter für eine Eigenschaft des Beleg-Objekts | Boolean | Ist die Eigenschaft leer? |
Benutzer (user)
Eigenschaft | Typ | Beschreibung |
---|---|---|
name | String | Der Name des Benutzers oder der Gruppe. |
String | Die E-Mail-Adresse des Benutzers. Ist für Gruppen nicht definiert. | |
group_ids | Liste von Strings | Liste der IDs aller Gruppen, in denen der Benutzer Mitglied ist. Ist für Gruppen leer. |
group_names | Liste von Strings | Liste der Namen aller Gruppen, in denen der Benutzer Mitglied ist. Ist für Gruppen leer. |
id | String | Die ID des Benutzers oder der Gruppe aus dem Quellsystem (zum Beispiel d.ecs identity provider). |
type | String | Entweder user oder group. |
Schritt (step)
Eigenschaft | Typ | Beschreibung |
---|---|---|
uid | String | Die interne ID des Schrittes. |
title | String | Der übersetzte Titel des Schrittes. |
original_title | String | Der Titel des Schrittes, wenn keine Übersetzung vorhanden ist. |