1. Home
  2. Iterop Design
  3. Utiliser les scripts
  4. Les fonctions JUEL (Méthode Iterop)

Les fonctions JUEL (Méthode Iterop)

Introduction

Cette page a pour objectif de recenser les fonctions Iterop utilisables dans des scripts ou dans la configuration de données d’entrée.

La documentation des méthodes Iterop est à présent consultable directement depuis votre instance Iterop. Cette page n’est donc plus mise à jour et est vouée à disparaître.


Si vous n’êtes pas encore familier avec les fonctions Iterop ou les scripts en général, il est fortement recommandé de prendre connaissance de la page qui aborde les scripts en général.

Consulter la documentation des méthodes JUEL depuis Iterop

Depuis la version 3.15 d’Iterop, la documentation des méthodes JUEL est embarquée sur chaque instance Iterop. Pour la retrouver, rendez-vous dans le menu du clic droit dans une tâche de script. Ouvrez le menu « Méthodes Juel » et cliquez sur « Lien vers la documentation JUEL ».

Guide d’utilisation pour les fonctions

Sur cette page, nous vous indiquons l’intitulé de la fonction, avec en paramètre, les types + noms des arguments à transmettre.

Exemple

getExemple(String chaineDeCaractère, int nombre, Boolean trueOrFalse, Object objet)

  • String : La méthode attend une chaîne de caractère.
  • int : La méthode attend un nombre.
  • Boolean : La méthode attend true (vrai) ou (false) faux.
  • Object : La méthode attend un Objet.
Important

Lorsque vous utilisez la méthode dans un script, il ne faut pas indiquer le type des arguments comme ci-dessus mais transmettre une donnée qui respecte le type attendu.

La meilleure chose à faire est donc de copier/coller les exemples proposés dans les encarts gris et de les adapter à votre besoin/script.

Attention : Si un argument d’exemple est entre guillemets, c’est que la méthode attend un String. Si vous ne transmettez pas une variable mais un texte « brut », il est important que votre argument soit donc entre guillemets.

Les fonctions Iterop sont utilisables à plusieurs endroits. Si une méthode est utilisée dans un script, il sera nécessaire de retirer les ${} (dollar + accolades) qui entourent les méthodes dans les exemples.

Retirer les ${} :

  • Tâches de script

Laisser les ${} :

  • Valeur par défaut (option avancée d’une variable)
  • Liste personnalisée (configuration d’une variable « Liste »)
  • Édition du mail envoyé lors d’une affectation de tâche humain vers l’extérieur
  • Édition du mail envoyé comme notification (configuration d’une tâche humaine)
  • Configuration d’une variable d’entrée (en JUEL)
  • Description d’une tâche (configuration d’une tâche)
  • Nom d’une tâche (fenêtre modeleur)

Attention, il ne faut surtout pas copier coller l’intégralité d’une fonction Iterop à l’intérieur de ${} que vous auriez vous-même ajouté. Exemple :

${${exemple.getExemple(execution, « exemple »)}}

Il ne doit pas y avoir de ${} dans un ${}

Les méthodes sont toutes accessibles en faisant un click droit dans une fenêtre de tâche de script. Onglet « Méthodes Juel ».

Gestion des fichiers (files)

Sélecteur : files

Méthodes JUEL qui inclut des méthodes de récupération de nom et d’extension de fichiers ainsi que la création de fichiers PDF depuis des sources HTML.

copyFile(execution, String file_sourceVariableId, String file_targetvariableId, Boolean boolean_throwIteropErrorIfFailure)

Copie un fichier existant et rempli une variable avec le nouvel id du fichier copié. La méthode renvoie également l’iddu nouveau fichier. Le booléen boolean_sendError permet d’envoyer une erreur si l’id du fichier à copier est null, si le fichier n’existe pas ou si il y a eu un problème durant la copie. Si le booléen est à false, aucune erreur ne sera renvoyé et le processus continuera son cours.

Parameters :

  • execution : Laisse tel quel
  • file_sourceVariableId : L’id du fichier copier
  • file_targetvariableId : L’id de la variable recevant le nouveau fichier. A mettre entre guillemets
  • boolean_throwIteropErrorIfFailure : Envoyer une erreur ou non

Retourne : L’id du nouveau fichier

${files.copyFile(execution, file_sourceVariableId , "receiveFile_variable_id", boolean_sendError)}
${files.copyFile(execution, fileToCopy_variable_id, "file_targetvariableId", true)}

Résultat : Copie le fichier ayant pour id « fileToCopy_variable_id » dans la variable ayant pour id « receiveFile_variable_id » avec la gestion des erreurs active.

getName(String file_variableId)

Renvoie le nom et l’extension du fichier dont l’id est passé en paramètre. Si le fichier n’est pas trouvé ou n’existe pas, une chaîne de caractère ayant pour valeur « file_not_found » sera renvoyée.

L’id peut provenir d’une variable multi-fichiers. Dans ce cas, les noms de tous les fichiers seront renvoyés et séparés par une virgule.

Parameters :

file_variableId : L’id du fichier à récupérer. Cela peut être l’id d’une variable sans guillemets comme dans l’exemple.

Returns: Une chaîne de caractères

${files.getName(file_variableId)}

Résultat : Retourne le nom et l’extension du fichier dont l’id est « file_variableId« .

setName(String files_variableId, String files_newName, Boolean boolean_changeExtension, Boolean boolean_incrementMultiFile)

