Paramétrage du prétraitement des données XML
Le prétraitement du fichier d'import permet de réaliser plusieurs actions visant à modifier le format du fichier et plus particulièrement de ses balises afin de le rendre prêt à être importé dans Open-Prod.
Un traitement d'import appelle un prétraitement. Ce prétraitement appelle lui-même une règle de prétraitement, mais aussi une règle de conversion. Cela permet de regrouper les différents flux au même niveau et d'avoir un traitement global appelant différents traitements enfants.

1. Balises de prétraitement
Une configuration de prétraitement est appelée au travers d'un prétraitement.
Préfixe du nom de fichier : lors du prétraitement, le fichier est renommé automatiquement. Lorsque ce paramètre est laissé vide, le fichier est renommé par défaut avec le préfixe "Pretreatement-". Il est possible de forcer un préfixe via ce champ.
BaliseActiver d'entêtele CAO id : ilPermet s'agitd'incrémenter de laune balise permettant"CaoID" d'identifier la nomenclature.
Balise de ligne : il s'agit de la balise permettant d'identifierdans les composantsbalises desdans nomenclatures.
Clefcas. de balise de ligne : ilIl s'agit de la clé de la balise identifiant de manière unique les composants (ID, code produit...). Comme un même produit peut être appelé à plusieurs reprises et à plusieurs niveaux dans un même fichier d'import, il est nécessaire d'avoir une clef rendant unique chaque élément. Le code produit n'est pas suffisant. Grâce à cette clef de balise de ligne, le système va pouvoir attribuer automatiquement un identifiant unique appelé "CaoID". Cet identifiant peut ensuite être utilisé dans les domaines de rechercher du traitement d'import. Vous pouvez laisser vide cette case
Balise d'entête : il s'agit de la balise permettant d'identifier la nomenclature.
Balise de ligne : il s'agit de la balise permettant d'identifier les composants des nomenclatures.
Séquence manuelle : si cette option est cochée, cela signifie que le fichier à importer contient déjà un séquençage de la composition des données techniques. Si l'option n'est pas cochée, le système va s'appuyer sur les paramètres ci-dessus pour attribuer une séquence aux différentes lignes traitées (dans les lignes de nomenclatures et de gammes notamment).
2. Règles de prétraitement
Il est possible d'ajouter ou de supprimer des règles de prétraitement qui seront exécutées dans l'ordre de leur séquence.
En cliquant sur une des lignes, vous pouvez accéder à la modification de la règle. En cliquant sur "Ajouter un élément" en bas de la fenêtre, vous pouvez créer une nouvelle règle.
Le formulaire de saisie "Ouvrir : Liste de règles" s'ouvre alors.
Section "Balise cible" :
- Chemin balise :
- Action :
- Utiliser le XPath simplifié :
- Actif :
- Séquence :
Section "Paramètre" :
- Chemin de la destination :
- Créer copie :
- Nom de la nouvelle balise :
- Liste de balises à déplacer :
- Tout ajouter :
- Effacer le contenu :
- Utiliser le XPath dynamique devant le chemin :
Si l'action concerne une manipulation des attributs, les paramètres suivants sont affichés :
- Nom de l'attribut :
- Valeur de l'attribut (nouvelle et / ou ancienne) :
- Comparer à l'ancienne valeur :
- Attribut à concaténer :
- Balise à concaténer :
- Séparateur :
3. Prétraitement Python (Python preprocessing)
La zone de Traitement python permet de saisir du code python venant s'exécuter à la fin du prétraitement, cela va permettre gérer beaucoup de cas trop compliqué à gérer via l'interface.
Le fichier xml est accessible via la varible tree et est un ElementTree(cf. doc lxml ci-dessous) et toutes les modifications souhaité doivent être fait dessus.
Les imports de librairies sont bloqué. Vous avez cependant accès à la librairie lxml avec la doc ici
Exemples de pré-traitement :
Exemple 1 : dans la balise REFCO supprimer ce qui est après le tiret et créer une nouvelle balise VERSION avec ce qui est apès le - Avant : <REF>1144-02</REF> -> vers <REF>1144</REF>
refco_beacons = tree.xpath("//REFCO")
for refco_beacon in refco_beacons:
reco_split = refco_beacon.text.split("-")
if len(reco_split)>1:
refco_beacon.text = reco_split[0]
refco_beacon.getparent().append(lxml.etree.Element('VERSION', {'value': reco_split[1]}))
Exemple 2 : Ajouter balise CATEG avec attribut value="KIT" si contenu balise LIB commence par "INSTALLATION" sinon value="STANDARD"
lib_beacons = tree.xpath("//LIB")
for lib_beacon in lib_beacons:
if "INSTALLATION" in lib_beacon.text:
lib_beacon.getparent().append(lxml.etree.Element('CATEG', {'value': "KIT"}))
else:
lib_beacon.getparent().append(lxml.etree.Element('CATEG', {'value': "STANDARD"}))
Exemple 3 : mettre le contenu des balises REF et REFCO en attribut "value" (<REF>111</REF> -> vers <REF value="111" />
ref_beacons = tree.xpath("//REF")
refco_beacons = tree.xpath("//REFCO")
for ref_beacon in ref_beacons:
ref_beacon.set("value", ref_beacon.text)
ref_beacon.text=""
for refco_beacon in refco_beacons:
refco_beacon.set("value", refco_beacon.text)
refco_beacon.text=""
Lxml
2 façons de parcourir l’object :
· Via une boucle for comme une liste :
for child in tree :
child.get('value')
o Pour parcourir tous les enfants directs de tree
· Via un xpath :
child = tree.xpath("/Sequence")
child.get('value')
o Pour chercher toutes les balises Sequence qui sont enfant direct de tree
Ajouter une balise :
tree.append(lxml.etree.Element('Sequence', {'value': 1}))
Pour ajouter une balise Sequence avec en value 1 dans les enfants de tree :
<tree>
<Sequence value= "1" />
</tree>
Retirer une balise :
Sequence_children = tree.xpath("/Sequence")
for child in Sequence_children :
child.getparent().remove(child)
4. Exécution du prétraitement
Le prétraitement peut s'effectuer depuis le traitement d'import ou bien de la fenêtre de "Prétraitement xml". Dans les deux cas, il faut cliquer sur le bouton d'action "Prétraitement du fichier XML". Il s'effectuera sur base de la règle de prétraitement sélectionnée.
Bien entendu, il est nécessaire d'avoir un fichier au format XML à prétraiter. Pour cela, il suffit d'entrer en modification puis de cliquer sur "Sélectionner" pour choisir un fichier à prétraiter.
Si une règle de conversion XLSX est sélectionnée, il faudra sélectionner un fichier .xlsx puis le convertir en fichier .xml pour ensuite le prétraiter.
Le bouton "Enregistrer sous" sert à télécharger le fichier .xml sélectionné ou converti. Enfin, le bouton "Réinitialiser" permet de vider le champ de tout fichier.
La section "Message" affiche le résultat du dernier prétraitement réalisé. Si une erreur est survenue, elle est écrite ici. A chaque nouvelle exécution du prétraitement, le message est remplacé. Aussi, si deux prétraitement réussissent à la suite, le message "Exécution réussie" semble ne pas changer.