Sous processus séquentiel multi instance

Maintenant que nous avons récupéré les lignes de la demande d’achat, nous allons les parcourir pour les créer sur la commande d’achat. Pour cela nous allons utiliser un sous-processus séquentiel multi instance. Commencez par insérer un sous processus à la suite de la requête en effectuant un glisser déposer de l’icône : sub-process icon Cliquez sur le sous processus et utilisez la clé à molette pour sélectionner les barres parallèle barre parallele icon pour transformer le sous processus en sous processus séquentiel multi instance :

event process

Dans le sous processus, nous avons inséré une tâche script que l’on va paramétrer plus tard. En cliquant sur le sous processus, sur l’onglet de droite, nous avons accès aux champs suivants : Loop cardinality et Collection. Loop cardinality permet d’indiquer un nombre d’itération. Collection permet d’indiquer une collection sur laquelle le sous processus va itérer. Ici, nous souhaitons itérer sur la liste ListeLignesDemande construite précédemment, nous indiquons donc cette liste dans le champ Collection. Toujours dans l’onglet de droite, nous pouvons renseigner le champ Element variable. Ce champ permet de stocker dans une variable la valeur de l’élément de la liste à une itération donnée :

event process

Dans la tâche script Créer une ligne de commande d’achat, nous pouvons alors utiliser la variable uneLigneDemande pour venir compléter les champs de la commande :

event process

Ce qui génère le script suivant :

def rec = __ctx__.create('PurchaseOrderLine')
rec.productName = uneLigneDemande?.product?.name
rec.unit = __ctx__.find('Unit',uneLigneDemande?.unit?.id)?.getTarget()
rec.purchaseOrder = __ctx__.find('PurchaseOrder',__ctx__.getVariable(Process_commandeAchat,'purchaseOrder')?.id)?.getTarget()
rec.qty = uneLigneDemande?.quantity
rec.product = __ctx__.find('Product',uneLigneDemande?.product?.id)?.getTarget()
rec.price = uneLigneDemande?.product?.purchasePrice
rec.exTaxTotal = uneLigneDemande?.product?.purchasePrice*uneLigneDemande?.quantity
return __ctx__.save(rec)
Testez le processus.

À présent, il reste à calculer le montant total à partir des lignes de la demande d’achat. Essayez de réaliser cet exercice, vous avez vu toutes les notions nécessaires pour le faire. Pour cet exercice vous aurez besoin de la méthode round(2) qui permet d’arrondir à 2 chiffres significatif car le montant ne doit contenir que 2 chiffres après la virgule.

Voici la correction :

event process

La tâche Initialiser total est paramétré de la manière suivante :

event process

Voici le script de la tâche Calculer total :

event process

Et voici la mise à jour du champ total (Renseigner total), vous pouvez renseigner cette tâche depuis le mapper :

event process