Modifie le nom d’un ou plusieurs fichiers passés en paramètre. Il est possible de remplacer le nom complet du fichier (nom + extension) ou seulement le nom du fichier, au moyen de boolean_changeExtension.
Si le nom de plusieurs fichiers doit être changé, alors, en fonction de la valeur de boolean_incrementMultiFile :

  • si true : les noms des fichiers seront suffixés avec un incrément (ex: mon_fichier_1.pdf, mon_fichier_2.doc…)
  • si false : les noms des fichiers seront tous les même (ex: mon_fichier.pdf, mon_fichier.doc

Parameters :

  • files_variableId : L’id d’une variable contenant un ou des fichiers
  • files_newName : Le nouveau nom du/des fichiers
  • boolean_changeExtension : Change ou non l’extension du fichier
  • boolean_incrementMultiFile : Suffixe d’un incrément en cas de multi-fichiers
${files.setName(files_variableId, files_newName, false, true)}
${files.setName(files_variableId, "Autre nom de fichier.pdf", true, false)}

Résultat : Le nom du fichier ayant pour id « files_variableId » est renommé « Autre nom de fichier » et son extension devient « .pdf » car le booléen « boolean_changeExtension » est à « true ».

getExtension(String file_variableId)

Renvoie l’extension d’un fichier dont l’id est passé en paramètre. Si le fichier n’est pas trouvé ou n’existe pas, une chaîne de caractères vide sera renvoyée.

L’id peut provenir d’une variable multi-fichiers. Dans ce cas, les extensions de tous les fichiers seront renvoyées et séparées par une virgule.

Parameters :

  • file_variableId : L’id de la variable dont on veut connaître l’/les extensions du/des fichiers.

Returns: Une chaîne de caractères

${files.getExtension(file_variableId)}

Résultat : Retourne « pdf » pour un fichier PDF.

setExtension(String file_variableId, String extension)

Modifie l’extension d’un ou plusieurs fichiers passés en paramètre.
Il faut saisir l’extension sans le « . » devant.
Si l’extension en paramètre est vide, alors, le système supprimera les extensions des différents fichiers.

Parameters :

  • file_variableId : L’id d’une variable contenant un ou des fichiers
  • extension : L’extension désirée sans le « . »
${files.setExtension(file_variableId, extension)}
${files.setExtension(files_variable_id, "pdf")}

Résultat : Modifie l’extension du/des fichiers qui possède(nt) l’id « file_variableId« .

getSize(String file_variableId) 

Renvoie la taille (en kilooctets) du fichier dont l’id est passé en paramètre. Si le fichier n’est pas trouvé ou n’existe pas, la valeur -1 sera renvoyée.

L’id peut provenir d’une variable multi-fichiers. Dans ce cas, c’est la somme des fichiers présente dans la variables qui sera renvoyée (toujours en kilooctets).

Parameters :

  • file_variableId : L’id de la variable dont on veut connaître la taille.

Returns: Un nombre entier

${files.getSize(file_variableId)}

Résultat : Retourne 25000 pour un fichier de 25 megaoctets.

createPdfFromHtml(execution, String string_fileName, String string_htmlContent)

Depuis source HTML, crée un fichier PDF avec un style basique.

Renvoie l’id du fichier généré qui peut être utilisé dans une variable de type « FICHIER » pour créer un lien vers ce fichier PDF généré.

Cette méthode peut être utilisée comme script JUEL en valeur d’entrée d’une variable de type « FICHIER ».

Si une erreur durant la création d’un fichier pdf survient, une exception sera levée et la tâche/le script … apparaîtra alors dans l’onglet « Erreur » de Play.

Parameters :

  • execution : Laisser tel quel
  • string_fileName : Le nom du fichier PDF qui sera généré
  • string_htmlContent : La source HTML. S’il s’agit du contenu d’une variable Iterop, mettre son id sans les guillemets.

Returns: Une chaîne de caractères

${files.createPdfFileFromHtml(execution, string_fileName, string_htmlContent)}
${files.createPdfFileFromHtml(execution, "Nom du fichier", "<p>Un texte en <strong>HTML</strong></p>")}

Résultat : Un fichier PDF nommé « Nom du fichier » avec comme contenu « Un texte en HTML » est créé.

createPdfFileFromHtmlSource(execution, String string_fileName, String string_htmlContent)

Voir méthode suivante. Elle est identique sauf que la génération d’un document pdf d’erreur est désactivée par défaut.

createPdfFileFromHtmlSource(execution, String string_fileName, String string_htmlContent)

Crée et enregistre un nouveau fichier PDF non-stylisé à partir d’une source HTML.

Renvoie l’id du fichier généré qui peut être utilisé dans une variable de type « FICHIER » pour créer un lien vers ce fichier PDF généré.

Cette méthode peut être utilisée comme script JUEL en valeur d’entrée d’une variable de type « FICHIER ».

Si une erreur durant la création d’un fichier pdf survient, une exception sera levée et la tâche/le script … apparaîtra alors dans l’onglet « Erreur » de Play.

Parameters :

  • execution : Laisser tel quel
  • string_fileName : Le nom du fichier PDF qui sera généré
  • string_htmlContent : La source HTML. S’il s’agit du contenu d’une variable Iterop, mettre son id sans les guillemets.

Returns: Une chaîne de caractères

${files.createPdfFileFromHtmlSource(execution, string_fileName, string_htmlContent)}
${files.createPdfFileFromHtmlSource(execution, "Nom du fichier", js_texteHtml)}

Résultat : Un fichier PDF nommé « Nom du fichier » contiendra le contenu de la variable JavaScript « js_texteHtml« .

createPdfFileFromHtmlSource(execution, String string_fileName, String string_htmlContent, String file_variableId)

Crée et enregistre un nouveau fichier PDF non-stylisé à partir d’une source HTML.

Remplit automatiquement la file_variableId avec le nouvel ID du fichier généré.

Cette méthode peut être utilisée dans une tâche de script pour alimenter une variable de type « FICHIER » désignée avec file_variableId .

Si une erreur durant la création d’un fichier pdf survient, une exception sera levée et la tâche/le script … apparaîtra alors dans l’onglet « Erreur » de Play.

Parameters :

  • execution : Laisser tel quel
  • string_fileName: Le nom du fichier PDF qui sera généré.
  • string_htmlContent : La source HTML. S’il s’agit du contenu d’une variable Iterop, mettre son id sans les guillemets.
  • file_variableId : L’id de la variable (à mettre entre guillemets) qui prendra comme valeur l’id du nouveau fichier. Cette variable doit être de type « FICHIER ».
${files.createPdfFileFromHtmlSource(execution, string_fileName, string_htmlContent , file_variableId)}
${files.createPdfFileFromHtmlSource(execution, "Nom du fichier", <p>Un texte en HTML</p>, "variable_id")}

createFileFromString(execution, String string_fileName, String string_source)

Crée et enregistre un nouveau fichier encodé en UTF-8 à partir d’une source de type texte. Renvoie l’identifiant du fichier créé à récupérer dans une variable de type FICHIER.

Parameters :

  • execution : Laisser tel quel
  • string_fileName : Le nom du fichier qui sera généré
  • string_source : La source texte. S’il s’agit du contenu d’une variable, mettre l’id de la variable sans les guillemets
${files.createFileFromString(execution, string_fileName, string_source)}
${files.createFileFromString(execution, "Nom du fichier", "Le texte")}

Résultat : Crée un nouveau fichier PDF nommé « Nom du fichier » qui aura comme contenu « Le texte ».

createFileFromString(execution, String string_fileName, String string_source, string_charset)

Même méthode qu’au dessus. Elle créer et enregistre un nouveau fichier avec la possibilité de choisir le charset. Renvoie l’identifiant du fichier créé à récupérer dans une variable de type FICHIER.

Parameters :

  • execution : Laisser tel quel
  • string_fileName : Le nom du fichier qui sera généré
  • string_source : La source texte. S’il s’agit du contenu d’une variable, mettre l’id de la variable sans les guillemets
  • string_charset: Le charset souhaité (Exemple : UTF-8, UTF-16, ISO-8859-1, US-ASCII, …)
${files.createFileFromString(execution, string_fileName, string_source, string_charset)}
${files.createFileFromString(execution, "Nom du fichier", "Le texte", "ISO-8859")}

Résultat : Crée un nouveau fichier PDF nommé « Nom du fichier » qui aura comme contenu « Le texte », encodé en ISO-8859.

createSimpleIcsFile(String fileName, String summary, …)

Fonction complète : createSimpleIcsFile(execution, String string_fileName, String string_summary, Object date_startDate, Object date_endDate, String string_location, String string_description, String string_partipantsCalendarMails, String string_organizer, String string_mailOrganizer)

Crée un fichier de type ICS (calendar) simple et standard. Certains paramètres sont obligatoires (comme la date de début, la date de fin et l’intitulé) et d’autres optionnels. Si un champ requis n’est pas présent, une erreur sera renvoyée.

Parameters:

  • execution : Laisser tel quel
  • string_fileName : Le nom du fichier ics généré
  • string_summary : L’intitulé de l’invitation
  • date_startDate : La date de début de l’événement
  • date_endDate : La date de fin de l’événement
  • string_location : Le lieu de l’événement
  • string_description : La description de l’événement
  • string_partipantsCalendarMails : Les calendriers des participants potentiels, séparés par des ##.
  • string_organizer : L’organisateur
  • string_mailOrganizer : Le mail de l’organisateur

Returns: L’id du fichier ICS créé

${files.createSimpleIcsFile(execution, string_fileName, string_summary, date_startDate, date_endDate, string_location, string_description, string_partipantsCalendarMails, string_organizer, string_mailOrganizer)}
${files.createSimpleIcsFile(execution, "Nom du fichier", "Nom de l'intitulé de l'invitation", js_dateStart, js_dateEnd, "Lieu de l'événement", "Description", variable_multi_user, "didier@gmail.com")}

getFileDigest(String file_variableId, String string_algo)

Génère l’empreinte (hash en hexadécimal) d’un fichier en utilisant l’algorithme fourni.

Cette méthode peut être utilisée pour vérifier l’intégrité d’un fichier.

Si le nom de l’algorithme d’encryptage est mal renseigné, c’est SHA256 qui sera prit par défaut.

Parameters :

  • file_variableId : L’id du fichier à récupérer
  • string_algo : Algorithme à utiliser pour l’empreinte (Valeurs possibles : MD5, SHA1, SHA256, SHA512).
${files.getFileDigest(file_variableId, string_algo)}
${files.getFileDigest(file_variableId, "MD5")}

Résultat : L’empreinte du fichier possédant l’id « file_variableId » est générée en MD5.

checkFileDigest(String file_variableId, String string_algo, String string_digest)

Vérifie l’intégrité d’un fichier en se basant sur l’empreinte fournie.

Retourne true si l’emprunte calculée est identique à celle de référence (le fichier est intègre), false sinon.

Parameters :

  • file_variableId : L’id du fichier à récupérer
  • string_algo : Algorithme à utiliser pour l’empreinte (Valeurs possibles : MD5, SHA1, SHA256, SHA512).
  • string_digest : Valeur d’empreinte de référence en hexadécimal
${files.checkFileDigest(file_variableId, string_algo, string_digest)}
${files.checkFileDigest(file_variableId, "MD5", "7a1813e36f0657a8efcabf9d33c7a7c8")}

Résultat : Retourne « true » ou « false ».

getFileBase64(String file_variableId)

Retourne un texte représentant le fichier encodé en base 64. Renvoie null si une erreur survient ou si le fichier n’existe pas.

Parameters :

  • file_variableId : L’id du fichier à convertir en base 64

Returns: Un texte encodé en base 64

${files.getFileBase64(file_variableId)}

createFileFromBase64(execution, String string_fileName, String string_base64Source)

Voir méthode suivante. Elle est identique sauf que la génération d’un document pdf d’erreur est désactivée par défaut.

createFileFromBase64(execution, String string_fileName, String string_base64Source, Boolean boolean_throwIteropErrorIfFailure)

Créé un fichier dans le processus depuis un texte d’un fichier encodé en Base64 et renvoie son id avec la possibilité de générer une erreur en cas de problème de conversion.

Parameters :

  • execution : Laisser tel quel
  • string_fileName : Le nom du nouveau fichier
  • string_base64Source : La source en base 64 à convertir
  • boolean_throwIteropErrorIfFailure : Envoyer une erreur ou non

Returns: L’id du nouveau fichier

${files.createFileFromBase64(execution, string_fileName, string_base64Source, string_base64Source)}
${files.createFileFromBase64(execution, "Liste des fournisseurs", "Y2VjaSBlc3QgdW4gbWVzc2FnZSBlbiBiYXNlIDY0", true)}

Résultat : Crée un nouveau fichier nommé « Liste des fournisseurs » basé sur la source en base 64.

Fichiers Word (word)

replaceKeyValues(execution, String wordfile_variableId, String string_multiKeyValue)

Remplace chaque les clés présentes dans le fichier Word dont l’id est transmis dans la méthode par la valeur associée.
Les clés présentes dans le fichier Word sont de cette forme : ${key1}

Parameters :

  • execution : Laisser tel quel
  • wordfile_variableId : L’id du fichier Word
  • string_multiKeyValue : Le string avec les couples « clé:valeur » séparés par des ##
${word.replaceKeyValues(execution, wordfile_variableId, string_multiKeyValue)}
${word.replaceKeyValues(execution, idWordFile, "key1:'Nouvelle valeur'##key2:variable1##key3:25##key4:'05/01/2015'")}

Résultat : ${key1} sera remplacé par « Nouvelle valeur ». ${key2} sera remplacé par la valeur de la variable ayant pour id variable1. ${key3} sera remplacé par « 05/01/2015 »

replaceKeyValuesByJson(String wordfile_variableId, String string_json)

Remplace les clés trouvées dans un document Word par les clés passé en paramètre. Les clés dans le document word devront être sous la forme : ${key1}, ${key2},
Le JSON doit être de la forme : {« key1″: »Valeur à remplacer », « key2 »: 60}

Parameters :

  • wordfile_variableId : L’id du fichier Word
  • string_json : Le string sous forme JSON qui indique les clés et les valeurs qui les remplaceront
${word.replaceKeyValuesByJson(wordfile_variableId, string_json)}
${word.replaceKeyValuesByJson(wordfile_variableId, '{"key1":"Valeur 1", "key2":"Valeur 2", ...}')}

Résultat : ${key1} sera remplacé par « Valeur 1 ». ${key2} sera remplacé par « Valeur 2« . Il est possible de mettre autant d’association « clé »: »valeur » que de ${key} présent dans le fichier word.

addImage(String wordfile_variableId, String wordFile_key, String imageFile_variableId)

Remplace la clé trouvée dans un document Word par l’image passée en paramètre. La clé dans le document word devra être sous la forme : ${key1}
Si la clé n’est pas retrouvée, l’image sera positionnée à la fin du document.

Parameters :

  • wordfile_variableId : L’id du fichier Word
  • wordFile_key : La clé intégrée au document Word
  • imageFile_variableId : L’id du fichier de la variable Image
${word.addImage(wordfile_variableId, wordFile_key, imageFile_variableId)}
${word.addImage(wordfile_variableId, "key1", fileImageId)}

Résultat : L’image remplacera la clé dans le document Word.

exportWordFileToPdf(execution, String wordFile_variableId, String newPdfFileTarget_variableId, String pdfFile_name)

Exporte le fichier Word en PDF dans une variable ayant une id précisée avec le paramètre « newPdfFileTarget_variableId« .

Parameters :

  • execution : Laisser tel quel
  • wordFile_variableId : L’id du fichier Word à exporter
  • newPdfFileTarget_variableId : L’id du nouveau fichier PDF
  • pdfFile_name : Le nom du nouveau fichier PDF
${word.exportWordFileToPdf(execution, wordFile_variableId, newPdfFileTarget_variableId, pdfFile_name)}
${word.exportWordFileToPdf(execution, wordfile_variableId, "nouveauPdf_id", "Mon nouveau pdf")}

Résultat : L’image remplacera la clé dans le document Word.

Fichiers Excel (excel)

Sélecteur : excel

Méthodes JUEL concernant la manipulation des fichiers Excel dans les processus. Permet de lire et de modifier des cellules, de changer les feuilles, et de les ré-enregistrer.

Attention

Les méthodes qui modifient des données (des cellules ou des feuilles) modifient le fichier excel passé en paramètre, sans créer de copie. Si vous voulez conserver une copie et éviter d’écraser un fichier, vous pouvez utiliser les méthodes de copie du Juel – Manipulation des fichiers.
Sachez également que les fichiers .xls ne sont pas compatibles avec nos méthodes.

getCellValue(String file_variableId, Object file_sheetIndex_or_sheetName, String string_cell)

Récupére la valeur d’une cellule.

Attention, cette méthode étant gourmande en ressources, elle doit être employée avec parcimonie. Évitez donc de l’utiliser dans une boucle qui fait beaucoup d’itération afin que votre instance ne soit surchargée ou ne devienne hors-ligne.

La méthode getCellValue sera en mesure d’extraire la valeur d’une cellule issue d’une formule.

Parameters:

  • file_variableId : L’id du fichier Excel
  • file_sheetIndex_or_sheetName : L’index ou le nom de la feuille recherchée
  • string_cell : La cellule recherchée, au format LettreNombre (A1, C3, …)

Returns: La valeur contenue dans la cellule.

${excel.getCellValue(file_variableId, file_sheetIndex_or_sheetName, string_cell)}
${excel.getCellValue(12, "Liste des fournisseurs", "A3")}
// peut être remplacé par :
${excel.getCellValue(12, 1, "A3")}

Résultat : Retourne la valeur de la cellule A3 de la feuille « Liste des fournisseurs ».

getCellValues(String file_variableId, Object file_sheetIndex_or_sheetName)

Retourne dans un tableau JSON, l’ensemble des valeurs des cellules sur une plage dynamique. La plage débute en A1 et se terminera dès qu’une cellule sera vide.

Attention, si on récupère une feuille via son index (et non son nom) il faut prendre en compte celles qui sont masquées.

Parameters:

  • file_variableId : L’id du fichier Excel
  • file_sheetIndex_or_sheetName : L’index ou le nom de la feuille recherchée

Returns: Toutes les valeurs des cellules comprises dans la plage dynamique.

${excel.getCellValues(file_variableId, file_sheetIndex_or_sheetName)}
// retourne les valeurs des cellules de la feuille "Liste des fournisseurs"
${excel.getCellValues(12, "Liste des fournisseurs")}
// peut être remplacé par :
${excel.getCellValues(12, 1)}

Résultat : Si A7 et G1 sont vides, la plage de cellules retournée est alors A1-E6. Même méthode que getCellValues(String, Object, String, String) sans préciser la plage

getCellValues(String file_variableId, Object file_sheetIndex_or_sheetName, String file_startCellReference, String file_endCellReference)

Retourne dans un tableau JSON, l’ensemble des valeurs des cellules contenues dans une plage spécifiée, depuis un fichier Excel.

Attention, si on récupère une feuille via son index (et non son nom) il faut prendre en compte celles qui sont masquées.

Parameters:

  • file_variableId : L’id du fichier Excel
  • file_sheetIndex_or_sheetName : L’index ou le nom de la feuille recherchée
  • file_startCellReference : La première cellule de la plage , au format LettreNombre (A1, C3, …)
  • file_endCellReference : La dernière cellule de la plage

Returns: Toutes les valeurs des cellules comprises dans la plage indiquée.

${excel.getCellValues(file_variableId, file_sheetIndex_or_sheetName, file_startCellReference, file_endCellReference)}
${excel.getCellValues(12, "Liste des fournisseurs", "A1", "C4")}
// peut être remplacé par
${excel.getCellValues(12, 1, "A1", "C4")}

Résultat : On récupère dans un tableau JSON, les valeurs des cellules allant de A1 à C4.

{"table":[["Value in A1","Value in B1","Value in C1","Value in D1"],["Test","Value","True","False"],["20","","","Other_value"]]}

setCellValue(String file_variableId, Object file_sheetIndex_or_sheetName, String string_cell, Object string_value)

Modifie la valeur d’une cellule.

Parameters:

  • file_variableId : L’id du fichier Excel
  • file_sheetIndex_or_sheetName : L’index ou le nom de la feuille recherchée
  • string_cell : La cellule ciblée, au format LettreNombre (A1, C3, …)
  • string_value : La nouvelle valeur
${excel.setCellValue(file_variable_id, sheetIndex_or_sheetName_variable, cell_reference_variable, new_value_variable)}
${excel.setCellValue(12, "Liste des fournisseurs", "A1", new_provider_variable)}
// peut être remplacé par 
${excel.setCellValue(12, 1, "A1", "Samsung")}

Résultat : La cellule A1 de la feuille « Liste des fournisseurs » prend la valeur « Samsung ».

setCellValues(execution, String file_variableId, Object file_sheetIndex_or_sheetName, String string_values)

Modifie la valeur de plusieurs cellules.

Attention si votre variable « string_values » possède des dates ou des « / ». Excel peut les interpréter en date et mettre le nombre de jour depuis le 01/01/1900. Il est donc recommandé d’utiliser la méthode suivante (setCellValuesByJson) qui elle garde le format texte.

Parameters:

  • execution : Laisser tel quel
  • file_variableId : L’id du fichier Excel
  • file_sheetIndex_or_sheetName : L’index ou le nom de la feuille recherchée
  • string_values : Les valeurs ainsi que les cellules cibles

Le format des valeurs est sous cette forme :

"cellule:value##cellule2:value2##cellule3:value3##…"

Le tout entouré de guillemets( » « ).

En fonction du type de la valeur :

  • Chaîne de caractères : Entourer de simple quote (‘ ‘)
  • Valeur d’une variable : Laisser l’id tel quel
  • Un nombre / Boolean : Laisser tel quel
${excel.setCellValues(execution, file_variableId, sheetIndex_or_sheetName_variable, refCell_and_value_variable)}
${excel.setCellValues(execution, 12, "Liste des fournisseurs", "A1:'Samsung'##B1:'Séraphin LAMPION'")}
// peut être remplacé par
${excel.setCellValues(execution, 12, 1, "A1:provider_variable_id##B1:manager_variable_id")}

Résultat : A1 prend la valeur « Samsung », B1 prendra la valeur « Séraphin LAMPION ».

setCellValuesByJson(String file_variableId, Object file_sheetIndex_or_sheetName, String string_json)

Rempli plusieurs cellules d’un fichier Excel par des valeurs spécifiées en paramètre. Le format des valeurs est en JSON, sous cette forme : {« A1″: »Ma valeur », « B4 »:50, …}

Parameters:

  • file_variableId : L’id du fichier Excel
  • file_sheetIndex_or_sheetName : L’index ou le nom de la feuille recherchée
  • string_json : Un string en format JSON avec pour clé : la cellule à remplir, et pour valeur : la valeur à renseigner
${excel.setCellValuesByJson(file_variableId, sheetIndex_or_sheetName, string_json)}
${excel.setCellValuesByJson(12, "Liste des fournisseurs", '{"A1":"Samsung", "B4":50 }')}

Résultat : A1 prend la valeur « Samsung », B4 prendra la valeur « 50 ».

addSheet(String file_variableId, String string_sheetName)

Ajoute une feuille au fichier excel spécifié.

Parameters:

  • file_variableId : L’id du fichier Excel
  • string_sheetName : Le nom de la feuille créée

Returns: L’index de la feuille

${excel.addSheet(file_variableId, string_sheetName)}
${excel.addSheet(12, "Liste des modèles d'ordinateurs")}

Résultat : Une nouvelle feuille nommée « Liste des modèles d’ordinateurs » est créée.

addSheet(String file_variableId, String string_sheetName, Integer int_sheetIndex)

Ajoute une feuille au fichier Excel spécifié à l’index donné.

Parameters:

  • file_variableId : L’id du fichier Excel
  • string_sheetName : Le nom de la feuille à créer
  • int_sheetIndex : L’index de la nouvelle feuille

Returns: L’index de la feuille créée.

${excel.addSheet(file_variableId, string_sheetName, int_sheetIndex)}
${excel.addSheet(12, "Liste des modèles d'ordinateurs", 3)}

Résultat : Une feuille nommée « Liste des modèles d’ordinateurs » est créée à l’index 3 (4ème position).

removeSheet(String file_variableId, String string_sheetName)

Supprime une feuille d’un fichier Excel.

Parameters:

  • file_variableId : L’id du fichier Excel
  • string_sheetName : Le nom de la feuille à supprimer
${excel.removeSheet(file_variableId, string_sheetName)}
${excel.removeSheet(12, "Liste des modèles d'ordinateurs")}

Résultat : La feuille nommée « Liste des modèles d’ordinateurs » est supprimée.

getSheetName(String file_variableId, int int_sheetIndex)

Retourne le nom de la feuille Excel qui possède l’index passé en paramètre.

Parameters:

  • file_variableId : L’id du fichier Excel
  • int_sheetIndex : L’index de la feuille à récupérer

Returns: Le nom de la feuille souhaitée

${excel.getSheetName(file_variableId, int_sheetIndex)}
${excel.getSheetName(12, 2)}

Résultat : Retourne le nom de la 3ème feuille (index 2) du fichier Excel qui possède l’id 12.

getAllSheetNames(String file_variableId)

Retourne le nom de toutes les feuilles d’un fichier Excel séparé par ## (utilisable dans les variables multi-sélections).

Parameters:

  • file_variableId – L’id du fichier Excel

Returns: Le nom de toutes les feuilles du fichier Excel

${excel.getAllSheetNames(file_variableId)}
${excel.getAllSheetNames(12)}

Résultat : Retourne les noms de toutes les feuilles du fichier Excel qui possède l’id 12.

getNumberSheets(String file_variableId)

Retourne le nombre de feuilles d’un fichier Excel.

Parameters:

  • file_variableId : L’id du fichier Excel

Returns: Un entier

${excel.getNumberSheets(file_variableId)}
${excel.getNumberSheets(12)}

Résultat : Retourne le nombre de feuille pour le fichier Excel qui possède l’id 12.

setSheetName(String file_variableId, int int_sheetIndex, String string_sheetName)

Modifie le nom de la feuille Excel souhaitée.

Parameters:

  • file_variableId : L’id du fichier Excel
  • int_sheetIndex : L’index de la feuille à changer
  • string_sheetName : Le nouveau nom de la feuille
${excel.setSheetName(file_variable_id, sheet_index_variable, sheet_name_variable)}
${excel.setSheetName(12, 2, "Liste des modèles d'ordinateurs")}

Résultat : Le nom de la 3ème feuille (index 2) est renommé « Liste des modèles d’ordinateurs ».

Gestion des listes (list)

Sélecteur : list

Méthodes JUEL concernant les méthodes de récupération d’éléments d’après des tables de dépendance et des listes dynamiques.

Comment connaître l’id d’une table de dépendance (listLinkId) ?

Depuis l’interface de gestion des tables de dépendance, les ids sont visibles dans la liste déroulante :

addElements(Integer int_listId, String… multiSelect_variableId)

Ajoute des nouvelles valeurs dans une liste liée (ou liste dynamique). Si ces valeurs existent déja, celles-ci ne seront pas ajoutés, si non, elles seront ajoutées à la fin de la liste.

Il est possible de mettre des valeurs provenant de multi-sélection (e.g valeurs séparées par des ##), des valeurs provenant de variables simples, ou de valeurs fixes (dans ce cas, entourés par des « ).

Tout peut être mélangé, il suffit de séparer chaque valeur par une virgule. L’id de la liste est trouvable depuis le tableau des listes de valeurs, depuis IteropDesign, sur la gauche, entre parenthèse après le nom de celle ci.

Parameters:

  • int_listId : L’id de la liste de valeurs
  • multiSelect_variableId : Les éléments à ajouter. Peut être fixe ou variable
${list.addElements(int_listId, multiSelect_variableId)} 
${list.addElements(12, "pomme", "poire", "banane")}
// ou
${list.addElements(12, "pomme##poire##banane")}

Résultat : pomme poire et banane sont ajoutés à la liste qui possède l’id 12.

deleteElements(Integer int_listId, String… multiSelect_variableId)

Même méthode et mêmes caractéristiques que la méthode #addElements(Integer, String…), mais cette fois, on supprime les éléments dans la liste.

${list.deleteElements(int_listId, multiSelect_variableId)} 
${list.deleteElements(12, "pomme", "poire", "banane")}
// ou
${list.deleteElements(12, "pomme##poire##banane}

Résultat : Les pomme, poire et banane sont supprimés de la liste qui possède l’id 12.

getElements(Integer int_listId)

Même méthode que la suivante (getElements(Integer int_listId, String separator)) mais avec le séparateur système utilisé par défaut, à savoir ##.

${list.getElements(int_listId)}
${list.getElements(3)}

Résultat : Les éléments de la liste qui possède l’id 3, séparés par le séparateur système ( ## ) : pomme##poire##orange

getElements(Integer int_listId, String string_separator)

Récupère l’ensemble des éléments d’une liste dynamique dans le format « chaîne de caractères » séparés par un separator passé en paramètre. Ci celui ci n’est pas spécifié, ce sera alors le séparateur système ## qui sera utilisé.

Parameters:

  • int_listId : L’id de la liste dynamique. Cette information peut être trouvée depuis l’onglet « Liste liées »
  • string_separator : Le séparateur entre les valeurs de la liste

Returns: Un String avec les éléments séparés par un séparateur.

${list.getElements(3, "///")}

Résultat : Les éléments de la liste qui possède l’id 3, séparés par le séparateur ( /// ) : pomme///poire///orange

getIdListByName(String string_listName, Boolean boolean_throwIteropErrorIfFailure)

Récupère l’id de la liste dont le nom correspond à la valeur de string_listName.

Parameters:

  • string_listName : Le nom de la liste dont on veut retrouver l’id
  • boolean_throwIteropErrorIfFailure : Envoyer une erreur ou non

Returns: L’id de la liste.

${list.getIdListByName("Liste des collaborateurs", true)}

Résultat : L’id de la liste qui s’appelle « Liste des collaborateurs »

getLinkedValues(Integer int_linkedListId, String multiSelect_variableId)

Même méthode que la suivante. Le séparateur par défaut est celui du système (##) et la méthode de recoupement est Union.

${list.getLinkedValues(12, multiSelect_variableId)}

getLinkedValues(Integer int_linkedListId, String multiSelect_variableId, String string_separator, Boolean boolean_isIntersection);

Récupère les valeurs liées par une table de dépendance à une ou plusieurs données sources. La donnée source doit être un String dont les valeurs sont séparés par le séparateur système d’Iterop, à savoir ##. La méthode retourne un String concaténant les valeurs des éléments dépendants des éléments source, séparées par un separator renseigné, ou le séparateur système ## si celui ci n’est pas spécifié.
La méthode fait une union ou une intersection des données dépendantes en fonction du booléen passé en paramètre.
Pour connaître l’id d’une table de dépendance (int_linkedListId), voir ci-après.

Exemple : A est lié à 1 et 2, et B est lié à 2 et 3. Si on renseigne source = A##B.
Si isIntersection = true, résultat = 2 (intersection)
Si isIntersection = false, résultat = 1##2##3 (union)

Parameters :

  • int_linkedListId : L’id de la table de dépendance
  • multiSelect_variableId : Des valeurs source fixes entre  »  » ou l’id d’une variable pour laisser le système récupérer la valeur
  • string_separator : Le séparateur choisi pour séparer les valeurs finales. Si null, c’est le séparateur système
  • boolean_isIntersection : Mettre true pour une intersection / false pour une union des données

Returns: un String concaténant toutes les données retrouvées

${int_linkedListId, multiSelect_variableId, string_separator, boolean_isIntersection)}
${list.getLinkedValues(int_linkedListId, "A##B", null, true)}

linkTwoElements(Integer int_linkedListId, String string_sourceVariableId, String string_targetVariableId)

Lie deux éléments dans une table de dépendance donnée. Les deux éléments doivent correspondre au type de la table de dépendance (un login si la table de dépendance lie un utilisateur, par exemple).

Si la source ou la target n’existe pas, une erreur sera renvoyée. Si les éléments sont déja liées et qu’on tente de re-créer ce lien, aucune erreur ne sera envoyée.

Pour connaître l’id d’une table de dépendance (int_linkedListId), voir dans l’onglet table de dépendance, dans la liste déroulante.

Parameters:

  • int_linkedListId : L’id de la table de dépendance
  • string_sourceVariableId : L’objet source (login utilisateur, group id, ou valeur de liste)
  • string_targetVariableId : L’objet cible (idem que pour la source)
${list.linkTwoElements(int_linkedListId, string_sourceVariableId, string_targetVariableId)}
${list.linkTwoElements(int_linkedListId, "user_login", "responsable_login")} 

removeLinkTwoElements(Integer int_linkedListId, String string_sourceVariableId, String string_targetVariableId)

Supprime un lien entre deux éléments dans une table de dépendance donnée. Les deux éléments doivent correspondre au type de la table de dépendance (un login si la table de dépendance lie un utilisateur, par exemple).

Si la source ou la target n’existe pas, une erreur sera renvoyée. Si les éléments ne sont plus liées et qu’on tente de re-supprimer ce lien, aucune erreur ne sera envoyée.

Pour connaître l’id d’une table de dépendance (int_linkedListId), voir dans l’onglet table de dépendance, dans la liste déroulante.

Parameters:

  • int_linkedListId : L’id de la table de dépendance
  • string_sourceVariableId : L’objet source (login utilisateur, group id, ou valeur de liste)
  • string_targetVariableId : L’objet cible (idem que pour la source)
${list.removeLinkTwoElements(int_linkedListId, variable_id_1, variable_id_2}
${list.removeLinkTwoElements(int_linkedListId, "user_login", "responsable_login")} 

linkElements(Integer int_linkedListId, Boolean boolean_deleteOldValues, String json)

Remplit une table de dépendance en se basant sur un JSON. Si la valeur boolean_deleteOldValues est renseignée à true, l’ensemble des liens déjà présents dans la table qui ne se retrouvent pas dans le JSON seront supprimés.
Si un des éléments du JSON n’est pas présent dans les listes le script se mettra en erreur.
Vous n’êtes pas totalement à l’aise avec le format JSON ? N’hésitez pas à consulter la page sur les Généralités sur le JSON

Parameters:

  • int_linkedListId : L’id de la table de dépendance
  • boolean_deleteOldValues : true si on veut supprimer les anciennes valeurs
  • json : Les données à renseigner en string avec une structure JSON
// Dans un Script

var first_association = {};
first_association.source = first_sport_name_variable;
first_association.target = first_sport_accessory_variable;

var second_association = {};
second_association.source = second_sport_name_variable;
second_association.target = second_sport_accessory_variable;

var tab = [];
tab.push(first_association, second_association);

list.linkElements(int_linkedListId, boolean_deleteOldValues, JSON.stringify(tab));

// Autre Exemple :

list.linkElements(12, true, JSON.stringify([{source:"Tennis", target:"Balle"}, {source:"Volleyball", target:"Ballon"}]));
${list.linkElements(int_linkedListId, boolean_deleteOldValues, '[{"source\":"Tennis", "target":"Balle"}, {"source":\"Volleyball", "target":"Ballon"}]')}

Résultat : Les éléments Tennis et Balle seront liés, ainsi que VolleyBall et Ballon.

linkElements(Integer int_linkedListId, Boolean boolean_deleteOldValues, String json, Boolean boolean_addUnknownElement)

Voir la méthode linkElements.

Si le booléen boolean_addUnknownElement est true, les éléments de listes qui ne sont pas présents dans les listes en question seront ajoutés avant d’être liés. Cependant aucun utilisateur ni groupe ne peut être créé par cette méthode : une erreur sera envoyée si le JSON contient un id de groupe ou d’utilisateur inconnu du système.

Parameters:

  • int_linkedListId : L’id de la table de dépendance
  • boolean_deleteOldValues : true si on veut supprimer les anciennes valeurs
  • json : Les données à renseigner en string avec une structure JSON
  • boolean_addUnknownElement : ajoute les éléments non présents
${list.linkElements(int_linkedListId, boolean_deleteOldValues, '[{\"source\":\"Tennis\", \"target\":\"Balle\"}, {\"source\":\"Volleyball\", \"target\":\"Ballon\"}]', true)}

getIdListLinkByName(String string_linkedListName, Boolean boolean_throwIteropErrorIfFailure)

Récupère l’id de la liste liée dont le nom correspond à la valeur de string_linkedListName.

Parameters:

  • string_linkedListName : Le nom du référentiel métier dont on veut retrouver l’id
  • boolean_throwIteropErrorIfFailure : Envoyer une erreur ou non

Returns: L’id de la liste liée.

${list.getIdListLinkByName("Employés/Responsables", true)}

Résultat : L’id de la liste liée qui s’appelle « Employés/Responsable »

Référentiels métiers (businessTable)

Sélecteur : businessTable

Méthodes Juel concernant les référentiels métiers qui permettent de :
– Ajouter une/des ligne(s)
– Supprimer une/des ligne(s)
– Sélectionner des données ou des référentiels métiers
– Mettre à jour un référentiel

Les fonctions Iterop qui manipulent les Référentiels métiers utilisent beaucoup de string en format JSON. Si vous n’être pas totalement à l’aise avec ce format, n’hésitez pas à consulter notre pas Généralités sur le JSON.

addBusinessTableRow(Integer int_businessTableId, String json)

Ajoute une ligne à un référentiel métier.

Parameters:

  • int_businessTableId : L’id du référentiel métier
  • json : Un string JSON de la forme '{"column1_name":"valueColumn1", "column2_name":"valueColumn2"}'
    Exemple :
    '{"f1_nom":"Damien", "f2_age":8}'
    ou ‘{"f1_nom":"' + prenom_utilisateur_id + '", "f2_age":"' + age_utilisateur_id + '"}'
    Les colonnes qui ne sont pas citées dans le JSON sont laissées vides.

Returns: « true » si l’opération est réussie

${businessTable.addBusinessTableRow(int_businessTableId, '{"f1_nom":"' + prenom_utilisateur_id + '", "f2_age":"' + age_utilisateur_id + '"}')}

Dans un script il est possible d’utiliser JavaScript pour plus de lisibilité dans la construction du JSON :

var row = {
  f1_nom : user_name_variable,
  f2_age : 8
}

businessTable.addBusinessTableRow(int_businessTableId, JSON.stringify(row));

// Autre Exemple :

businessTable.addBusinessTableRow(4, JSON.stringify({f1_nom:"Damien", f2_age:8}));

Résultat : Une nouvelle ligne est ajoutée au référentiel métier. La colonne f1_nom obtient une nouvelle valeur : « Damien », la colonne f2_age obtient une nouvelle valeur : 8.

addBusinessTableRows(Integer int_businessTableId, String json)

Ajoute plusieurs lignes à un référentiel métier.

Parameters:

  • int_businessTableId : L’id du référentiel métier
  • json : Un string tableau de json de la forme : 
    '[{"column1_name":"valueColumn1", "column2_name":"valueColumn2"},{"column1_name":"valueColumn1", "column2_name":"valueColumn2"}, ...]'
    Exemple :
    '[{"f1_nom":"Damien", "f2_age":8}, {"f1_nom":"Paul", "f2_age":2}, ...]'
    ou '[{"f1_nom":"' + utilisateur1_id + '", "f2_age":"' + age_utilisateur1_id + '"}, {"f1_nom":"' + utilisateur2_id + '", "f2_age":"' + age_utilisateur2_id + '"}, ...] '
    Les colonnes qui ne sont pas citées dans le JSON sont laissées vides.

Returns: « true » si l’opération est réussie

${businessTable.addBusinessTableRows(businessTable_id, '[{"f1_nom":"' + prenom_utilisateur_id + '", "f2_age":"' + age_utilisateur2_id + '"}, {"f1_nom":"' + prenom_utilisateur2_id + '", "f2_age":"' + age_utilisateur_id + '"}]')}

Exemple dans un script :

var rows = [{
  f1_nom : user1_name_variable,
  f2_age : user1_age_variable
},
{
  f1_nom : user1_name_variable,
  f2_age : user1_age_variable
}]

businessTable.addBusinessTableRows(int_businessTableId, JSON.stringify(rows));

// Autre Exemple :

businessTable.addBusinessTableRows(4, JSON.stringify([{f1_nom:"Damien", f2_age:8}, {f1_nom:"Paul", f2_age:2}]));

Résultat : Deux nouvelles lignes sont ajoutées au référentiel métier. La colonne f1_nom obtient deux nouvelles valeurs : « Damien » et « Paul », la colonne f2_age obtient deux nouvelles valeurs : 8 et 2.

updateBusinessTableRows(Integer int_businessTableId, String json_selector, String json_new_values )

Met à jour un référentiel : Les entrées qui répondent à la condition définie par l’argument « json_selector » seront mises à jour en fonction de l’argument « json_new_values « .

Parameters:

Returns: Le nombre de lignes du référentiel mises à jour

  • int_businessTableId : L’id du référentiel métier
  • json_selector : Un string liste de sélecteurs JSON de la forme :
    '[{"column1_name":"value1", " column2_name":"value2"}, {"column1_name":"value3"}, ...]'
    Les conditions dans le même sélecteur JSON représentent des intersections « ET logique », tandis que plusieurs conditions réparties sur plusieurs JSON représenteront une union « OU logique ».
    Exemple :
    '[{"f1_nom":"Damien", "f2_color":"8"}, {"f1_nom":"Paul"}]'
    ou '[{"f1_nom":"' + user1_name_variable + '", "f2_age":"' + user_age_variable + '"}, {"f1_nom":"' + user2_name_variable + '"}]'
  • json_new_values : Un string en forme JSON : '{"f1_nom" : "newValue", "f2_age" : "newValue2"}'
    Exemple :
    '{"f1_nom" : "' + new_user_name_variable + '", "f2_age" : "' + new_user_age_variable + '",}'
${businessTable.updateBusinessTableRows(int_businessTableId,
'[{"f1_nom":"' +  user1_name_variable  + '", "f2_age":"' + user_age_variable + '"}, {"f1_nom":"' +  user2_name_variable + '"}]', '{"f1_nom":"newValue", "f2_age":"newValue2"}')}

Exemple dans un script :

var where = [{
  f1_nom : user1_name_variable,
  f2_age : user1_age_variable
},
  {
  f1_nom : user2_name_variable
}];

var set= {
  f1_nom : new_name_variable,
  f2_age : new_age_variable
};
businessTable.updateBusinessTableRows(int_businessTableId, JSON.stringify(where), JSON.stringify(set));

// Autre Exemple :

businessTable.updateBusinessTableRows(4, JSON.stringify([{f1_nom:"Damien", f2_age:8}, {f1_nom:"Paul"}]), JSON.stringify({f1_nom:"Antoine", f2_age:12}));

Résultat : Les lignes où « Damien » est présent dans la colonne f1_nom et où 8 est présent dans la colonne f2_age AINSI QUE toutes les lignes où « Paul » est présent dans la colonne f1_nom seront remplacées par « Antoine » dans la colonne f1_nom et 12 dans la colonne f2_age.

deleteBusinessTableRows(Integer int_businessTableId, String json)

Supprime les lignes d’un référentiel qui répondent aux conditions définies par l’argument « json« .

Parameters:

  • int_businessTableId : L’id du référentiel métier
  • json : Un string liste de sélecteurs JSON de la forme :
    '[{"column1_name":"value1", "column2_name":"value2"},{"column1_name":"value3"}, ...]'
    Les conditions dans le même sélecteur JSON représentent des intersections « ET logique », tandis que plusieurs conditions réparties sur plusieurs JSON représenteront une union « OU logique ».
    Exemple :
    '[{"f1_nom":"Damien", "f2_color":"8"}, {"f1_nom":"Paul"}]'
    ou '[{"f1_nom":"' + utilisateur1_id + '", "f2_age":"' + age_utilisateur1_id + '"}, {"f1_nom":"' + utilisateur2_id + '"}]'

Returns: Le nombre de lignes supprimées

${businessTable.deleteBusinessTableRows(int_businessTableId,
'[{"f1_nom":"' +  utilisateur1_id  + '", "f2_age":"' + age_utilisateur1_id + '"}, {"f1_nom":"' +  utilisateur2_id + '"}]')}

Exemple dans un script :

var where = [{
  f1_nom : user1_name_variable,
  f2_age : user1_age_variable
},
{
  f1_nom : user2_name_variable
}];

businessTable.deleteBusinessTableRows(int_businessTableId, JSON.stringify(where));

// Autre Exemple :

businessTable.deleteBusinessTableRows(4, JSON.stringify([{f1_nom:"Damien", f2_age:8}, {f1_nom:"Paul"}]));

Résultat : Toutes les lignes qui auront « Damien » dans la colonne f1_nom ET 8 dans la colonne f2_age, OU « Paul » dans la colonne « f1_nom » sont supprimées.

deleteAllRows(Integer int_businessTableId)

Vide un référentiel métier.

Parameters:

  • int_businessTableId : L’id du référentiel métier

Returns: « true » si le référentiel s’est bien vidé

${businessTable.deleteAllRows(int_businessTableId)}
// ou
${businessTable.deleteAllRows(23)}

Résultat : Le référentiel métier qui possède l’id 23 existe toujours, mais est désormais vide (n’a plus aucune ligne).

getBusinessTableRows(Integer int_businessTableId, String json_selector, String json_columns_to_retrieve)

Sélectionne l’ensemble des entrées d’un réferentiel qui répondent à la condition définie par le JSON « json_selector« , ne retournant que les colonnes précisées en argument « json_columns_to_retrieve« .

Parameters:

  • int_businessTableId : L’id du référentiel métier
  • json_selector : Un string liste de sélecteurs JSON de la forme :
    '[{"column1_name":"value1", " column2_name":"value2"}, {"column1_name":"value3"}, ...]'
    Les conditions dans le même sélecteur JSON représentent des intersections « ET logique », tandis que plusieurs conditions réparties sur plusieurs JSON représenteront une union « OU logique ».
    Exemple :
    '[{"f1_nom":"Damien", "f2_color":"8"}, {"f1_nom":"Paul"}]'
    ou '[{"f1_nom":"' + user1_name_variable + '", "f2_age":"' + user_age_variable + '"}, {"f1_nom":"' + user2_name_variable + '"}]'
  • json_columns_to_retrieve : Liste des colonnes que vous souhaitez récupérer, de la forme :
    '["column1_name", "column2_name", ... ]'
    Exemple :
    '["f3_adresse", "f4_sexe", ... ]'

Returns: Un string liste JSON contenant les valeurs sélectionnées, de la forme :
[{"column1_name":"value1", "column2_name":"value2 }, ... ]

${businessTable.getBusinessTableRows(int_businessTableId,
'[{"f1_nom":"' +  user1_name_variable  + '", "f2_age":"' + user_age_variable + '"}, {"f1_nom":"' +  user2_name_variable + '"}]',
'["column1_name", "column2_name"]')}

Exemple dans un script :

var where= [{
  f1_nom : user1_name_variable,
  f2_age : user1_age_variable
},
{
  f1_nom : user2_name_variable
}];

var select = ["f3_adresse", "f4_sexe"];

businessTable.getBusinessTableRows(int_businessTableId, JSON.stringify(where), JSON.stringify(select));

Résultat : Seules les valeurs des colonnes f3_adresse et f4_sexe seront retournées. Dans le cas présent, nous obtiendrons l’adresse et le sexe des « Damien » qui ont 8 ans et de tout les Paul.

getAllColumnsBusinessTable(Integer int_businessTableId, String json)

Sélectionne l’ensemble des entrées d’un référentiel qui répondent à la condition définie par le JSON en argument.

Parameters:

  • int_businessTableId : l’id du référentiel métier
  • json : une liste de sélecteurs JSON, de la forme :
    '[{"column1_name":"value1", " column2_name":"value2"}, {"column1_name":"value3"}, ...]'
    Les conditions dans le même sélecteur JSON représentent des intersections « ET logique », tandis que plusieurs conditions réparties sur plusieurs JSON représenteront une union « OU logique ».
    Exemple :
    '[{"f1_nom":"Damien", "f2_color":"8"}, {"f1_nom":"Paul"}]'
    ou '[{"f1_nom":"' + user1_name_variable + '", "f2_age":"' + user_age_variable + '"}, {"f1_nom":"' + user2_name_variable + '"}]'

Returns: Une liste JSON contenant les valeurs sélectionnées, de la forme :
[{"column1_name":"value1", "column2_name":"value2 }, ... ]

${businessTable.getAllColumnsBusinessTable(int_businessTableId,
'[{"f1_nom":"' +  user1_name_variable  + '", "f2_age":"' + user_age_variable + '"}, {"f1_nom":"' +  user2_name_variable + '"}])}

Exemple dans un script :

var where = [{
  f1_nom : user1_name_variable,
  f2_age : user1_age_variable
},
{
  f1_nom : user2_name_variable
}];

businessTable.getAllColumnsBusinessTable(int_businessTableId, JSON.stringify(where));

// Autre Exemple :

businessTable.getAllColumnsBusinessTable(4, JSON.stringify([{f1_nom:"Damien", f2_age:8}, {f1_nom:"Paul"}]));

Résultat : Récupère toutes les valeurs des lignes où « Damien » est présent dans la colonne f1_nom avec 8 dans la colonne f2_age, ainsi que toutes les lignes où « Paul » est présent dans la colonne « f1_nom »

getBusinessTable (Integer int_businessTableId)

Sélectionne l’ensemble des entrées d’un réferentiel qui répondent à la condition définie par le JSON en argument.

Parameters:

  • int_businessTableId : L’id du référentiel métier

Returns: Un string liste JSON contenant les valeurs du réferentiel, de la forme : [{"column_name":"value1", " column2_name":"value2}, ... ]

${businessTable.getBusinessTable(int_businessTableId)}

Résultat : Récupère l’intégralité du référentiel métier dont l’id est passé en argument.

getBusinessTableDefinition(Integer int_businessTableId)

Récupère la description de la structure d’un référentiel métier.

Parameters:

  • int_businessTableId : L’id du référentiel métier

Returns: Un string JSON décrivant la structure du référentiel

${businessTable.getBusinessTableDefinition(int_businessTableId)}

getAllBusinessTableDefinition()

Récupère l’ensemble des descripteurs des référentiels métiers présents dans l’application.

Returns: Un string liste de JSON décrivant les structures des référentiels métiers

${businessTable.getAllBusinessTableDefinition()}

addColumnToTable(Integer businessTable_id, String column_name, String column_type, String default_value, Boolean boolean_isIndex)

Ajoute une nouvelle colonne à un référentiel métier.

Parameters:

  • businessTable_id – L’id du référentiel métier
  • column_name – Le nom de la nouvelle colonne
  • column_type – Le type de la nouvelle colonne (Texte, numéro ou booléen)
  • default_value – La valeur par défaut (il est possible de mettre « null » si vous ne voulez pas de valeur par défaut)
  • boolean_isIndex – Mettre « true » si vous voulez que la colonne soit indexée. Celle permet de pouvoir faire des recherches plus rapides dessus.
${businessTable.addColumnToTable(businessTable_id, new_column_name_variable, new_column_type, new_column_default_value, boolean_isIndex)}
${businessTable.addColumnToTable(15, "Lieu de naissance", "TEXT", "Paris", true)}

removeColumnFromTable(Integer int_businessTableId, String businessTable_column_name)

Supprime une colonne d’un référentiel métier.

Parameters:

  • int_businessTableId : L’id du référentiel métier
  • businessTable_column_name : L’id de la colonne à supprimer
${businessTable.removeColumnFromTable(int_businessTableId, businessTable_column_name_variable)}
${businessTable.removeColumnFromTable(8, f9_lieu_de_naisance)}

Résultat : La colonne f9_lieu_de_naissance du référentiel métier qui possède l’id 8 est supprimée.

getIdTableByName(String string_businessTableName, Boolean boolean_throwIteropErrorIfFailure)

Récupère l’id du référentiel métier dont le nom correspond à la valeur de string_businessTableName.

Parameters:

  • string_businessTableName : Le nom du référentiel métier dont on veut retrouver l’id
  • boolean_throwIteropErrorIfFailure : Envoyer une erreur ou non

Returns: L’id du référentiel métier.

${businessTable.getIdTableByName("Informations utilisateur", true)}

Résultat : L’id du référentiel métier qui s’appelle « Informations utilisateur »

Informations utilisateurs/groupes (identity)

Sélecteur : identity

Méthodes JUEL utilisées pour récupérer des informations concernant des utilisateurs ou des groupes

getFullName(String user_variableId)

Retourne le nom complet (prénom + nom) de l’utilisateur dont l’id a été passé en paramètre.

Parameters :

  • user_variableId : L’id de l’utilisateur. Cette donnée correspond au login et peut être retrouvée dans la fenêtre « Utilisateur » de Design.
${identity.getFullName(user_variableId)};
${identity.getFullName("s.lamp")};

Résultat : Retourne le nom complet de l’utilisateur.
Exemple : Séraphin Lampion

getFirstName(String user_variableId)

Retourne le prénom de l’utilisateur dont l’id a été passé en paramètre.

Parameters :

  • user_variableId : L’id de l’utilisateur. Cette donnée correspond au login et peut être retrouvée dans la fenêtre « Utilisateur » de Design.
${identity.getFirstName(user_variableId)};
${identity.getFirstName("s.lamp")};

Résultat : Retourne le prénom de l’utilisateur.
Exemple : Séraphin

getLastName(String user_variableId)

Retourne le nom de famille de l’utilisateur dont l’id a été passé en paramètre.

Parameters :

  • user_variableId : L’id de l’utilisateur. Cette donnée correspond au login et peut être retrouvée dans la fenêtre « Utilisateur » de Design.
${identity.getLastName(user_variableId)};
${identity.getLastName("s.lamp")};

Résultat : Retourne le nom de famille de l’utilisateur.
Exemple : Lampion

getEmail(String user_variableId)

Retourne l’email de l’utilisateur dont l’id a été passé en paramètre.

Parameters :

  • user_variableId : L’id de l’utilisateur. Cette donnée correspond au login et peut être retrouvée dans la fenêtre « Utilisateur » de Design.
${identity.getEmail(user_variableId)};
${identity.getEmail("s.lamp")};

Résultat : Retourne l’email de l’utilisateur.
Exemple : seraphin.lampion@gmail.com

getGroupByUser(String user_variableId)

Retourne l’ensemble des groupes auquel appartient l’utilisateur.

Parameters :

  • user_variableId : L’id de l’utilisateur. Cette donnée correspond au login et peut être retrouvée dans la fenêtre « Utilisateur » de Design.
${identity.getGroupByUser(user_variableId)};
${identity.getGroupByUser("s.lamp")};

Résultat : Retourne une valeur « multi-groupe » contenant l’id des groupes où l’utilisateur est présent.
Exemple : groupId1##groupId2##groupId3

getGroupMembersEmail(String group_variableId)

Retourne les emails des utilisateurs présents dans le groupe qui a pour id celui transmis en paramètre. Ceux-ci seront séparés par une virgule ( , ).

Parameters :

  • group_variableId : L’id du groupe. Cette donnée correspond à l’id présent dans la fenêtre « Utilisateur », onglet « Groupe » de Design.
${identity.getGroupMembersEmail(group_variableId)};
${identity.getGroupMembersEmail("responsablesQualite")};

Résultat : Retourne les emails des membres du groupe « Responsables Qualité ».
Exemple : seraphin.lampion@gmail.com,bernard.caverne@gmail.com,jean-luc.carreze@gmail.com

getGroupMembersEmail(String group_variableId, String separator)

Même méthode que la précédente. Cette fois-ci il est nécessaire de renseigner un séparateur qui remplacera la virgule qui se trouve entre chaque emails.

Parameters :

  • group_variableId : L’id du groupe. Cette donnée correspond à l’id présent dans la fenêtre « Utilisateur », onglet « Groupe » de Design.
${identity.getGroupMembersEmail(group_variableId, " - ")};
${identity.getGroupMembersEmail("responsablesQualite", " - ")};

Résultat : Retourne les emails des membres du groupe « Responsables Qualité ».
Exemple : seraphin.lampion@gmail.combernard.caverne@gmail.comphilippe.carreze@gmail.com

getGroupMembersLogin(String group_variableId)

Retourne les logins des utilisateurs présents dans le groupe qui a pour id celui transmis en paramètre. Ceux-ci seront séparés par deux ##.

Parameters :

  • group_variableId : L’id du groupe. Cette donnée correspond à l’id présent dans la fenêtre « Utilisateur », onglet « Groupe » de Design.
${identity.getGroupMembersLogin(group_variableId)};
${identity.getGroupMembersLogin("responsablesQualite")};

Résultat : Retourne les logins des membres du groupe « Responsables Qualité », séparé par des ##.
Exemple : s.lampion##bernard.caverne##pcarreze

getGroupMembersLogin(String group_variableId, String separator)

Retourne les logins des utilisateurs présents dans le groupe qui a pour id celui transmis en paramètre. Ceux-ci seront séparés par le sélecteur passé en paramètre.

Parameters :

  • group_variableId : L’id du groupe. Cette donnée correspond à l’id présent dans la fenêtre « Utilisateur », onglet « Groupe » de Design.
${identity.getGroupMembersLogin(group_variableId, ", ")};
${identity.getGroupMembersLogin("responsablesQualite", ", ")};

Résultat : Retourne les logins des membres du groupe « Responsables Qualité », séparé par une virgule puis un espace.
Exemple : s.lampion, bernard.caverne, pcarreze

getIdGroupByName(String group_variableIdName, Boolean boolean_throwIteropErrorIfFailure)

Récupère l’id du groupe dont le nom correspond à la valeur de group_variableIdName .

Parameters:

  • group_variableIdName : Le du groupe dont on veut retrouver l’id
  • boolean_throwIteropErrorIfFailure : Envoyer une erreur ou non

Returns: L’id du groupe.

${identity.getIdGroupByName("Administrateurs", true)}

Résultat : L’id du groupe qui s’appelle « Administrateurs »

getGroupName(String group_variableId)

Retourne le nom du groupe dont l’id a été passé en paramètre.

Parameters :

  • group_variableId : L’id du groupe. Cette donnée correspond à l’id présent dans la fenêtre « Utilisateur », onglet « Groupe » de Design.
${identity.getGroupName(group_variableId)};
${identity.getGroupName("responsablesQualite")};

Résultat : Retourne le nom du groupe dont l’id a été passé en paramètre.
Exemple : Responsables Qualité.

Informations acteurs (assignment)

Sélecteur : assignment

Méthodes JUEL utilisées pour récupérer des informations sur l’acteur d’une tâche déjà réalisée.

Attention

Les trois fonctions suivantes ne fonctionnent que si la tâche indiquée a déjà été réalisée au moins une fois et n’est pas en cours de réalisation.

Il est possible de récupérer les informations relatives à l’acteur d’une tâche :

  • L’email
  • Le prénom + nom
  • Le login

getEmailOwnerTask(execution, String task_id)

Retourne l’email de l’acteur de la tâche dont l’id a été passé en paramètre. La tâche doit être déjà réalisée au moins une fois et ne pas être en cours de réalisation.

Parameters :

  • execution : Laisser tel quel
  • string_taskId : L’id de la tâche. L’entourer de guillemets ( » « ). Cette donnée peut être retrouvée avec le click droit dans une fenêtre de script
${assignment.getEmailOwnerTask(execution, "taskId")};

Résultat : Retourne l’email de l’acteur d’une tâche déjà réalisée.
Exemple : seraphin.lampion@gmail.com

getFullNameOwnerTask(execution, String string_taskId)

Retourne le prénom et le nom de l’acteur de la tâche dont l’id a été passé en paramètre. La tâche doit être déjà réalisée au moins une fois et ne pas être en cours de réalisation.

Parameters :

  • execution : Laisser tel quel
  • string_taskId : L’id de la tâche. L’entourer de guillemets ( » « ). Cette donnée peut être retrouvée avec le click droit dans une fenêtre de script
${assignment.getFullNameOwnerTask(execution, "taskId")};

Résultat : Retourne le nom de l’acteur d’une tâche déjà réalisée.
Exemple : Séraphin Lampion

getLoginOwnerTask(execution, String string_taskId)

Retourne le login de l’acteur de la tâche dont l’id a été passé en paramètre. La tâche doit être déjà réalisée au moins une fois et ne pas être en cours de réalisation.

Parameters :

  • execution : Laisser tel quel
  • string_taskId : L’id de la tâche. L’entourer de guillemets ( » « ). Cette donnée peut être retrouvée avec le click droit dans une fenêtre de script
${assignment.getLoginOwnerTask(execution, "taskId")};

Résultat : Retourne le login de l’acteur d’une tâche déjà réalisée.
Exemple : seraphin.lampion

Supervision dynamique (roles)

Sélecteur : roles

Méthodes JUEL qui permettent d’ajouter des superviseurs/contrôleurs pour une instance précise pendant l’exécution d’un processus, au moyen d’une tâche de script.

addSupervisorUsers(execution, user_variableId)

Ajoute un ou plusieurs utilisateurs superviseurs dynamiques.
Pour pouvoir ajouter plusieurs utilisateurs, il suffit de mettre l’id d’une variable « multi-user » plutôt que celle d’un utilisateur.

Parameters:

  • execution : Laisser tel quel
  • user_variableId : L’id de l’utilisateur (ou multi-user)
${roles.addSupervisorUsers(execution, user_variableId)}
// ou
${roles.addSupervisorUsers(execution, multiUser_variableId)}
${roles.addSupervisorUsers(execution, "gerard.dupond")}
// ou
${roles.addSupervisorUsers(execution, "gerard.dupond##flavien.marin##pborieux")}

Résultat : Gérard Dupond, Flavien Marin et Philippe Borieux deviennent superviseurs du processus qui appelle la méthode.

addSupervisorGroups(execution, String group_variableId)

Ajoute un ou plusieurs groupes superviseurs dynamiques.
Pour pouvoir ajouter plusieurs groupes, il suffit de mettre l’id d’une variable « multi-group » plutôt que celle d’un groupe.

Parameters:

  • execution : Laisser tel quel
  • group_variableId : L’id du groupe (ou multi-group)
${roles.addSupervisorGroups(execution, group_variableId)}
// ou
${roles.addSupervisorGroups(execution, multiGroup_variableId)}
${roles.addSupervisorGroups(execution, "responsablesInformatique")}
// ou
${roles.addSupervisorGroups(execution, "responsablesInformatique##responsablesAdministratif##responsablesRH")}

Résultat : Les utilisateurs appartenant aux groupes Responsables Informatique, Responsables Administratif et Responsables RH deviennent superviseurs du processus qui appelle la méthode.

addLimitedSupervisorUsers(execution, String user_variableId)

Ajoute un ou plusieurs utilisateurs superviseurs limités dynamiques.
L’aspect limité implique que l’utilisateur pourra accéder au suivi mais n’accédera pas aux variables et à leurs valeurs.
Pour pouvoir ajouter plusieurs utilisateurs, il suffit de mettre l’id d’une variable « multi-user » plutôt que celle d’un user.

Parameters:

  • execution : Laisser tel quel
  • user_variableId : L’id de l’utilisateur (ou multi-user)
${roles.addLimitedSupervisorUsers(execution, user_variableId)}
// ou
${roles.addLimitedSupervisorUsers(execution, multiUser_variableId)}
${roles.addLimitedSupervisorUsers(execution, "gerard.dupond")}
// ou
${roles.addLimitedSupervisorUsers(execution, "gerard.dupond##flavien.marin##pborieux")}

Résultat : Gérard Dupond, Flavien Marin et Philippe Borieux deviennent superviseurs limités du processus qui appelle la méthode.

addLimitedSupervisorGroups(execution, String group_variableId)

Ajoute un ou plusieurs groupes superviseurs limités dynamiques.
L’aspect limité implique que le groupe pourra avoir accès au suivi mais n’accédera pas aux variables et à leurs valeurs.
Pour pouvoir ajouter plusieurs groupes, il suffit de mettre l’id d’une variable « multi-group » plutôt que celle d’un groupe.

Parameters:

  • execution : Laisser tel quel
  • group_variableId : L’id du groupe (ou multi-group)
${roles.addLimitedSupervisorGroups(execution, group_variableId)}
// ou
${roles.addLimitedSupervisorGroups(execution, multiGroup_variableId)}
${roles.addLimitedSupervisorUsers(execution, "responsablesInformatique")}
// ou
${roles.addLimitedSupervisorUsers(execution, "responsablesInformatique##responsablesAdministratif##responsablesRH")}

Résultat : Les utilisateurs appartenant aux groupes Responsables Informatique, Responsables Administratif et Responsables RH deviennent superviseurs limités du processus qui appelle la méthode.

updateSupervisorUsers(execution, String user_variableId)

Met à jour les utilisateurs superviseurs dynamiques.
Pour pouvoir ajouter plusieurs utilisateurs, il suffit de mettre l’id d’une variable « multi-user » plutôt que celle d’un user.

Lors de l’update, une variable multi-user est envoyée avec dedans « User A », « User B » et « User C » :

  • Si l’un des trois users cités est déjà superviseur, rien ne change
  • Si l’un des trois users n’est pas déjà superviseur, il le devient
  • Si « User D » (qui n’est pas dans la multi-user envoyée par la méthode) était superviseur, il ne le sera plus

Parameters:

  • execution : Laisser tel quel
  • user_variableId : L’id de l’utilisateur (ou multi-user)
${roles.updateSupervisorUsers(execution, user_variableId)}
// ou
${roles.updateSupervisorUsers(execution, multiUser_variableId)}
${roles.updateSupervisorUsers(execution, "gerard.dupond")}
// ou
${roles.updateSupervisorUsers(execution, "gerard.dupond##flavien.marin##pborieux")}

Résultat : Gérard Dupond, Flavien Marin et Philippe Borieux deviennent superviseurs du processus qui appelle la méthode.

  • Gérard Dupond était déjà superviseur, rien ne change pour lui
  • Flavien Marin et Philippe Borieux n’était pas superviseur, ils le sont désormais
  • Gaston Palin était superviseur mais ne fait pas partie de l’update, il est donc retiré des superviseurs

updateSupervisorGroups(execution, String group_variableId)

Met à jour les groupes superviseurs dynamiques.
Pour pouvoir ajouter plusieurs groupes, il suffit de mettre l’id d’une variable « multi-group » plutôt que celle d’un groupe.

Lors de l’update, une variable multi-group est envoyée avec dedans « Group A », « Group B » et « Group C » :

  • Si l’un des trois groupes cités est déjà superviseur, rien ne change
  • Si l’un des trois groupes n’est pas déjà superviseur, il le devient
  • Si « Group D » (qui n’est pas dans la multi-group envoyée par la méthode) était superviseur, il ne le sera plus

Parameters:

  • execution : Laisser tel quel
  • group_variableId : L’id du groupe (ou multi-group)
${roles.updateSupervisorGroups(execution, group_variableId)}
// ou
${roles.updateSupervisorGroups(execution, multiGroup_variableId)}
${roles.updateSupervisorGroups(execution, "responsableInformatique")}
// ou
${roles.updateSupervisorGroups(execution, "responsableInformatique##responsableAdministratif##responsableRH")}

Résultat : Les utilisateurs des groupes Responsables Informatique, Responsables Administratif et Responsables RH deviennent superviseurs du processus qui appelle la méthode.

  • Les utilisateurs du groupe Responsables Informatique étaient déjà superviseurs, rien ne change pour eux
  • Les utilisateurs des groupes Responsables Administratif et Responsables RH n’étaient pas superviseurs, ils le sont désormais
  • Les utilisateurs du groupe Responsable Comptabilité étaient superviseur mais ne font pas partie de l’update, il sont donc retirés des superviseurs

removeSupervisorUsers(execution, String user_variableId)

Supprime un ou plusieurs utilisateurs superviseurs dynamiques.
Pour pouvoir supprimer plusieurs utilisateurs, il suffit de mettre l’id d’une variable « multi-user » plutôt que celle d’un user.

Parameters:

  • execution : Laisser tel quel
  • user_variableId : L’id de l’utilisateur (ou multi-user)
${roles.removeSupervisorUsers(execution, user_variableId)}
// ou
${roles.removeSupervisorUsers(execution, multiUser_variableId)}
${roles.removeSupervisorUsers(execution, "seraphin.lampion")}
// ou
${roles.removeSupervisorUsers(execution, "seraphin.lampion##mpasquier##albertmoineau")}

Résultat : Séraphin Lampion, Maxime Pasquier et Albert Moineau ne sont plus superviseurs

removeSupervisorGroups(execution, String group_variableId)

Supprime un ou plusieurs groupes superviseurs dynamiques.
Pour pouvoir supprimer plusieurs groupes, il suffit de mettre l’id d’une variable « multi-group » plutôt que celle d’un groupe.

Parameters:

  • execution – Laisser tel quel
  • group_variableId – L’id du groupe (ou multi-group)

Les fonction « updateSupervisorUsers » et « updateSupervisorGroups » permettent de mettre à jour directement tout les superviseurs depuis la valeur d’une variable passée en paramètre.

${roles.removeSupervisorGroups(execution, group_variableId)}
// ou
${roles.removeSupervisorGroups(execution, multiGroup_variableId)}
${roles.removeSupervisorGroups(execution, "responsablesInformatique")}
// ou
${roles.removeSupervisorGroups(execution, "responsablesInformatique##responsablesCommunication##ResponsablesAchat")}

Résultat : Les utilisateurs des groupes Responsables Informatique, Responsables Communication et Responsables Achat ne sont plus superviseurs

Formatage de données (utils et format)

Sélecteur : utils

Méthodes JUEL concernant les méthodes de formatage de données automatiques et de tests si une variable existe ou non.

hasValue(execution, String string_variableId)

Retourne false dans le cas ou la variable est « null », vide ou n’existe pas. La variable ne peut être vide que dans le cas ou c’est un String (ou un dérivé comme les type User/Groupe/Password/Select…).

Parameters:

  • execution : Laisser tel quel
  • string_variableId : L’id de la variable à tester entre guillemets (« variable_id »)

Returns: Un boolean

${utils.hasValue(execution, "variableId")}

Résultat : Retourne « true » ou « false » selon si la variable dont l’id est « variableId » possède une valeur ou non.

isDefined(execution, String string_variableId)

Anciennement appelée isExists.

Retourne l’existence ou non d’une variable. Une variable n’existe pas si elle n’a pas été initialisé par un script ou elle n’a jamais été affiché dans un formulaire.

Parameters:

  • execution : Laisser tel quel
  • string_variableId : L’id de la variable à tester entre guillemets (« variable_id »)

Returns: Un boolean

${utils.isDefined(execution, "variableId")}

Résultat : Retourne « true » ou « false » selon si la variable dont l’id est « variableId » existe ou non.

formatIfNoValue(execution, String string_variableId, String string_valueIfNull, String string_valueIfNotNull)

En fonction de l’existence ou non de la valeur passée en paramètre, retourne un autre String passé en paramètre.
Remplace la condition ternaire traditionnelle.

Si la valeur passé en paramètre est null, vide ou n’existe pas, c’est value_if_null qui sera renvoyé. Sinon, c’est value_if_not_null.

Parameters:

  • execution : Laisser tel quel
  • string_variableId : L’id de la variable à tester (entre guillemets)
  • string_valueIfNull : La valeur à donner si la variable n’est pas null
  • string_valueIfNotNull : La valeur à donner si la variable est null

Returns: Une des deux chaînes de caractères passée en paramètre

${format.formatIfNoValue(execution, "variableId", string_valueIfNull , string_valueIfNotNull )}
${format.formatIfNoValue(execution, "variable_id", "Valeur si la variable est null", "Valeur si la variable n'est pas null")}

Résultat : Si la variable qui possède l’id « variableId » ne possède pas de valeur, elle prendra « Valeur si la variable est null », si elle en possède déjà une elle prendra « Valeur si la variable n’est pas null ».

replaceValueIfNull(execution, String string_variableId, String string_valueIfNull)

Remplace la valeur d’une variable par l’expression donnée en paramètre dans le cas où la valeur est nulle ou n’existe pas.

Parameters:

  • execution : Laisser tel quel
  • string_variableId : L’id de la variable entre guillemets
  • string_valueIfNull : La valeur dans le cas ou la variable est nulle
${format.replaceValueIfNull(execution, "variableId", string_valueIfNull)}
${format.replaceValueIfNull(execution, "variableId", "Valeur si la variable est null")}

Résultat : Si la variable qui possède l’id « variableId » est null, elle prend la valeur « Valeur si la variable est null ».

concatValues(String string_separator, String… values)

Concatène tous les Strings en interposant avec un séparateur dans le cas ou celui ci est spécifié. Il est possible de mettre autant de String que l’on veut, séparé par des virgules.

Parameters:

  • string_separator : Le séparateur entre chaque valeur
  • values : Toutes les valeurs à concaténer

Returns: Un string avec toutes les chaînes de caractères concaténées

${utils.concatValues(string_separator, variableId, string_texteVariable, "Valeur", ...)}
${utils.concatValues(";", "Valeur 1", "Valeur 2", variableId, texteVariable, ...)}

Résultat : Retourne « Valeur 1;Valeur 2; Valeur de variable_id;Valeur de la variable js;Une autre valeur;Autant qu’on veut »

formatValueHtml(Object variableId)

Formate une valeur passée en paramètre en HTML, en fonction du type de celle ci, pour pouvoir l’afficher par la suite, dans l’interface ou dans un mail :

  • Null : Renvoie « aucune donnée »
  • String simple : Renvoie un string simple
  • Multi valeurs : Renvoie une liste <ul> de ces valeurs
  • Date : Formatte automatiquement la date
  • Boolean : Affiche oui/non
  • Autre : Transforme en String

Il faut donc utiliser en paramètre la variable_id sans guillemets

Parameters:

  • variableId – Une variable Iterop, une variable JavaScript, ou une chaîne de caractères (entre guillemets)

Returns: Un HTML formaté pour l’affichage

${format.formatValueHtml(variableId)}
${format.formatValueHtml("Un string qui sera formaté en HTML")}

formatValue(Object variableId)

Même méthode que formatValueHtml(Object variableId) mais la sortie ne sera pas en HTML mais un texte simple. Change uniquement pour les multi-valeurs qui seront simplement séparées par des virgules.

Parameters:

  • variableId – Une variable Iterop, une variable JavaScript, ou une chaîne de caractères (entre guillemets)

Returns: Une chaîne de caractères formatée pour l’affichage

See Also: formatValueHtml(Object)

${format.formatValue(variableId)}
${format.formatValue("Un texte à formater")}

Méthodes utilitaires (utils)

Sélecteur : utils

Méthodes JUEL concernant le formatage de date, le parsing de date, la conversion en multi-valeurs, etc…

formatUniformDate(Object date_variableId)

Formate une date selon un format uniforme. Cette date en chaîne de caractères pourra être utilisée pour la transmission dans les WebServices, ou dans l’utilisation des Timers.

Voici le formater utilisé : « yyyy-MM-dd’T’HH:mmZ »

Parameters:

  • date_variableId : Une donnée au format date ou au format string. Il est possible de mettre une variable_id sans guillemets pour envoyer directement une valeur de date comme dans l’exemple.

Returns: Une chaîne de caractère de la date formaté

${utils.formatUniformDate(date_variableId)}

Résultat : La date transmise est le 9 juin 2019, à 17h21 en France, voici le résultat formaté selon le standard : 2017-06-09T15:21+0000.

formatDate(String string_format, Object date_variableId)

Formate une date passé en paramètre en chaîne de caractères, selon le format spécifié. Le type de format est celui utilisé dans le langage JAVA.

  • yyyy : l’année
  • MM : le mois
  • dd : le jour du mois
  • E : le jour de la semaine (Lundi, lun.)
  • w : semaine dans l’année
  • H : l’heure
  • m : les minutes
  • s : les secondes

Parameters:

  • string_format : Le format utilisé pour formater la date
  • date_variableId : Une donnée au format date ou au format string. Il est possible de mettre une variable_id sans guillemets pour envoyer directement une valeur de date comme dans l’exemple.

Returns : Une chaîne de caractère de la date formaté

${utils.formatDate("d/M/yyyy HH:mm", date_variableId)}

Résultat : 9/6/2019 17:21 (chaîne de caractères)

parseDate(String string_parserPattern, String date_variableId)

Formate une chaîne de caractères en date selon un parser spécifié. Le format de parser est le même que la fonction #formatDate(String string_format, Object variableId).

Parameters:

  • string_parserPattern : Le parser
  • date_variableId : Une donnée au format date ou au format string. Il est possible de mettre une variable_id sans guillemets pour envoyer directement une valeur de date comme dans l’exemple

Returns: Une Date

${utils.parseDate("d/M/yyyy HH:mm", date_variableId)}

Résultat : 9/6/2019 17:21 (date)

parseDateXml(String date_variableId)

Formate une chaîne de caractères en une date de type XML (ISO8601) passé en paramètre.

Parameters:

  • date_variableId : La date au format ISO8601

Returns: Une variable de type date

${utils.parseDateXml(date_variableId.toISOString())}

uniformMultiValues(String string_variableId, String string_separator)

Uniformise une expression contenant plusieurs valeurs séparées par un séparateur passé en paramètre. Cela la rend compatible avec les valeurs de l’application de type MultiSelect. Le séparateur est alors remplacé en ##.

Parameters:

  • string_variableId – Chaîne de caractères à convertir
  • string_separator – Le separateur utilisé dans l’expression passé en paramètre

Returns: Une chaîne de caractère dans le format adapté au MultiSelect

${utils.uniformMultiValues(string_variableId, ";")}
${utils.uniformMultiValues("Valeur 1;Valeur 2;Valeur 3", ";")}

Résultat : Valeur 1##Valeur 2##Valeur 3

now()

Renvoie la date d’aujourd’hui.

Returns: Une date

${utils.now()}

Données de l’historique (history)

Sélecteur : history

Méthodes Juel concernant le bean HistoryBean: utilisées pour récupérer des informations sur les données des tâches réalisées, des variables saisies dans l’application, …

getHistoryReportActivities(execution, Boolean boolean_displayVariables, Boolean boolean_isHtml)

Retourne un rapport sur l’historique du processus (Date de démarrage du processus et des tâches, etc).

Parameters:

  • execution : Laisser tel quel
  • boolean_displayVariables : Si « true », les variables des tâches et leurs valeurs seront dans le rapport.
  • boolean_isHtml : Si « true », le rapport sera en HTML (stylisé)

Returns: Une chaine de caractère

${history.getHistoryReportActivities(execution, boolean_isHtml, boolean_isHtml)}
${history.getHistoryReportActivities(execution, true, true)}

Résultat : Retourne un rapport sur le processus avec les variables et leurs valeurs, le tout stylisé en HTML.

getHistoryValuesHtml(execution, String string_variableId)

Retourne un rapport (en HTML) sur l’historique de la variable dont l’id a été donné en argument.

Parameters:

  • execution : Laisser tel quel
  • string_variableId : L’id de la variable dont on veut faire le rapport

Returns: Une chaine de caractère

${history.getHistoryValuesHtml(execution, "variableId")}

Résultat : Retourne un rapport sur la variable stylisé en HTML.

getHistoryValues(execution, String string_variableId)

Retourne un rapport (en texte brut) sur l’historique de la variable dont l’id a été donné en argument.

Parameters:

  • execution : Laisser tel quel
  • string_variableId : L’id de la variable dont on veut faire le rapport

Returns: Une chaine de caractère

${history.getHistoryValuesHtml(execution, "variableId")}

Résultat : Retourne un rapport sur la variable.

getCompletedActivityNumber(execution, String string_taskId)

Retourne le nombre d’activités qui ont déjà été terminées et qui ont pour clé l’id passé en paramètre.

Parameters:

  • execution : Laisser tel quel
  • string_taskId : L’id de l’activité

Returns: Un nombre décimal

${history.getCompletedActivityNumber(execution, "taskId")}

Résultat : Retourne le nombre d’activités terminées pour « taskId ».

isActivityFinished(execution, String string_taskId)

Retourne « true » si l’activité précisée a déjà été terminée au moins une fois.

Parameters:

  • execution : Laisser tel quel
  • string_taskId : L’id de l’activité

Returns: Un boolean

${history.isActivityFinished(execution, "taskId")}

Résultat : Retourne « true » ou « false » selon si l’activité ayant pour id « taskId » a déjà été terminée au moins une fois.

getTaskEndDate(execution, String string_taskId)

Retourne la date de réalisation d’une tâche spécifiée.
Voir la méthode suivante.

${history.getTaskEndDate(execution, "string_taskId")}

getTaskEndDate(execution, String string_taskId, Boolean boolean_findFirstTaskOccurence)

Retourne la date de réalisation d’une tâche spécifiée.

Si la tâche a été réalisée plusieurs fois (dans le cas d’une boucle), c’est le booléen boolean_findFirstTaskOccurence qui indiquera si il faut prendre la première ou la dernière.

  • Si boolean_findFirstTaskOccurence est « true », alors, ce sera la première tâche de la boucle qui sera prise en compte.
  • Si boolean_findFirstTaskOccurence est « false » ou non-renseigné, ce sera la dernière tâche dans la boucle.

Parameters:

  • execution : Laisser tel quel
  • string_taskId : L’id de l’activité
  • boolean_findFirstTaskOccurence : Un booléen qui détermine si on récupère la première ou dernière tâche d’une boucle

Returns: Une date

${history.getTaskEndDate(execution, string_taskId, boolean_findFirstTaskOccurence)} 
${history.getTaskEndDate(execution, "taskId", true)} 

Résultat : Retourne la date de la première réalisation de la tâche qui possède l’id « taskId« .

getTaskStartDate(execution, String string_taskId)

Retourne la date de démarrage d’une tâche spécifiée.
Voir la méthode suivante.

${history.getTaskStartDate(execution, "taskId")}

getTaskStartDate(execution, String string_taskId, Boolean boolean_findFirstTaskOccurence)

Retourne la date de démarrage d’une tâche spécifiée.

Si la tâche a été réalisée plusieurs fois (dans le cas d’une boucle), c’est le booléen boolean_findFirstTaskOccurence qui indiquera si il faut prendre la première ou la dernière.

  • Si boolean_findFirstTaskOccurence est « true », alors, ce sera la première tâche de la boucle qui sera prise en compte.
  • Si boolean_findFirstTaskOccurence est « false » ou non-renseigné, ce sera la dernière tâche dans la boucle.

Parameters:

  • execution : Laisser tel quel
  • string_taskId : L’id de l’activité
  • boolean_firstTaskOccurence : Un booléen qui détermine si on récupère la première ou dernière tâche d’une boucle

Returns: Une date

${history.getTaskStartDate(execution, string_taskId, boolean_findFirstTaskOccurence)}
${history.getTaskStartDate(execution, "taskId", false)}

Résultat : Retourne la dernière date de démarrage de la tâche qui possède l’id « taskId« .

getTaskActor(execution, String string_taskId)

Retourne l’acteur d’une tâche spécifiée.
Voir la méthode suivante.

${history.getTaskActor(execution, "taskid")}

getTaskActor(execution, String string_taskId, Boolean boolean_findFirstTaskOccurence)

Retourne l’acteur d’une tâche spécifiée.

Si la tâche a été réalisée plusieurs fois (dans le cas d’une boucle), c’est le booléen boolean_findFirstTaskOccurence qui indiquera si il faut prendre la première ou la dernière.

  • Si boolean_findFirstTaskOccurence est « true », alors, ce sera la première tâche de la boucle qui sera prise en compte.
  • Si boolean_findFirstTaskOccurence est « false » ou non-renseigné, ce sera la dernière tâche dans la boucle.

Parameters:

  • execution : Laisser tel quel
  • string_taskId : L’id de l’activité
  • boolean_findFirstTaskOccurence : Un booléen qui détermine si on récupère la première ou dernière tâche d’une boucle

Returns: Le login de l’acteur

${history.getTaskActor(execution, string_taskId, boolean_findFirstTaskOccurence)} 
${history.getTaskActor(execution, "taskId", false)} 

Résultat : Retourne le login de l’acteur qui a réalisé la tâche pour la première fois.

Méthodes d’exécution (execution)

Sélecteur : runtime

Méthodes JUEL utilisées pour récupérer des informations sur l’exécution d’un processus, d’une tâche…

getCurrentTaskId(execution, String string_taskId)

Retourne l’id de l’instance d’une ou des tâches en cours qui ont pour id le task_id passé en paramètre, et appartenant à la même instance que le script JUEL.

Dans le cas ou plusieurs tâches de même taskId sont en cours, les id seront renvoyés séparés par une virgule (ex : « 12455,13001,13250 »).

Parameters :

  • execution : Laisser tel quel
  • string_taskId : L’id de la tâche recherchée. L’entourer de guillemets ( » « ). Cette donnée peut être retrouvée avec le click droit dans une fenêtre de script
${runtime.getCurrentTaskId(execution, "taskId")};

Résultat : Retourne le ou les id des instances de tâche du processus qui sont actuellement en cours et qui proviennent de la tâche qui possède l’id passé en paramètre.

getParentProcessVariable(execution, String parent_variableId)

Récupère une valeur de variable provenant du processus parent.

Parameters:

  • execution : Laisser tel quel
  • parent_variableId : L’id de la variable recherchée à mettre entre guillemets ( » « )

Returns: La valeur de cette variable

${runtime.getParentProcessVariable(execution, "parent_variableId")}

Résultat : Récupère la valeur de la variable qui possède l’id « parent_variableId ». Cette variable est présente dans le processus parent qui appelle le processus en cours.

setParentProcessVariable(execution, String parent_variableId, Object childProcess_variableId)

Modifie la valeur d’une variable dans un processus parent.

Parameters:

  • execution : Laisser tel quel
  • parent_variableId : L’id de la vaariable recherchée à mettre entre guillemets ( » « )
  • childProcess_variableId : La valeur provenant d’une donnée du processus enfant ou a renseigner en fixe
${runtime.setParentProcessVariable(execution, "parent_variableId", childProcess_variableId)}
${runtime.setParentProcessVariable(execution, "parent_variableId", "La nouvelle valeur")}

Résultat : La variable du processus parent qui possède l’id « parent_variableId » prendra la valeur « La nouvelle valeur ».

getCurrentActivityNumber(execution, String string_taskId)

Retourne le nombre d’activités qui sont en cours et qui ont pour id le « taskId » passé en paramètre.

Parameters:

  • execution : Laisser tel quel
  • string_taskId : L’id de l’activité. Cette donnée peut être retrouvée avec le click droit dans une fenêtre de script

Returns: Le nombre d’activité en cours au format Long

${runtime.getCurrentActivityNumber(execution, "taskId")}

Résultat : Le nombre d’activités en cours qui possèdent l’id passé en paramètre.

isActivityCurrent(execution, String string_taskId)

Retourne « true » si l’activité précisé est en cours.

Parameters:

  • execution : Laisser tel quel
  • string_taskId : L’id de l’activité à tester. Cette donnée peut être retrouvée avec le click droit dans une fenêtre de script

Returns: Un boolean

${runtime.isActivityCurrent(execution, "taskId")}

Résultat : Retourne « true » ou « false » selon si l’activité dont l’id a été passé en paramètre est en cours d’activité ou non.

setTaskPriority(execution, String string_taskId, Integer int_new_priority_between_0_and_5)

Modifie la valeur de la priorité de la tâche souhaitée. Pour information, les valeurs possibles sont :

  • 4 et 5 : priorité urgente (rouge dans les tâches)
  • 2 et 3 : priorité importante (orange)
  • 1 : priorité normale (vert)
  • 0 : la tâche est considérée comme une tâche de fond
Attention

Pour pouvoir appliquer cette méthode, il est nécessaire que la tâche passée en paramètre « existe ». C’est à dire qu’elle doit être en attente de traitement dans votre liste de tâches ou dans vos tâches de fond.

Parameters:

  • execution : Laisser tel quel
  • string_taskId : L’id de la tâche. Cette donnée peut être retrouvée avec le click droit dans une fenêtre de script
  • int_new_priority_between_0_and_5 : Nouvelle valeur de la priorité souhaitée (0 à 5, 0 étant « Tâche de fond » – 4 et 5 étant « Urgent »)
${runtime.setTaskPriority(execution, "taskId", int_new_priority_between_0_and_5)}
${runtime.setTaskPriority(execution, "taskId", 5)}

Résultat : La tâche ayant pour id « taskId » sera désormais considérée comme « urgente ».

setTaskPriority(execution, String string_taskId, Integer int_new_priority_between_0_and_5, Boolean boolean_throwIteropErrorIfFailure)

Modifie la valeur de la priorité de la tâche souhaitée avec la gestion des erreurs.

Attention

Pour pouvoir appliquer cette méthode, il est nécessaire que la tâche passée en paramètre « existe ». C’est à dire qu’elle doit être en attente de traitement dans votre liste de tâches ou dans vos tâches de fond.

Parameters:

  • execution : Laisser tel quel
  • string_taskId: L’id de la tâche. Cette donnée peut être retrouvée avec le click droit dans une fenêtre de script
  • int_new_priority_between_0_and_5 : Nouvelle valeur de la priorité souhaitée (0 à 5, 0 étant « Tâche de fond » – 4 et 5 étant « Urgent »)
  • boolean_throwIteropErrorIfFailure : Mettre « true » pour activer la gestion des erreurs
${runtime.setTaskPriority(execution, "taskId", int_new_priority_between_0_and_5, boolean_throwIteropErrorIfFailure)}
${runtime.setTaskPriority(execution, "taskId", 5, true)}

Même résultat qu’au dessus avec, cette fois-ci, la gestion des erreurs.

getTaskPriority(execution, String taskId)

Récupère la valeur de la priorité de la tâche souhaitée.

Attention

Pour pouvoir appliquer cette méthode, il est nécessaire que la tâche passée en paramètre « existe ». C’est à dire qu’elle doit être en attente de traitement dans votre liste de tâches ou dans vos tâches de fond.

Parameters:

  • execution : Laisser tel quel
  • string_taskId : L’id de la tâche. Cette donnée peut être retrouvée avec le click droit dans une fenêtre de script

Returns: La valeur de la priorité de la tâche. La valeur sera un chiffre allant de 0 (tâche de fond) à 5 (tâche urgente).

${runtime.getTaskPriority(execution, "task_id")}

getProcessInstanceId(execution)

Récupérer l’id de l’instance du processus courant.

Parameters:

  • execution : Laisser tel quel.

Returns: L’id de l’instance du processus.

${runtime.getProcessInstanceId(execution)}

getParentProcessInstanceId(execution)

Récupérer l’id de l’instance du processus parent.

Parameters:

  • execution : Laisser tel quel.

Returns: L’id de l’instance du processus parent.

${runtime.getParentProcessInstanceId(execution)}

isImportantProcessInstance(« processInstanceId »)

Récupérer la priorité d’un processus.

Parameters:

  • processInstanceId : Id de l’instance de processus.

Returns: La priorité de processus, « true » pour élevée et « false » pour faible.

${runtime.isImportantProcessInstance("processInstanceId")}

setProcessInstancePriority(execution, boolean_isImportant)

Modifier la priorité de ce processus.

Parameters:

  • execution : laisser tel quel
  • boolean_isImportant : Sélecteur de priorité (« true » pour prioriser le processus).
${runtime.setProcessInstancePriority(execution, boolean_isImportant)}

isProcessInstanceFinished(« processInstanceId »)

Vérifier si le processus est terminé.

Parameters:

  • processInstanceId : Id de l’instance de processus.

Returns : Renvoie « true » si le process est terminé et « false » sinon.

${isProcessInstanceFinished("processInstanceId")}

runtime.completeTask(execution, « taskId », « taskOwnerLogin », « variableIdsToValuesJson« )

Finaliser une tâche.

Parameters:

  • execution : Laisser tel quel.
  • taskId : L’id de la tâche. Cette donnée peut être retrouvée avec le clic droit dans une fenêtre de script.
  • taskOwnerLogin : Login du détenteur de la tâche.
  • variableIdsToValuesJson : Json contenant les id et valeurs à attribuer.
  • throwIteropErrors : Paramètre optionnel : si « false », aucune erreur ne sera levée si la tâche n’est pas trouvée.
${runtime.completeTask(execution, "taskId", "taskOwnerLogin", '{"identificatorInstance":"newValue","start_date":156456565456,"start_number":42,"start_boolean":true}')}

setVariables(execution, « processInstanceId », « variableIdsToValuesJson« )

Assigner des variables à un processus en cours.

Parameters:

  • execution : Laisser tel quel.
  • processInstanceId : Id de l’instance de processus.
  • variableIdsToValuesJson : Json contenant les id et valeurs à attribuer.
  • throwIteropErrorIfNotFound : Paramètre optionnel : si « false », aucune erreur ne sera levée si le process n’est pas trouvé.
${runtime.setVariables(execution, "processInstanceId", '{"identificatorInstance":"newValue","start_date":156456565456,"start_number":42,"start_boolean":true}')}

Méthodes externe (externalAssignementBean)

Sélecteur : externalAssignementBean

Méthode JUEL concernant la récupération d’informations qui concernent les tâches externes.

Attention

Attention, si vous souhaitez déclarer cette méthode par le biais d’un click droit sur la fenêtre de script, vous retrouverez celle-ci dans l’onglet « Méthodes d’exécution « .

getUrlExternalTask(execution, String string_taskId)

Récupèrer l’URL d’accès à une tâche externe.

Attention

Pour pouvoir appliquer cette méthode, il est nécessaire que la tâche passée en paramètre « existe ». C’est à dire qu’elle doit être en attente de traitement dans votre liste de tâches ou dans vos tâches de fond.

Parameters:

  • execution : Laisser tel quel
  • string_taskId : L’id de la tâche. Cette donnée peut être retrouvée avec le click droit dans une fenêtre de script
${externalAssignementBean.getUrlExternalTask(execution, "string_taskId")}

Résultat : L’url permettant d’accéder à la tâche externe dont l’id a été passé en paramètre.

Updated on 30 mai 2022

Was this article helpful?

Related Articles

Need Support?
Can't find the answer you're looking for?
Contact Support