Text aufteilen

Wertauflöser - Kurzfassung

Zweck: Teilt den als Eingabewert anliegenden Text an jeder Fundstelle für den optional parametrierbaren Separator (Zeichenfolge oder ein Regulärer Ausdruck) und gibt die so gebildeten Teilzeichenfolgen als Liste (String[]) zurück.

images/download/attachments/62867074/image2023-1-3_14-14-52-version-1-modificationdate-1672751692875-api-v2.png

Der Text aufteilen-Wertauflöser teilt den als Eingabewert anliegenden Text an jeder Fundstelle für den optional parametrierbaren Separator (Zeichenfolge oder ein Regulärer Ausdruck) und gibt die so gebildeten Teilzeichenfolgen als Liste (String[]) zurück.

Der Separator kann wahlweise per Direkteingabe als statischer Text oder über Wertauflöser definiert werden.

Als Separator gewertete Zeichen(folgen) erscheinen nicht als Bestandteil der Teilzeichenfolgen im Rückgabewert.

Insgesamt sind folgende Sonderfälle zu beachten:

  • Liegt als Eingabewert "Kein Wert" ($null) vor, lautet auch der Rückgabewert "Kein Wert" ($null).

  • Liegt ein Eingabewert vor, der kein Text (String) ist, dann wird das String-Abbild des Eingabewerts verarbeitet.

  • Der Eingabewert wird nach jedem Zeichen geteilt, wenn eine der folgenden Bedingungen erfüllt ist:

    • Als Separator wurde "Kein Wert" ($null) angegeben.

    • Als Separator wurde eine leere Zeichenfolge ("") angegeben.

    • Die Wert-Konfiguration für den Parameter Separator liefert zur Laufzeit "Kein Wert" ($null) oder eine leere Zeichenfolge ("").

  • Werden alle Zeichen aus dem Eingabewert als Separator interpretiert liefert der Wertauflöser eine leere Liste ([]) und nicht etwa eine Liste mit zwei leeren Zeichenfolgen.

WARNUNG◄ Falls die Option Regulärer Ausdruck? ausgewählt ist, können bei der Interpretation des im Parameter Separator definierten Regulären Ausdrucks Syntax-Fehler auftreten, die per Standard als ProcessException behandelt werden.

Konfiguration

Als Eingabewert wird der Text erwartet, der aufgeteilt werden soll. Sofern es sich beim Eingabewert nicht um Text (String) handelt, wird das String-Abbild des Eingabewerts verwendet.

Parameter

Beschreibung

Beispiel

Separator


Per Standard wird für den Separator ein Textfeld für die Direkteingabe von einem oder mehreren Textzeichen angeboten.

Das Beispiel rechts spezifiziert als Separator eine Zeichenfolge mit drei Zeichen " - " (Leerzeichen, Minuszeichen, Leerzeichen), die im Screenshot selektiert wurde, um die Leerzeichen hervorzuheben.

Ein Eingabewert wie "New York - Rio - Tokio" wird durch diesen Separator in eine Liste von drei Teilzeichenfolgen ("New York", "Rio", "Tokio") umgewandelt.

Direkteingabe:

images/download/attachments/62867074/image2023-1-3_16-14-48-version-1-modificationdate-1672758888082-api-v2.png

Ein Klick auf den kleinen grauen Pfeil links unten wechselt von der Direkteingabe zur Wert-Konfiguration, sodass ein Wertauflöser oder eine Kette von Wertauflösern konfiguriert werden kann, um den Separator zur Laufzeit dynamisch zuzuweisen.

Im Beispiel rechts unten wird ein Wert aus Sprachverwaltung-Wertauflöser verwendet, der sich auf das Bundle lobsterui und die Resource thousandsSeparator. Offenbar soll hier das als Lokalisierung (in der Sprachverwaltung bzw. Firmenspezifische Sprachanpassungen) definierte "Tausendertrennzeichen" für die Aktuelle Sprache als Separator herangezogen werden.

Ein Eingabewert wie "12.345.678" würde in einer Sitzung in der Sprache "Deutsch" (mit Standard-Lokalisierung) in drei Teilzeichenfolgen mit Zifferngruppen ("12","345","678") geteilt.

