Bonjour à tous,
j’ai vu sur la documentation Bonitasoft que l’on pouvait récupérer les informations des acteurs de l’organisation. J’aimerai comme dans la documentation Bonitasoft (http://www.bonitasoft.com/node/12199?download=true&start_download=true) mettre en dynamique certaines informations.
Je n’ai pas bien compris comment cela marchait. Pour récupérer par exemple le nom et prénom, j’ai créé sur ma pool des données transiantes. Par exemple, pour récupérer le prénom de l’initiateur du processus, j’ai une donnée transiante de type texte “referantNom” avec le scripte groovy suivant:
return
BonitaUsers.getProcessInstanceInitiatorManager(apiAccessor,processInstanceId).getFirstName();
Quand je l’utilise plus loin dans mon processus, dans un connecteur gmail, je met dans mon texte HTML l’appel à cette donnée:
Par exemple: Bonjour ${referantNom},
Mais la je n’ai rien dans le mail à par “Bonjour ${referantNom},” avec la variable en clair…
Où est mon erreur?
Merci de votre aide!
Sylvain
Merci Yannick, mais je vais expliquer plus mon cas car c’est un peu plus complexe je pense.
Pour moi, il n’y a pas d’initiateur car c’est sur une tâche de service que j’aimerai utiliser les variables en dynamique.
Dans mon processus (voir image “Proc.png”), l’initiateur rempli un formulaire, ça peut être Toto ou Titi. Quand il a fini, le formulaire est automatiquement transféré à Tutu via une tâche de service avec un connecteur mail. Dans ce connecteur mail, je veux mettre l’adresse d’envoi (voir image “fromEmail.png”) en dynamique avec un scipte groovy. Dans le corps du mail, je veux rajouter des variables dynamiques dépendantes encore de la personne qui a remplie le formulaire (voir image “email.png”).
Donc si c’est Toto qui rempli le formulaire, le mail sera envoyé avec Toto@gmail.com et signé de Toto dans le mail.
proc.png: http://www.hostingpics.net/viewer.php?id=666784Proc.png
fromEmail.png: http://www.hostingpics.net/viewer.php?id=471440fromEmail.png
Email.png: http://www.hostingpics.net/viewer.php?id=334490email.png
Bon je reviens sur le forum pour expliquer où je m’étais trompé.
Il ne faut surtout pas sauter de ligne après le “return”. Donc il faut écrire tout simplement dans la variable :
return BonitaUsers.getProcessInstanceInitiator(apiAccessor, processInstanceId).getFirstName();
ou
return BonitaUsers.getProcessInstanceInitiator(apiAccessor, processInstanceId).getFirstName();
Et les réutiliser dans la tâche de service (connecteur mail) en les appelant: ${referantNom} ${referantPrenom}
Pour ce qui est de récupérer l’email, dans le connecteur mail, pour prendre l’email de celui qui envoie, il faut utiliser le script suivant:
return BonitaUsers.getUserProfessionalContactInfo(apiAccessor,BonitaUsers.getProcessInstanceInitiator(apiAccessor,processInstanceId).getId()).getEmail();
Je remercie grandement les utilisateurs Yannick Lombardi et Hichem Rahmi pour leur aide précieuse.
Petit détail, je procède la version Community 6.3.
Bonjour,
une donnée transientes n’est pas persistée. Es-tu sûr qu’elle est transiente? SI tu souhaites l’utiliser plsu loin dans ton proces, il te faut utiliser une donnée de Process (Pool).
Est-ce que ta variable referantNom apparait dans l’autocomplétion là où tu édites le mail?
Cordialement,
Désolé mais c’est un peu du chinois pour moi. J’ai fais du Google définition pour comprendre tous les mots
J’ai créé une donnée transiante pour le nom et prénom car dans la documentation c’est marqué page 25 “Here are the scripts used to initialize these two transient variables:”. Donc j’ai trouvé donnée transiante dans la partie de la pool (2ème onglet vers formulaire) c’est pour ca que j’ai fais cela. Il y a aussi donnée transiante sur les tâches aussi mais comme je dois l utiliser de partout sur mon processus, je me suis dis que celui de la pool était le plus adapté. Après la différence entre une donnée transiante ou normale, à vrai dire, je ne sais pas la différence…
Mon but est de créer des utilisateurs dans l’onglet Organisation et dans les champs nom/prénom et email renseigner des données. Après, quand l’initiateur fait une tâche humaine et doit notifier dans une seconde tâche de service à un de ces collaborateur, je voulais par exemple signer de son nom et prénom en récupérant les informations de la partie organisation. Comme ça le nom/prénom de l’initiateur sont en dynamiques.
J’ai parcouru le forum et j’ai testé de créer une variable sur ma pool “referantNom” avec les scriptes suivants:
return
BonitaUsers.getUser(apiAccessor, loggedUserId).getUserName();
==> donné sur le forumhttp://community.bonitasoft.com/groups/usage-operation-6x/bonita-6-current-username-or-user-id
==> Ne marche pas
return
BonitaUsers.getProcessInstanceInitiator(apiAccessor, BonitaUsers.getProcessInstanceInitiator(apiAccessor, processInstanceId).getId()).getFirstName();
==>Ne marche pas
return
BonitaUsers.getProcessInstanceInitiator(apiAccessor, processInstanceId).getFirstName();
==> Ne marche pas
J’ai voulu tester pour le manager si j’arrivais à le récupérer mais sans succès :
return
BonitaUsers.getProcessInstanceInitiatorManager(apiAccessor, processInstanceId).getFirstName();
==> Ne marche pas
Je m’y prend mal? ou c’est les scripts qui ne sont pas bons?
D’après les tests que je viens d’effectuer, il semblerait que la fonction à appeler dépend du context.
Si c’est une tache qui a été démarré par l’utilisateur (donc il est l’initiateur), il faut utiliser :
return BonitaUsers.getProcessInstanceInitiator(apiAccessor, processInstanceId).getFirstName();
Si c’est une tache qui lui a été assigné (par exemple dans le d’une tache appelée à l’aide d’un Call Activity), il faut utiliser :
return BonitaUsers.getUser(apiAccessor, taskAssigneeId).getFirstName();
J’ai peut être mal compris quelque chose mais tu dis “Pour moi, il n’y a pas d’initiateur car c’est sur une tâche de service”. Or il y a bien un initiateur puisque “l’initiateur rempli un formulaire, ça peut être Toto ou Titi”.
S’il y a un initiateur, il faut rajouter un tâche de type script avant la tâche qui envoie le mail.
Dans cette tâche, tu mets un script (onglet Opération) qui va remplir ta variable “fromEmail” :
return BonitaUsers.getProcessInstanceInitiator(apiAccessor, processInstanceId).getEmail();
Tu peux aussi ajouter un autre script qui va remplir “nom” (idem pour prénom):
return BonitaUsers.getProcessInstanceInitiator(apiAccessor, processInstanceId).getLastName();
Et enfin, dans le connecteur de mail, tu pourras utiliser les variables “fromEmail”, “nom” et “prenom”.
Si ça ne fonctionne pas, serait il possible de savoir les erreurs que tu as dans les logs ?