MapExampleTwoTablesToNestedTables
Dieses Beispiel ist ähnlich wie das Beispiel MapExampleTwoTablesToFlatStructure: Die Ausgangsstruktur besteht aus zwei Rekords, in denen jeweils der Name und die Telefonnummer einer Person gespeichert ist. Als zusätzliche Schwierigkeit kommt hinzu, dass die Zielstruktur nicht flach ist, sondern innerhalb eines Person-Rekords alle Telefonnummern einer Person gespeichert werden sollen.

· Die Anzahl der Person-Rekords in der Zielstruktur muss gleich der Anzahl der Person-Rekords der Ausgangsstruktur sein. Es reicht also die Zuweisung /ns:MapExampleNestedTablesMessage/Person = /ns:MapExampleTwoTablesMessage/Persons/Person.
· Die Werte für Id und Name in der Zielstruktur können Sie durch einfache Zuordnung aus der Ausgangsstruktur übernehmen.
· Um die Liste der Telefonnummern übernehmen zu können, müssen Sie für jede Id eine solche parat haben. Daher verfahren Sie wie im Beispiel MapExampleTwoTablesToFlatStructure mit einer erweiterten benutzerdefinierten Funktion getPhonesById:

Die Funktion arbeitet folgendermaßen:
...
1. Die Funktion erwartet PersonId und Number im Telephones-Kontext, so dass alle Ids und Telefonnummern innerhalb dieses Kontexts übergeben werden.
2. Die Grundidee ist, zu jeder Id eine Liste der zur Id gehörenden Telefonnummern in einem Container-Objekt zu speichern, um sie bei späteren Aufrufen wieder auslesen zu können. Dazu greift die Funktion am Anfang auf eine Map phones zu. Gibt es diese Map noch nicht, erzeugt die Funktion eine neue HashMap. Dann erzeugt die Funktion pro PersonId (b[i]) eine Liste (beim ersten Mal) beziehungsweise holt sich eine bereits existierende Liste für PersonId (b[i]) und fügt die zugehörige Telefonnummer (c[i]) ein. Die Map mit den Telefonnummerlisten wird an das Container-Objekt phones übergeben, so dass sie in weiteren Aufrufen der gleichen Funktion zur Verfügung steht.
3. Schließlich gibt die Funktion die Telefonliste zum Eingabeargument Id (a[0]) über das ResultList-Objekt zurück.
Erweiterte benutzerdefinierte Funktion getPhonesById
public void getPhonesById(String[] a, String[] b, String[] c, ResultList result, Container container){ |