Um dasselbe Ergebnis in einer Sitzung mit der Sprache "Englisch" (mit Standard-Lokalisierung) zu erzielen, müsste der Eingabewert "12,345,678" lauten.

Wert-Konfiugration: (direkt nach dem Umschalte, noch ohne Konfiguration)

images/download/attachments/62867074/image2023-1-3_16-48-2-version-1-modificationdate-1672760882678-api-v2.png

Beispiel:

images/download/attachments/62867074/image2023-1-3_17-10-47-version-1-modificationdate-1672762247850-api-v2.png

Regulärer Ausdruck?

Solange die Option Regulärer Ausdruck? abgewählt ist (Standard), werden Eingaben bzw. aufgelöste Zeichenfolgen für den Parameter Separator als Klartext interpretiert, wie in den Beispielen oben.

Wird die Option Regulärer Ausdruck? ausgewählt, dann werden Eingaben bzw. aufgelöste Zeichenfolgen für den Parameter Separator als Regulärer Ausdruck interpretiert. Sofern im Eingabewert Übereinstimmungen (Matches) für den parametrierten Ausdruck gefunden werden, wird der Eingabewert an der jeweiligen Fundstelle geteilt. Die als Separator gewerteten Abschnitte sind in den zurückgegebenen Teilzeichenfolgen nicht enthalten.

Beispiel:

images/download/attachments/62867074/image2023-1-3_17-25-43-version-1-modificationdate-1672763143899-api-v2.png

