Envoi de mail Personnalisé

Bonjour bastien, merci pour ta reponse, il y a une erreur pendant l'important de fichier .bos,

Message d'erreur affiché:

"Une erreur s'est produite lors du parsing du contenu de l'archive BOS." 

J'utilise Bonita 7.9 de mon coté.

Ah mince, je l'ais fait en version 7.10. 
J'ai une version 7.6 sur mon poste, je te refais le process avec cette version. Normalement tu pourras l'importer.

Essaie avec celui ci : https://we.tl/t-98808sYCWz

ah d'accord :)

Merci,

Ca marche super bien l'envoi du mail mais, ca envoi a tous les utilisateurs, non pas les acteurs de la tâche en attente,

C'est à cause de ca:

import org.bonitasoft.engine.identity.UserCriterion
 List users =apiAccessor.identityAPI.getUsers(0, 100, UserCriterion.FIRST_NAME_ASC)
 return users;

J'ai essaié de changer en ca: 

 import org.bonitasoft.engine.identity.User;
 final List users = apiAccessor.processAPI.getPossibleUsersOfPendingHumanTask(activityInstanceId, 0, Integer.MAX_VALUE);
  return users;

Mais ca marche pas.

Oui c'est un peut la loose pour récupérer les acteurs de la taches.
Sachant que, lorsque tu fait ta recherche d'acteur, ta tache n'est pas encore créer ou n'est pas encore en attente.
Du coup, si tu utilises le même acteur que ta line de ton process, tu peux initialiser ta liste d'utilisateurs comme suis:

import java.util.stream.Collectors

import org.bonitasoft.engine.bpm.actor.ActorCriterion
import org.bonitasoft.engine.bpm.actor.ActorInstance
import org.bonitasoft.engine.bpm.actor.ActorMember
import org.bonitasoft.engine.identity.UserCriterion

List users = new ArrayList<>();
//Récupération des 100 premiers utilisateurs
//users =apiAccessor.identityAPI.getUsers(0, 100, UserCriterion.FIRST_NAME_ASC)
//Récupération de tous les acteur du process
List<ActorInstance> actorsInstances =apiAccessor.processAPI.getActors(processDefinitionId, 0, 100, ActorCriterion.NAME_ASC);
//Récupération des acteurs ayant pour le nom "Employé"
List<ActorInstance> filteredActorsInstanceIds = actorsInstances.stream().filter{ActorInstance actor -> actor.name == "Employé"}.collect(Collectors.toList());

//Pour chaque acteurs filtrer, récupération des users
for(ActorInstance actor : filteredActorsInstanceIds){
    //Récupération des actorMembers
    List<ActorMember> actorMembers = apiAccessor.processAPI.getActorMembers(actor.getId(), 0, 9999);
    for(ActorMember actorMember : actorMembers){
        //Récupération de tous les utilisateurs du groupe
        if(actorMember.getGroupId() >-1){
            users.addAll(apiAccessor.identityAPI.getUsersInGroup(actorMember.getGroupId(), 0, 9999, UserCriterion.FIRST_NAME_ASC));
        }
        //Récupération de l'utilisateur
        if(actorMember.getUserId()>-1){
            users.add(apiAccessor.identityAPI.getUser(actorMember.getUserId()));
        }
        //Récupération des utilisateur du role
        if(actorMember.getRoleId() >-1){
            users.addAll(apiAccessor.identityAPI.getUsersInRole(actorMember.getRoleId(), 0, 9999, UserCriterion.FIRST_NAME_ASC));
        }
    }
}
return users;

en faite j'utilise des acteurs differents,  est ce qu'on peut utiliser une "operation":  du genre

  1. on crée la variable "userlist" mais on donne pas de valeur par défaut,
  2. on crée une opeation dans la tâche "etape 1", on y ajoute la variable userlist avec qui prend la valeur:

import org.bonitasoft.engine.identity.User;
final List users = apiAccessor.processAPI.getPossibleUsersOfPendingHumanTask(activityInstanceId, 0, Integer.MAX_VALUE);
return users;

 (Normalement apres l'execution de  la tâche "etape1" on peut obtenir les tâches en attente, et cela mettra à jour la variable "userlist").

 

Je l'ai essayé mais ca ne marche pas encore, je sais si cette logique n'est pas correcte, ou une erreur dans mon projet

 

J'ai l'impression que dans " l'instances multiples executés en parallèles ", la variable en entrée liste (userlist)  ne peut pas être assignée après,  elle doit prendre une valeur par défaut. 

Tu ne peux pas faire : 
on crée une opeation dans la tâche "etape 1", on y ajoute la variable userlist avec qui prend la valeur:
Car lors de la phase de l'opération, ta tache est terminé, elle n'est plus en attente.

Si tes acteurs ne sont pas les mêmes, il faut que tu utilise le même filtre d'acteur pour initialiser ta variable userList.

J'ai l'impression que dans " l'instances multiples executés en parallèles ", la variable en entrée liste (userlist) ne peut pas être assignée après, elle doit prendre une valeur par défaut.

En effet, elle ne peut pas, car tu l'utilises pour boucler dessus. C'est comme une boucle 'each' en JAVA, C# ou tout autre langage.

Je veux dire, après l'exécution de la tache "etape 1", on a la tâche "etape2" qui est en attente.

C'est étonnant en faite, parce que je peux recuperer la liste des acteurs de la tâche (etape2) en attente et j'arrive aussi a les envoyer des mails sauf que le mail n'est pas personnalisé (Meme mail pour tout les acteurs -> ici on parle vraiment de l'acteur mais non pas tout les utilisateurs ).

Et après avec ta methode on peut envoyer des mails personnalisés, mais cette fois on les envoie a tout les utilisateurs, (même ceux qui ne sont pas acteurs)

 

Dans ce cas, tu initialises la variable 'userslist' avec ta méthode à l'étape 1 dans une opération ou dans une étape intermédière de type scrypt. Puis tu utilises ma méthode.

d'accord, mercii