Profil als Unterknoten einhängen in Quellstruktur (Sub-Profil)

Über das Kontextmenü auf einem Knoten oder Feld der Zielstruktur können Sie ein bestehendes Profil (seine Zielstruktur) als Unterknoten in der Quellstruktur einhängen (Substruktur).

Voraussetzungen für ein einzuhängendes Profil (Sub-Profil)


Ein Profil kann eingehängt werden, wenn


Voraussetzungen für ein einhängendes Profil


Ein Profil kann ein anderes Profil einhängen, wenn


  • es nicht die Dokumentenart XML mit dem Parser V4 verwendet.

Sub-Profil einhängen


Ein Profil kann in der Zielstruktur über das Kontextmenü (→ Profil als Unterknoten in Quelle einhängen) jedes beliebigen Feldes und Knotens eingefügt werden. Es erscheint dann ein weiterer Dialog.


images/download/attachments/157876855/1134-version-1-modificationdate-1699500545622-api-v2.png


(1) Wählen Sie das einzuhängende Profil aus.

(2) Geben Sie ein eindeutiges Präfix und einen Knotennamen für die Substruktur an. Hinweis: Das Präfix sorgt dafür, dass alle Feld-/Knoten-Namen in der Quellstruktur eindeutig bleiben, da ja z. B. zwei eingebundene Profile einen gleichen Feld-/Knoten-Namen verwenden könnten. Durch das Präfix unterscheiden sie sich dann hier in der Quellstruktur wieder, weil man z. B. einmal prefix1.fieldname und zum anderen prefix2.fieldname bekommt. Das erlaubt also unter anderem auch das selbe Profil zweimal einzufügen.

(3) Hiermit wird das Profil eingefügt.

Ergebnis


Als Ergebnis wird einerseits auf Ihrem Knoten/Feld in der Zielstruktur die Funktion call sub profile for source tree (a,b,c,d,e,f,g,h) platziert. Die Parameter a, b und h werden automatisch gesetzt (siehe dort).

Zum anderen sehen Sie dann in der Quellstruktur folgende Substruktur.


images/download/attachments/157876855/1135-version-1-modificationdate-1699500545620-api-v2.png


(4) Die Eigenschaften der Knoten und Felder des Sub-Profils sind gesperrt. Sie können diese aber manuell ändern, wenn Sie auf das Schloss klicken, falls sich nur Kleinigkeiten am eingehängten Sub-Profil geändert haben. Ansonsten ist sowieso die Synchronisierung zu verwenden (folgend beschrieben).

(5) Wurden am Sub-Profil Änderungen vorgenommen, dann können Sie diese automatisch synchronisieren über das Kontextmenü des Knotens (hier sub1.generate_random_number) → Synchronisiere mit Profil.

Aufruf des Sub-Profils und Datenfluss


Gefüllt mit Daten wird die Substruktur immer über die Funktion call sub profile for source tree (a,b,c,d,e,f,g,h). Die Daten kommen immer nur aus dem Zielbaum des Sub-Profils und nicht aus dessen Integration Unit, etc.

Sie können Felder und Knoten in der Substruktur löschen, wenn Sie nur eine Teilsicht der Daten benötigen, geliefert werden vom Sub-Profil aber immer alle Daten. Die hierarchische Struktur der Substruktur muss dabei aber erhalten bleiben, damit das Parsen klappt.

Sie können die Substruktur beliebig oft mit Daten füllen durch mehrfachen Aufruf der oben genannten Funktion (an beliebiger Stelle). Als Ergebnis erhalten Sie dann schlicht Mehrfachheiten der Substruktur. Die Substruktur kann auch geleert werden, bevor die Funktion ausgeführt wird. Zudem kann die Funktion die Ergebnis-Daten in einem Cache speichern und diese bei einem erneuten Aufruf verwenden, statt das Sub-Profil erneut aufzurufen. Sehen Sie sich dazu die Beispiel-Profile an. Die Reihenfolge, in der die Substruktur befüllt wird ist so, wie die zugehörige Funktion aufgerufen wird. Wurde ein Sub-Profil über die Funktion in der Zielstruktur noch nicht aufgerufen, dann hat die Substruktur in der Quellstruktur auch noch keine Daten.

Sie können mit der Substruktur mappen, wie Sie es gewohnt sind. Wenn Sie einen Pfad verwenden, dann legen Sie diesen bitte nicht auf sub1.generate_random_number, sondern auf sub1.node_random_number.

Wichtiger Hinweis: Es liegt in der Verantwortung des Anwenders/Entwicklers, dass über den hier beschriebenen Sub-Profil-Mechanismus keine Endlos-Schleifen entstehen, bzw. dass diese gehandhabt werden! Es ist z. B. möglich ein Profil 1 zu erstellen, das Profil 2 einbindet. Wenn Sie dann in Profil 2 das Profil 1 einbinden, erhalten Sie eine Endlos-Schleife.

Übergebene Variablen (und Listen und Maps)


Die Variablen des aufrufenden Profils werden an das Sub-Profil übergeben. Siehe Abschnitt Übergebene Variablen, Listen und Maps (Profilketten und Sub-Profile), dort finden Sie auch beschrieben, wie Sie Listen und Maps (und alle Variablen des aufrufenden Profils in einer Map) übergeben können.

