!--a11y-->
Erweiterte benutzerdefinierte
Funktionen 
Erweiterte benutzerdefinierte Funktionen können nicht nur auf einzelne Feldwerte zugreifen. Statt dessen können Sie einen kompletten Kontext oder eine ganze Queue eines Feldes vor dem Aufruf Ihrer Funktion als Array einlesen. Dadurch können Sie zum Beispiel Berechnungen auf allen Feldwerten eines Kontexts durchführen und selbst Kontexte mit Hilfe eingefügten Kontextwechseln weiter aufteilen.
Beim Parsen einer Instanz zur Ausgangsstruktur arbeitet ein Message-Mapping mit Queues:

Pro Hierarchie-Ebene gibt es eine Queue. Eine Queue kann folgende Einträge haben:
Einträge von Queues
Wert |
Bedeutung |
(leerer String) |
Es handelt sich um eine Queue eines Strukturfeldes. Für jedes Auftreten des Feldes in der XML-Instanz gibt es einen Eintrag mit einem leeren String in der Queue. Im Beispiel oben gibt es für <A /> und <root /> eine solche Queue. |
(String) |
Wert eines Wertefeldes |
ResultList.CC |
Konstante, die einen Kontextwechsel anzeigt |
ResultList.SUPPRESS |
Konstante, die bewirkt, dass ein Feld und seine Unterknoten bei der Prozessierung ignoriert werden |
(leerer Kontext) |
Kontext, der gar keine Werte enthält (siehe Grafik unten). |
Durch Hinzufügen oder Wegnehmen von Kontextwechseln können Sie spezielle Strukturabbildungen realisieren. Die Standardfunktionen SplitByValue und removeContexts() arbeiten nach diesem Prinzip.
Siehe auch: Strukturabbildungen durch Setzen des Kontexts.
Bei geschachtelten Strukturen gibt es eine wichtige Grundregel: Die Anzahl der Kontexte einer Queue muss gleich der Anzahl der Werte (leeren Strings) der übergeordneten Queue sein:

Erweiterte benutzerdefinierte Funktionen können entweder nur einen Kontext in die Eingabe-Arrays einlesen oder die kompletten Queues. Kreuzen Sie dazu entweder das Ankreuzfeld Gesamte Queue im Cache speichern im Funktions-Editor an oder nicht.
Arbeiten mit Kontexten oder Queues
Information im Cache |
Implikationen |
Kontext |
Erweiterte Funktionen, die nur einen Kontext einlesen, haben keine identifizierbaren Kontextwechsel. Sie können natürlich Kontextwechsel in der Ergebnisliste einfügen. |
Queue |
Da hier ein oder mehrere Queues komplett eingelesen werden, ist diese Variante speicherintensiver und für sehr große Messages ungeeignet. |
Die Eingabe-Arrays enthalten nicht die Kontextwechsel am Beginn und am Anfang des Kontextes (oder der Queue). Diese Kontextwechsel sind implizit immer vorhanden können über die benutzerdefinierte Funktion weder identifiziert noch gelöscht werden.
...
1. Legen Sie eine erweiterte benutzerdefinierte Funktion an, siehe Benutzerdefinierte Funktionen.
2. Verarbeiten Sie im Java-Quelltext die Werte aus den Eingabe-Arrays und bauen Sie mit Hilfe des Objekts ResultList eine Ergebnisliste auf.