Définir les éléments répétables dans le Filtre XML

Si un élément XML survient dans les données XML plusieurs fois, c'est un élément répétable. Généralement, un élément répétable contient des données pour une seule étiquette. Pour utiliser les données de tous les éléments répétables, pas seulement le premier, il faut définir l'élément comme un bloc de données et activer l'option Élément répétable. Si le filtre contient une définition d'éléments définis comme bloc de données/élément répétable, l'action Utiliser le Filtre de Données affiche les éléments répétables avec les espaces réservés imbriqués. Toute action indentée sous un tel espace réservé s'exécute seulement pour les blocs de données à ce niveau.
Exemple
L'élément <item> est défini comme Bloc de données et Élément répétable . Il indique au filtre d'extraire toutes les occurrences de l'élément <item>, pas seulement le premier. Dans ce cas, l'élément <item> doit être défini comme le sous-niveau dans l'action Utiliser le Filtre de Données. Vous devez indenter les actions Ouvrir l'étiquette et Imprimer l'étiquette sous cet espace réservé de sous-niveau, pour qu'elles soient bouclées autant de fois qu'il y a d'occurrences de l'élément <item>. Comme montré dans l'exemple ci-dessous, à trois reprises.
<?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 oduction01</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 oduction01</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 oduction01</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>
Avertissement :
Le filtre de données xml avec un bloc de données imbriquées duplique les valeurs provenant de la zone d’affectation précédente si une variable est définie dans le premier bloc, mais pas dans le deuxième. Prenons par exemple une situation où vous imprimez deux étiquettes. Dans la première zone d'affectation, vous avez défini une variable <manufacturer_serial>. Dans la deuxième zone d’affectation, cette variable n’est pas présente.
<?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>
Le résultat attendu serait la deuxième étiquette sans les données <manufacturer_serial>. Mais sur l'impression obtenue, la deuxième étiquette contiendrait la valeur <manufacturer_serial> provenant de la première étiquette, à savoir 706583012001.
Quatre solutions sont possibles :
-
Éviter des blocs de données imbriquées.
-
Définir des valeurs de variables vides si les variables ne sont pas utilisées dans les blocs de données imbriquées.
<item> <manufacturer_serial></manufacturer_serial> <package_code>AA792CY</package_code> </item>
-
Utiliser des conditions sur les actions pour définir les variables.
-
Utiliser des manipulations de chaîne lorsque des variables manquantes ont été détectées.