Pour en savoir plus sur les filtres en général, consulter l'article Comprendre les filtres.
Utiliser ce filtre quand un déclencheur reçoit des données encodées XML. Le filtre vous permet d'extraire les champs individuels, les champs répétables dans les sous-zones, et même les paires nom-valeur
. La structure XML définit les éléments et sous-éléments, attributs et leurs valeurs et les valeurs texte (valeurs d'élément).
Vous pouvez définir la structure d'un fichier XML par vous-même, mais NiceLabel vous recommande de l'importer du modèle de fichier XML donné. Cliquer sur le bouton Importer la structure de données dans le ruban. Après avoir importé la structure XML, la section Aperçu des données affiche le contenu XML. Elle met aussi en évidence les éléments et attributs que vous définissez en tant que champs de sortie.
Pour les exemples de données XML, voir l'article Données XML.
Définition de la structure
Pour utiliser les éléments XML, les configurer comme suit :
-
Valeur de variable : Spécifie que les éléments sélectionnés sont des champs dont les valeurs vont être associées aux variables correspondantes par l'action Utiliser le Filtre de Données. Pour plus d'informations, voir la section Définition des champs XML.
-
Élément optionnel : Spécifie que cet élément n'est pas obligatoire. Cela correspond à l'attribut du schéma XML (fichier XSD)
minOccurs=0
. La variable mappée à ce type de champ aura une valeur vide si l'élément n'apparaît pas dans l'XML.
-
-
Bloc de données : Spécifie que l'élément sélectionné survient plusieurs fois et fournit des données pour une seule étiquette. Le bloc de données peut être défini comme zone répétable, comme zone d'affectation ou les deux.
-
Zone répétable : Spécifie que les valeurs de tous les blocs de données répétables seront extraites, pas seulement celles du premier bloc. Des champs peuvent être définis dans chaque bloc de données. Il faut mapper les champs définis aux variables respectives dans l'action Utiliser le Filtre de Données. Pour plus d'informations, voir la section Définir les éléments répétables.
-
Zone d'affectation : Spécifie que le bloc de données contient des paires
nom-valeur
. Les noms de champs et leurs valeurs sont lus simultanément. Le mappage aux variables est effectué automatiquement. Utiliser cette méthode pour adapter le filtre aux données d'entrée variables pour éliminer le temps de maintenance. Pour plus d'informations, voir la section Définition de la zone d'affectation XML.
-
La section Aperçu de données simplifie la configuration. Le résultat d'un filtre défini est mis en évidence dans la zone d'aperçu.
Pour changer les données XML de l'aperçu, cliquer sur Ouvrir et rechercher un nouvel exemple de fichier XML.
Quand un champ XML est défini, les valeurs des éléments sélectionnés deviennent automatiquement disponibles. La définition d'un filtre rend ces champs disponibles pour le mappage des variables aux actions. Vous pouvez ainsi extraire les valeurs des éléments ou attributs.
Pour définir la valeur de l'élément comme champ, procéder comme suit :
-
Sélectionner l'élément ou attribut dans la liste de structure.
-
Pour Usage, sélectionner Valeur de variable.
-
L'élément s'affiche en gras sur la liste de structure, ce qui indique qu'il est en cours d'utilisation.
-
L'élément ou nom d'attribut est utilisé comme nom du champ de sortie.
-
La section Aperçu de données met en évidence la valeur de l'élément sélectionné.
Options de formatage
Cette section définit les fonctions de manipulation de chaînes de caractères qui seront appliquées aux variables ou champs sélectionnés. Sélectionner une ou plusieurs fonctions. Ces fonctions s'appliquent dans l'ordre sélectionné dans l'interface utilisateur, de haut en bas.
-
Supprimer les espaces au début : Enlève tous les caractères d'espacement (code décimal ASCII 32) du début de la chaîne de caractères.
-
Supprimer les espaces à la fin : Enlève tous les caractères d'espacement (code décimal ASCII 32) à la fin de la chaîne de caractères.
-
Effacer le caractère d'ouverture et de fermeture : Efface la première occurrence du caractère d'ouverture et de fermeture trouvé dans la chaîne de caractères.
Exemple 10. Exemple
Si vous utilisez "{" comme caractère d'ouverture et "}" comme caractère de fermeture, la chaîne d'entrée
{{selection}}
est convertie en{selection}
.
-
Rechercher et remplacer : Exécute une recherche classique et remplace la fonction selon la valeur fournie pour rechercher et remplacer par. Vous pouvez aussi utiliser des expressions classiques.
Note
Il y a plusieurs implémentations des expressions classiques utilisées. utilise la syntaxe .NET Framework pour les expressions classiques. Pour plus d'informations, consulter la Base de Connaissances article.
-
Remplacer les caractères non imprimables avec des espaces : Remplace tous les caractères de contrôle de la chaîne par un espace (code décimal ASCII 32). Les caractères non imprimables sont des caractères ayant une valeur ASCII décimale comprise entre 0-31 et 127-159.
-
Supprimer les caractères non imprimables : Enlève tous les caractères de contrôle de la chaîne. Les caractères non imprimables sont des caractères ayant une valeur ASCII décimale comprise entre 0-31 et 127-159.
-
Décoder les caractères spéciaux : Décode les caractères (ou codes de contrôle) qui sont indisponibles sur le clavier, comme le retour chariot ou le passage à la ligne. utilise une notation pour encoder de tels caractères sous forme lisible, tels que <CR> pour Retour Chariot et <LF> pour Passage à la Ligne. Pour plus d'informations, consulter la section Introduire des caractères spéciaux (Codes de Contrôle).
Cette option convertit les caractères spéciaux de la syntaxe en caractères binaires réels.
Exemple 11. Exemple
Quand vous recevez la séquence de données "<CR><LF>", les utilise comme une chaîne complète de 8 caractères. Activer cette nouvelle option pour interpréter et utiliser les données comme deux caractères binaires
CR
(Retour Chariot - code ASCII 13) etLF
(Passage à la Ligne - code ASCII 10).
-
Rechercher et supprimer tout avant : Trouve la chaîne de caractères fournie et efface tous les caractères du début des données jusqu'à la chaîne de caractères. La chaîne de caractères trouvée peut aussi être effacée.
-
Rechercher et supprimer tout après : Trouve la chaîne de caractères fournie et efface tous les caractères depuis la chaîne de caractères jusqu'à la fin des données. La chaîne de caractères trouvée peut aussi être effacée.
-
Changement de casse : Modifie tous les caractères dans vos chaînes en lettres capitales ou minuscules.
Aperçu des données
Cette section fournit un aperçu de la définition du champ. Si l'élément défini est sélectionné, l'aperçu surligne son emplacement dans les données prévisualisées.
-
Aperçu du nom de fichier : Spécifie le fichier qui contient l'échantillon de données qui sera analysé dans le filtre. Le fichier d'aperçu est copié de la définition du filtre. Si le nom du fichier d'aperçu est changé, le nouveau nom de fichier sera enregistré.
-
Ouvrir : Sélectionne un autre fichier sur lequel les règles du filtre vont s'appliquer.
-
Actualiser : Relance le filtre sur le contenu du fichier d'aperçu. Automation Met à jour la section Aperçu des données avec le résultat.
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 indenté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 un 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.
Le filtre XML identifie automatiquement les champs et leurs valeurs dans les données reçues. Ainsi, le mappage manuel de variable au champ n'est pas requis.
La fonction de Structure dynamique est utile si le déclencheur reçoit les données avec une structure changeante. Dans ce cas, la structure des données principale reste inchangée (par ex. : les champs sont délimités par une virgule) ou conserve la même structure, mais l'ordre et/ou le nombre de champs change. Il peut y avoir de nouveaux champs, ou certains des vieux champs ne sont plus disponibles. Avec la Structure dynamique activée, le filtre identifie automatiquement la structure du fichier reçu. Simultanément, le filtre lit les noms et les valeurs de champs (paires nom-valeur
) à partir des données. Cela élimine le besoin de mappage manuel des champs vers les variables.
L'action Utiliser un filtre de données ne propose pas de possibilités de mappage, car elle effectue le mappage de manière dynamique. Il n'y a même pas besoin de définir les variables d'étiquettes dans la configuration du déclencheur. L'action assigne les valeurs de champs aux variables d'étiquettes de même nom sans avoir besoin des variables importées de l'étiquette. Toutefois, la règle s'applique seulement à l'action Imprimer l'étiquette. Pour utiliser les valeurs de champs dans une autre action, il faut définir les variables dans le déclencheur, tout en conservant le mappage automatique variable-à-champ.
Note
Aucune erreur n'est signalée si le champ disponible dans les données d'entrée n'a pas de variable d'étiquette correspondant. Ignore en silence les variables manquantes.
Configuration de la zone d'affectation XML
Quand un bloc de données est défini comme zone d'affectation, deux espaces réservés apparaissent sous la définition de cet élément. Vous devez définir comment le nom de champ et sa valeur sont définis pour permettre au filtre d'extraire les paires nom-valeur
.
-
Nom de variable : Spécifie l'élément qui contient le nom de champ. Le nom peut être défini par le nom d'élément, la valeur de l'attribut sélectionné ou la valeur de l'élément. Pour activer le mappage automatique, la variable de l'étiquette doit avoir le même nom.
-
Valeur de variable : Spécifie l'élément qui contient la valeur du champ. Le nom peut être défini par le nom d'élément, la valeur de l'attribut sélectionné ou la valeur de l'élément.
Avertissement
L'élément XML qui contient les paires nom-valeur
ne peut pas être l'élément racine, mais doit au moins être un élément de second niveau. Par exemple, dans l'élément XML ci-dessous, l'élément <label>
est l'élément de second niveau et peut contenir les paires nom-valeur
.
Options de formatage
Cette section définit les fonctions de manipulation de chaînes de caractères qui seront appliquées aux variables ou champs sélectionnés. Sélectionner une ou plusieurs fonctions. Ces fonctions s'appliquent dans l'ordre sélectionné dans l'interface utilisateur, de haut en bas.
-
Supprimer les espaces au début : Enlève tous les caractères d'espacement (code décimal ASCII 32) du début de la chaîne de caractères.
-
Supprimer les espaces à la fin : Enlève tous les caractères d'espacement (code décimal ASCII 32) à la fin de la chaîne de caractères.
-
Effacer le caractère d'ouverture et de fermeture : Efface la première occurrence du caractère d'ouverture et de fermeture trouvé dans la chaîne de caractères.
Exemple 12. Exemple
Si vous utilisez "{" comme caractère d'ouverture et "}" comme caractère de fermeture, la chaîne d'entrée
{{selection}}
est convertie en{selection}
.
-
Rechercher et remplacer : Exécute une recherche classique et remplace la fonction selon la valeur fournie pour rechercher et remplacer par. Vous pouvez aussi utiliser des expressions classiques.
Note
Il y a plusieurs implémentations des expressions classiques utilisées. utilise la syntaxe .NET Framework pour les expressions classiques. Pour plus d'informations, consulter la Base de Connaissances article.
-
Remplacer les caractères non imprimables avec des espaces : Remplace tous les caractères de contrôle de la chaîne par un espace (code décimal ASCII 32). Les caractères non imprimables sont des caractères ayant une valeur ASCII décimale comprise entre 0-31 et 127-159.
-
Supprimer les caractères non imprimables : Enlève tous les caractères de contrôle de la chaîne. Les caractères non imprimables sont des caractères ayant une valeur ASCII décimale comprise entre 0-31 et 127-159.
-
Décoder les caractères spéciaux : Décode les caractères (ou codes de contrôle) qui sont indisponibles sur le clavier, comme le retour chariot ou le passage à la ligne. utilise une notation pour encoder de tels caractères sous forme lisible, tels que <CR> pour Retour Chariot et <LF> pour Passage à la Ligne. Pour plus d'informations, consulter la section Introduire des caractères spéciaux (Codes de Contrôle).
Cette option convertit les caractères spéciaux de la syntaxe en caractères binaires réels.
Exemple 13. Exemple
Quand vous recevez la séquence de données "<CR><LF>", les utilise comme une chaîne complète de 8 caractères. Activer cette nouvelle option pour interpréter et utiliser les données comme deux caractères binaires
CR
(Retour Chariot - code ASCII 13) etLF
(Passage à la Ligne - code ASCII 10).
-
Rechercher et supprimer tout avant : Trouve la chaîne de caractères fournie et efface tous les caractères du début des données jusqu'à la chaîne de caractères. La chaîne de caractères trouvée peut aussi être effacée.
-
Rechercher et supprimer tout après : Trouve la chaîne de caractères fournie et efface tous les caractères depuis la chaîne de caractères jusqu'à la fin des données. La chaîne de caractères trouvée peut aussi être effacée.
-
Changement de casse : Modifie tous les caractères dans vos chaînes en lettres capitales ou minuscules.
Exemple
L'élément <label>
est défini comme bloc de données et zone d'affectation. Le nom de variable est défini par la valeur du nom d'attribut, la valeur de variable est définie par l'élément texte.
<?xml version="1.0" standalone="no"?> <labels _FORMAT="case.nlbl" _PRINTERNAME="Production01" _QUANTITY="1"> <label> <variable name="CASEID">0000000123</variable> <variable name="CARTONTYPE"/> <variable name="ORDERKEY">0000000534</variable> <variable name="BUYERPO"/> <variable name="ROUTE"> </variable> <variable name="CONTAINERDETAILID">0000004212</variable> <variable name="SERIALREFERENCE">0</variable> <variable name="FILTERVALUE">0</variable> <variable name="INDICATORDIGIT">0</variable> <variable name="DATE">11/19/2012 10:59:03</variable> </label> </labels>