Der durch statische Direkteingabe definierte Reguläre Ausdruck [,.'\s] qualifiziert eine Reihe von Trennzeichen, die gleichberechtigt als Separator wirken sollen.

Die Eingabewerte wie "12.345.678" und "12,345,678" (s. vorheriges Beispiel) oder auch "12 345 678" und "12'345'678" werden dadurch in die immer selben drei Zifferngruppen geteilt.

ANMERKUNG◄ Da die Zeichenklasse \s alle Whitespace-Zeichen (nicht nur das Leerzeichen) abdeckt, würde z. B. auch ein Zeilenwechsel im Eingabewert als Separator wirken.

HINWEIS◄ Natürlich kann die Zeichenfolge für den Parameter Separator auch dann per Wert-Konfiguration (s. oben) definiert werden, wenn die Option Regulärer Ausdruck? ausgewählt ist. Der Reguläre Ausdruck kann also zur Laufzeit dynamisch (über Wertauflöser) definiert werden.

Beispiele

Einfacher Anwendungsfall: Listeneinträge aus komma-separiertem Text "parsen"

In einem Textfeld einer Entität soll eine komma-separierte Liste von Kürzeln für Währungen eingetragen werden können, um Währungen aufzulisten, die im Kontext des betreffenden Geschäftsprozess "akzeptiert" werden.

  • Ein Eintrag wie "JPY,USD,EUR" soll z. B. signalisieren, dass Japanische Yen, US-Dollar und Euro "akzeptabel" sind.

Im Kontext einer Ereignisbehandlung soll der eingetragene Text in eine echte Liste von Einzelwerten "aufgelöst" werden, z. B. damit im Kontext einer Schleife aktuelle Umrechnungskurse über ein Profil abgerufen werden können.

Im Parameter Wertauflöser für Einträge der rechts abgebildeten Für jeden Eintrag wiederholen (Schleife) wird der Text aufteilen-Wertauflöser verwendet, um den Text aufzuteilen der hier unmittelbar als Eingabewert für die Schleife und damit auch den Wertauflöser vorliegen soll.

  • Als Separator wird per Direkteingabe das Komma (,) ausgewählt.

  • Die Option Regulärer Ausdruck? wird nicht ausgewählt.

Im Aktionsbock, über den die Schleife iteriert, wird ein Profil aufgerufen, das den tagesaktuellen Umrechnungskurs für die jeweilige Währung (z. B. per Webservice) abrufen soll. Dazu wird der Textschlüssel für die betreffenden Währung als Parameter benötigt. Die weitere Verarbeitung der Kursdaten soll hier keine Rolle spielen.

Laufzeitbeispiel:

Ein Eingabewert wie "JPY,USD,EUR" löst eine Iteration über die aufgelisteten Einzelwerte und damit drei Profilaufrufe aus mit wechselndem Textparameter ("JPY", "USD", "EUR") aus.

ANMERKUNG◄ Der Text aufteilen-Wertauflöser "trimmt" die Teilzeichenfolgen nicht automatisch, so dass ein Eingabewert wie "JPY, USD, EUR" (mit Leerzeichen nach dem Komma) zu Schwierigkeiten führen könnte, sofern nicht im Profilaufruf der Trim-Wertauflöser für den Parameter verwendet wird.

images/download/attachments/62867074/image2023-1-3_18-21-21-version-1-modificationdate-1672766481591-api-v2.png

Die rechtsabgebildete Variante verwendet die Option Regulärer Ausdruck? und den Regulären Ausdruck ",\s*", um den Separator so zu definieren, dass alle direkt auf das Komma folgende Whitespace-Zeichen (Leerzeichen, Zeilenwechsel) als Bestandteil des Trennzeichens interpretiert (und deshalb "eliminiert" bzw. "übersprungen") werden.

Laufzeitbeispiel: Ein Eingabewert wie "JPY,USD, EUR, CHF" liefert in der Iteration die Textschlüssel "JPY", "USD", "EUR" und "CHF" ohne überflüssige Leerzeichen.

ANMERKUNG◄ Leerzeichen am Anfang und am Ende der komma-separierten Liste werden durch diese Vorgehendweise nicht eliminiert!

images/download/attachments/62867074/image2023-1-3_18-49-51-version-1-modificationdate-1672768191404-api-v2.png

Komplexerer Anwendungsfall: Komponenten einer Telefonnummer "auflösen"

Die Struktur einer Telefonnummer in einem Textfeld wird im Format <Ländervorwahl> (<Vorwahl>) <Anschluss>[-<Nebenstelle>] erwartet.

Neben Ziffern sollen die einzelnen Komponenten (<...>) der Telefonnummer auch Leerzeichen sowie mit Rücksicht auf die Ländervorwahl das Pluszeichen (+) enthalten dürfen.

Im Kontext einer Ereignisbehandlung sollen diese Komponenten aufgeteilt und spezifischen Variablen (countryCode, areaCode, line, extension) zugeordnet werden.

Die aufzuteilende Telefonnummer wird als Eingabewert and die rechts abgebildete Für jeden Eintrag wiederholen (Schleife) übergeben. Für den Zugriff innerhalb der Schleife wird sie in die Variable phoneNumber gespeichert.

  • Der Wertauflöser für Einträge definiert hier die Variablennamen für die vier Komponenten als Liste von statischen Textwerten (String[]) über einen Erzeuge Liste-Wertauflöser.

  • Im Aktionsblock für die Iteration erfolgt per Setze Wert-Wertauflöser die Zuweisung an die Variable, deren Name als Bezugsobjekt für die Iteration gilt. Der Objekt-Feld-Wertauflöser im Parameter Name der Variable liefert diesen Namen.

  • Auf der rechten Seite der Zuweisung wird auf die Variable phoneNumber zugegriffen, um durch eine Wertauflöserkette die Komponente für die aktuelle Iterationsstufe auszulesen:

    • Der Text aufteilen-Wertauflöser liefert bei jeder Iteration die Liste aller (vorhandenen) Komponenten. Der Separator [^+\d ] wird als Regulärer Ausdruck interpretiert, der alle Zeichen als Trennzeichen wertet, die nicht (^) Ziffern (\d) oder ausdrücklich im Klammerausdruck angegeben sind (Leerzeichen, +).

    • Aus dem Ergebnis der Aufteilung wird bei jeder Iteration ein anderer Wert gezogen, der im verketteten Listenwert-Wertauflöser über den Bezug zur Schleifen-Variable $index im Parameter Offset identifiziert wird.

    • Der abschließende Trim-Wertauflöser entfernt randständige Leerzeichen für die Komponente. Diese werden im Regulären Ausdruck für den Separator als nicht-trennendes Zeichen qualifiziert, damit die Ziffern einer Komponente gruppiert eingegeben werden können (z. B. 32 16 8).

HINWEIS◄ Das Aufteilen der Komponenten funktioniert nur unter der Annahme einwandfrei, dass die Zeichenfolge in der Variablen phoneNumber keine Komponente im Schema "überspringt" und nur die Nebenstelle am Ende als optionale Angabe gilt.

ANMERKUNG◄ Mit Rücksicht auf die Performance sollte man den Text aufteilen-Wertauflöser vor der Schleife platzieren, um die Liste der Komponenten in eine Variable zu schreiben. Dann muss das Aufteilen nicht bei jeder Iteration wiederholt werden. Mit Rücksicht auf die übersichtlichere Darstellung (rechts) wurde hier darauf verzichtet.

images/download/attachments/62867074/image2023-1-4_9-2-54-version-1-modificationdate-1672819374216-api-v2.png

Laufzeitbeispiel: Mit dem Eingabewert "+49 (89) 12 52 - 3210" werden folgende Komponenten-Variablen gesetzt:

Variable

Wert

countryCode

+49

areaCode

89

line

12 52

extension

3210

Besonderer Anwendungsfall: Komponenten aus dem String-Abbild einer Entität verarbeiten

Falls als Eingabewert für den Text aufteilen-Wertauflöser kein Text vorliegt, wird das String-Abbild des Eingabewerts als aufzuteilender Text verarbeitet.

Für eine Entität wird dabei eine Zeichenfolge mit folgender Struktur ausgegeben:

  • <id>:<entityClass>@<objectId>

Laufzeitbeispiel: (String-Abbild für ein Benutzerkonto mit der ID 1901)

  • 1901:de.lobster.scm.base.security.user.User@510285c7

Um eine Entität z. B. in einer Benachrichtigung für einen Anwender lesbar zu identifizieren, verwendet man in der Regel die ID der Entität (<id>) und die Klasse (<entityClass>) bzw. die Lokalisierung für den Klassennamen. Die ID des Java-Objekts (@<objectId>) spielt dagegen meist keine Rolle.

Das folgende Beispiel zeigt, wie die Komponenten des String-Abbilds einer Entität gewonnen und verwendet werden können, um die Entität (hier: der Benutzer der Session) in einer Benachrichtigung zu identifizieren.

Die abgebildete Ausführen mit-Ereignisaktion definiert über den Parameter Objekt-Wertauflöser als Bezugsobjekt bereits die Liste der Teilzeichenfolgen, die aus dem String-Abbild für die Entität gewonnen wird, die der Benutzer der Session zurückgibt:

  • Der Parameter Separator soll als Regulärer Ausdruck interpretiert werden. Er ist als statischer Text [@:] definiert und klassifiziert die Zeichen @ und : als alternative Trennzeichen.

  • Im Aktionsteil greift eine Hinweis anzeigen-Ereignisaktion auf die Teilzeichenfolgen zu, der der Text aufteilen-Wertauflöser als Liste (String[]) bereitstellt:

    • Im Titel soll die Lokalisierung für den Klassennamen erscheinen. Der Wert aus Sprachverwaltung-Wertauflöser greift dazu über einen Listenwert-Wertauflöser auf die zweite Teilzeichenfolge im Eingabewert (Offset 1) zu, um das Bundle für die Entität zu adressieren, für deren Resource $name die Lokalisierung bezogen werden soll.

    • Die Meldung selbst soll nur die ID der Entität benennen, die als erste Teilzeichenfolge im Eingabewert über einem Listenwert-Wertauflöser mit dem Offset 0 gelesen werden kann.

Laufzeitbeispiele:

images/download/attachments/62867074/image2023-1-4_12-12-56-version-1-modificationdate-1672830776396-api-v2.png

images/download/attachments/62867074/image2023-1-4_12-14-19-version-1-modificationdate-1672830859858-api-v2.png

ANMERKUNG◄ Der Typ des von der Schnittstelle Benutzer der Session zurückgegebenen Kontos könnte natürlich auch über die Variable entityClass ermittelt werden, die das System abhängig vom Bezugsobjekt automatisch befüllt.

images/download/attachments/62867074/image2023-1-4_11-52-0-version-1-modificationdate-1672829520691-api-v2.png