1:1-Mapping


Bei einem 1:1-Mapping wird die Substruktur nicht übertragen.

Hierarchische Strukturen


Wie Sie vielleicht schon bemerkt haben, werden die inkludierten Profile in der Quellstruktur alle "flach" eingefügt. Diese haben zwar jeweils in sich Verschachtelungen, aber Sie können nicht ein Profil 1 einfügen und dann in dieses das Profil 2. Verschachtelungen dieser Art, also der Aufbau eine hierarchischen Gesamtstruktur, wird über das Mapping und den hierarchischen Aufbau der Zielstruktur erreicht. Und diese Mittel sind Ihnen alle schon aus "normalen" Mappings bekannt. Konkret können also die Daten aus Profil 2 in der Zielstruktur unterhalb der Daten von Profil 1 eingefügt werden.

Beispiel-Anwendung


Nehmen wir an, Sie bekommen mit Ihrem Profil 2 eine Menge von Artikeln in einem Auftrag herein. Dann könnten Sie in der Zielstruktur die Artikel durchlaufen, wie Sie das bereits aus "normalen" Mappings kennen, und dann pro Artikel ein in der Quellstruktur eingebundenes Profil 1 aufrufen, das Ihnen zu dem jeweiligen Artikel Zusatzinformationen liefert (den gerade aktuellen Preis, den aktuellen Lagerbestand, usw.). Profil 1 kann also von irgendjemandem als Service-Profil aufgebaut werden und Sie können es in Ihrem Profil verwenden, um Ihre eigenen Informationen aufzubereiten. Sie geben Profil 1 z. B. lediglich eine Artikelnummer und bekommen die gewünschten Daten zurück, ohne wissen zu müssen, was im Hintergrund passiert, wie z. B. Datenbank-Abfragen oder Zugriffe auf ein ERP-System. Sie müssen sich auch keine Gedanken darüber machen, wie auf diese anderen Systeme zugegriffen wird. Ihr Profil 2 kann gleich bleiben und nur Profil 1 muss bei Bedarf gepflegt werden. Also so wie man sich das bei einer Service-orientierten Architektur wünscht.

Beispiel-Profile


Beispiel 1


Folgend zwei einfache Beispiel-Profile zur Veranschaulichung.



Führen Sie als erstes einen Mapping-Test des Profils Call_subprofile_1 durch (eine Test-Datei ist enthalten). Erst ist dort nicht viel zu sehen. Wir sehen lediglich, dass das Sub-Profil erfolgreich aufgerufen wurde, weil das Feld target_field, auf dem der Sub-Profil-Aufruf stattfindet, den Rückgabewert true erhalten hat. Die Substruktur mit den Daten des Sub-Profils wird nicht angezeigt.


images/download/attachments/157876855/1258-version-1-modificationdate-1699500545623-api-v2.png


Es gibt aber einen eigenen Tab im Mapping-Dialog, wo Ihnen die Daten angezeigt werden, die das Sub-Profil liefert.


images/download/attachments/157876855/1259-version-1-modificationdate-1699500545618-api-v2.png

Beispiel 2


Als nächstes rufen wir die Funktion einfach zweimal hintereinander auf und sehen uns das Ergebnis an. Die Substruktur wird dann zweimal mit Daten gefüllt. Also so, wie Sie das kennen, wenn Sie z. B. zwei Positionen einer Bestellung einlesen.


images/download/attachments/157876855/1263-version-1-modificationdate-1699500545608-api-v2.png

Beispiel 3


Nun rufen wir die Funktion ebenfalls zweimal auf, aber wir löschen mit dem Parameter g im zweiten Funktionsaufruf die Daten des vorherigen Aufrufs. Wir bekommen also in der Substruktur dann nur den Datensatz des zweiten Aufrufs.

In der Zielstruktur sind die Daten der Substruktur gemappt (sehen Sie sich den Pfad an). Wenn Sie einen Mapping-Test durchführen, sehen Sie einen Datensatz. Im Tab für die Sub-Profil-Aufrufe können Sie aber die Daten beider Sub-Profil-Aufrufe sehen (wie im vorherigen Beispiel).


Beispiel 4


In diesem Beispiel rufen wir die Funktion ebenfalls zweimal auf, aber wir verwenden nun den Parameter j im ersten Funktionsaufruf, um das Ergebnis des Sub-Profils im internen Cache zu speichern. Im zweiten Funktionsaufruf benutzen wir dann Parameter k, um den Cache-Inhalt zu verwenden, statt das Sub-Profil erneut aufzurufen.

Wenn Sie einen Mapping-Test durchführen, sehen Sie einen Datensatz. Im Tab für die Sub-Profil-Aufrufe können Sie ebenfalls nur einen Sub-Profil-Aufruf sehen.


Beispiel 5


Dieses Beispiel zeigt, wie man zweimal das selbe Sub-Profil einhängen kann.


images/download/attachments/157876855/1264-version-1-modificationdate-1699500545603-api-v2.png