Merker-Elemente in einem Flatfileschema-Maps nutzen – so geht's

03.08.2017

Problem: Ein Wert („Kundennummer“) sollte in der Map nur einmal gelesen werden, aber mehrmals ausgegeben werden (in „Avis/Kundennummer“). Eine verbreitete Lösung hierfür ist, dass man auf dem Rootknoten („Verbandsavise“) einen Skripting-Funktoid „SF1“ erstellt, der die Variable global setzt und man sie dann in einem zweiten Skripting-Funktoid „SF2“ („Avis/Kundennummer“) nur noch ausliest.

Der BizTalk-Mapper unterstützt einen ja in der täglichen wunderbar darin, dass man komplizierte Mappings einfach realisieren kann; dabei hat man natürlich den Nachteil, dass man bei einem graphischen Mapper nicht mehr alles so in der Hand hat, was man direkt in XSLT programmieren könnte. In diesem Fall ist es so, dass das Skripting-Funktoid „SF1“ immer erst ausgeführt wurde, nachdem die Positionen („Avis“) erstellt worden sind. Im Ergebnis war dann natürlich die Kundennummer immer unbekannt.


Lösung: 
Wir haben ein neues Merker-Element („MerkerKundennummer“) oberhalb des Positionen-Records erstellt und mit minOccurs=0 belegt. Zwischen dem Skripting-Funktoid „SF1“ und dem Knoten haben wir ein logisches Funktoid eingesetzt, das vom Skripting-Funktoid „SF1“ immer ein false bekommt und damit unterdrückt, dass das Merker-Element erstellt wird. 


Resultat: 
Der Code aber wird nun vor dem Positionen-Record ausgeführt und die Kundennummer ist bekannt, wenn sie im Record erstellt wird. Weil das Merker-Element nicht erstellt wird, wird hierfür im erzeugten Flatfile auch kein Zeilenumbruch erstellt.


Voila!
Christoph

zurück

© 2017 QUIBIQ GmbH · AGB und Nutzungsbedingungen