Wissenswertes über Bedingungen
Sie können an mehreren Stellen eigene Bedingungen 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 ausgewä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. Dieses Kapitel 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 den Wert true zurück, 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 Listentyp. 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, können Sie die Operatoren ALL und ANY anwenden. 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 können Sie mit len(l1) ermitteln. Das Ergebnis ist vom Typ Number.
Mithilfe der Operatoren IN und NOT IN können Sie prüfen, 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.
Zugreifen 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 Objekts Beleg.
voucher.company.nr ergibt die Eigenschaft Nr der Eigenschaft Mandant des Objekts Beleg.
Welche Objekte im Kontext zur Verfügung stehen, variiert je nach Anwendungsfall.
Wissenswertes zu Objekten und Feldern
In diesem Kapitel 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 | Mehrwertsteuer der Rechnung in Cent |
vat_amount_lcy | Number | Mehrwertsteuer der Rechnung in Cent in Hauswährung |
currency.id | String | ID der Währung |
currency.code | String | Code der Währung (zum Beispiel 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? AnmerkungEine 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 den jeweiligen Bestellzeilen? AnmerkungEine 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 einen Bestellbezug? |
has_goods_receipts? | Boolean | Befinden sich Wareneingänge auf dem Beleg? |
has_surcharges? | Boolean | Befinden sich Zuschläge auf dem Beleg? |
<eigenschaft>.present? mit <eigenschaft> als Platzhalter für eine Eigenschaft des Belegobjekts | Boolean | Ist die Eigenschaft gefüllt? |
<eigenschaft>.blank? mit <eigenschaft> als Platzhalter für eine Eigenschaft des Belegobjekts | 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 Schritts. |
title | String | Der übersetzte Titel des Schritts. |
original_title | String | Der Titel des Schritts, wenn keine Übersetzung vorhanden ist. |