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é :
Le for each prend en paramètre la requête XPath à partir de laquelle il effectue le debatch.
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.
Pour effectuer un debatching dans un trigger HTTP, il faut utiliser le paramètre splitOn qui est seulement utilisable 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.
Pour un appel à la Logic App LA_debatch_with_trigger, 3 instances de la Logic App se sont déclenchées.
Chacune des instances de la Logic App contient un record sur le lequel a eu lieu le debatch.
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.