Wiederholbare Elemente im XML-Filter definieren

Wenn ein XML-Element mehrmals in XML-Daten vorkommt, handelt es sich um ein sich wiederholendes Element. Für gewöhnlich enthalten solche Elemente Daten für ein einzelnes Etikett. Um anzugeben, dass Sie Daten aus allen wiederholt auftretenden Elementen verwenden wollen, und nicht nur aus dem ersten, definieren Sie das Element als Datenblock und aktivieren Sie die Option Wiederholbares Element. Beinhaltet der Filter die Definition von Elementen, die als Datenblock / wiederholbare Elemente definiert sind, zeigt die Aktion Datenfilter verwenden wiederholbare Elemente mit eingebetteten Platzhaltern an. Alle Aktionen, die unter einem solchen Platzhalter eingebunden sind, werden nur für Datenblöcke auf dieser Ebene ausgeführt.
Beispiel
Das <item> -Element ist als Datenblock und Wiederholbares Element definiert. Dadurch erhält der Filter die Anweisung, alle Instanzen des <item> -Elements zu extrahieren, nicht nur die erste. In diesem Fall sollte <item> als Unterebene in der Aktion Datenfilter verwenden definiert werden. Sie müssen die Aktionen „Etikett öffnen“ und „Etikett drucken“ unter diesem Unterebenen-Platzhalter einbetten, damit sie für jede Instanz des <item>} -Elements wiederholt werden. Im folgenden Beispiel geschieht dies für drei Instanzen.
<?xml ver sion="1.0" encoding="utf-8"?> <asx:abap xmlns:asx="http://www.sap.com/abapxml" ver sion="1.0"> <asx:values> <NICELABEL_JOB> <T IMEST AMP>20130221100527.788134</T IMEST AMP> <USER>PGRI</USER> <IT _LABEL_DAT A> <item> <LBL_NAME>goods_r eceipt.nlbl</LBL_NAME> <LBL_PRINT ER>Pr oduktion01</LBL_PRINT ER> <LBL_QUANT IT Y>1</LBL_QUANT IT Y> <MAKT X>MASS ONE</MAKT X> <MAT NR>28345</MAT NR> <MEINS>KG</MEINS> <WDAT U>19.01.2012</WDAT U> <QUANT IT Y>1</QUANT IT Y> <EXIDV>012345678901234560</EXIDV> </item> <item> <LBL_NAME>goods_r eceipt.nlbl</LBL_NAME> <LBL_PRINT ER>Pr oduktion01</LBL_PRINT ER> <LBL_QUANT IT Y>1</LBL_QUANT IT Y> <MAKT X>MASS T WO</MAKT X> <MAT NR>28346</MAT NR> <MEINS>KG</MEINS> <WDAT U>11.01.2011</WDAT U> <QUANT IT Y>1</QUANT IT Y> <EXIDV>012345678901234577</EXIDV> </item> <item> <LBL_NAME>goods_r eceipt.nlbl</LBL_NAME> <LBL_PRINT ER>Pr oduktion01</LBL_PRINT ER> <LBL_QUANT IT Y>1</LBL_QUANT IT Y> <MAKT X>MASS T HREE</MAKT X> <MAT NR>27844</MAT NR> <MEINS>KG</MEINS> <WDAT U>07.03.2009</WDAT U> <QUANT IT Y>1</QUANT IT Y> <EXIDV>012345678901234584</EXIDV> </item> </IT _LABEL_DAT A> </NICELABEL_JOB> </asx:values> </asx:abap>
Warnung:
XML-Datenfilter mit verschachtelten Datenblöcken duplizieren Werte aus dem vorherigen Zuweisungsbereich, wenn eine Variable im ersten Block, aber nicht im zweiten definiert ist. Nehmen wir an, Sie drucken zwei Etiketten. Im ersten Zuweisungsbereich haben Sie eine Variable definiert: <manufacturer_serial>. Im zweiten Zuweisungsbereich ist diese Variable nicht vorhanden.
<?xml ver sion="1.0" encoding="utf-8"?> <asx:abap xmlns:asx="http://www.sap.com/abapxml" ver sion="1.0"> <jobs> <element> <data> <item> <manufacturer_serial>706583012001</manufacturer_serial> <package_code>AA792CY</package_code> </item> </data> <label_filename>serial_number_label.nlbl</label_filename> <print_quantity>1</print_quantity> <printer_name>Warehouse_printer_09</printer_name> </element> <element> <data> <item> <package_code>BE273XS</package_code> </item> </data> <label_filename>serial_number_label.nlbl</label_filename> <print_quantity>1</print_quantity> <printer_name>Warehouse_09</printer_name> </element> </jobs> </asx:abap>
Das erwartete Ergebnis wäre das zweite Etikett ohne <manufacturer_serial> -Daten. Beim tatsächlichen Druck würde das zweite Etikett jedoch den <manufacturer_serial> Wert des ersten Etiketts enthalten, d. h. 706583012001.
Es gibt jetzt vier Möglichkeiten:
-
Vermeiden Sie verschachtelte Datenblöcke.
-
Definieren Sie die Variablenwerte als leere Werte, wenn die Variablen nicht in verschachtelten Datenblöcken verwendet werden.
<item> <manufacturer_serial></manufacturer_serial> <package_code>AA792CY</package_code> </item>
-
Verwenden Sie Bedingungen für Aktionen, um Variablen zu definieren.
-
Verwenden Sie Zeichenfolgenmanipulationen, wenn fehlende Variablen erkannt werden.