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 : Cliquez sur le sous processus et utilisez la clé à molette pour sélectionner les barres parallèle pour transformer le sous processus en sous processus séquentiel multi instance :
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 :
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 :
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 :
La tâche Initialiser total
est paramétré de la manière suivante :
Voici le script de la tâche Calculer total
:
Et voici la mise à jour du champ total (Renseigner total)
, vous pouvez renseigner cette tâche depuis le mapper :