====== Große Nachrichten fragmentieren ====== Wenn eine Nachricht von einem Empfangenen System aufgrund der Anzahl Positionen nicht verarbeitet werden kann, dann bietet sich an diese mit Hilfe eines Mappings in kleinere Fragmente zu zerteilen. Hier greifen wir auf die XPATH native "Prädikat" Funktion **position()** zu. Diese Funktion erlaubt es dedizierte Kinder der Parentnode per Index zu selektieren. Ausserdem wird eine besondere Eigenschaft der sog. Mappingrulesets genutzt bei der das Verhalten als While-Schleife eingestellt wird, ===== Voraussetzung schaffen ===== Zunächst wird die maximale Anzahl der Positionen innerhalb einer zu erzeugenden Nachricht definiert und eine Zählervariable auf den Wert 1 initialisiert. Dann müssen initial auch der kleinste und größte Index innerhalb der ersten Klassse bestimmt werden bestimmt werden. Ausserdem ermitteln wir die resultierende Anzahl der zu erwartenden Einzelnachrichten. ===== Loop mit Regelsatz ===== Nun kann in einem neuen Regelsatz, welcher mit dem **Regelverhalten="WhileLoop"** eingestellt, die Prüfung der Schlaufenbedingung erfolgen. Dabei wird lediglich geprüft ob die maximale Anzahl der Durchläufe erreicht ist oder nicht. ^Name ^Selection ^Target ^ |**rs_**WhileLoop((der Präfix "rs_" weißt i.d.R: immer auf einen **R**egel**S**atz hin.))|$counter < $TargetObjectCounts+ 1((In Ermangelung eines booleschen Vergleichsoperators "<=", wird die Obere Klassengrenze um 1 erhöht und mit "<" verglichen.))|**/TargetObjectRootName((Triggert das Zielobjekt so oft wie der WhileLoop ausgeführt wird.))**((In diesem Beispiel wird im Loop weiter unten im Fuss nachkalkuliert. Dies kann alternativ gelöst werden.))| **Wichtig**: dieser Regelsatz triggert jetzt das Zielobjekt. Anschliessend werden dann die klassifizierten Items mit der Filterung über den XPATH-Child-Index gefiltert. ===== Sample Mapping ===== Ein entsprechendes Mapping bzw. Ruleset Konstrukt kann wie folgt aufgesetzt werden: ==== Snapshot ==== {{:howtos:mappingfragments.jpg?nolink|}} ==== XML Code ==== Das im Snapshot gezeigte Mapping ist hier in dem Code als Clipboard XML verfügbar und kann per Copy & Paste in ein beliebiges Mapping eingefügt werden. EBISS_MAP_ITEMS