Debatching d’un message XML dans une Logic App

Camille SCHNEIDER
Publié par Camille SCHNEIDER
Catégorie : Azure / Logic Apps
15/03/2020

Voici 2 méthodes permettant le debatching d’un message XML dans une Logic App. La première consiste à faire une requête XPath dans un for each. La seconde, qui demande elle aussi une requête XPath, doit être effectuée dans un trigger HTTP.

Voici le message exemple utilisé :

 

Message Orders

 

Méthode 1 : For each

 

Le for each prend en paramètre la requête XPath à partir de laquelle il effectue le debatch.

 

Logic App - For each

 

Requête XPath :

 

xpath(variables('xml'), '/*[local-name()="Orders" and namespace-uri()="http://Article_debatching.Orders"]/*[local-name()="OrderLine"]')

 

A l’exécution du for each, le message a bien été découpé en 3 parties, ce qui correspond bien au nombre d’itérations du for each.

 

 

Si vous souhaitez en savoir plus sur le for each : Les boucles for each.

 

Méthode 2 : Trigger Logic App HTTP

 

Pour effectuer un debatching dans un trigger HTTP, il faut utiliser le paramètre splitOn qui est seulement utilisable dans le code view.

 

paramètre splitOn dans le Code View

 

La requête XPath s’effectue dans le paramètre splitOn :

 

 @xpath(xml(triggerBody()), '/*[local-name()=\"Orders\" and namespace-uri()=\"http://Article_debatching.Orders\"]/*[local-name()=\"OrderLine\"]')

 

Afin d’effectuer ce debatch, il s’agit d’appeler la Logic App depuis une autre qui elle, contient la totalité du message.

 

Debatch depuis une autre Logic App

 

Pour un appel à la Logic App LA_debatch_with_trigger, 3 instances de la Logic App se sont déclenchées.

 

Résultats du debatch

 

Chacune des instances de la Logic App contient un record sur le lequel a eu lieu le debatch.

 

Résultats du debatch 2

 

Conclusion

 

Ces 2 solutions sont efficaces pour debatcher du XML dans une Logic App. Si le traitement de chaque nœud doit être indépendant des autres, le splitOn est la solution la plus élégante. En revanche, le for each peut permettre l’arrêt du debatching en cas d’erreur d’un des traitements.