Notification à un utilisateur précis - Bonita Bpm 7.5.4

Bonjour,
Sur mon formulaire d’instanciation, l’initiateur du processus choisi l’utilisateur qui devra exécuter la prochaine tâche, bien attendu avec la configuration du filtre utilisateur unique sur cette tâche.

Ma difficulté est toujours celle-ci : comment configurer où récupérer simplement l’adresse mail de cet utilisateur, pour mon connecteur mail, et le notifier avant que cette tâche soit disponible dans son panier?

Merci,

Pour récupérer ton email:

ContactData contact=apiAccessor.getIdentityAPI().getUserContactData(user.getId(), false)
email = contact.getEmail());

Bonjour wnkela,
Inspire toi de ce bout de code ci-dessous: ici on récupère l’email du manager de celui qui exécute une tache donnée pour lui envoyer une notification à la suite dans un connecteur e-mail. Donc tu peut utiliser une variable de processus pour stocker le choix de ton utilisateur et utiliser la methode getUserByUsername() en cherchant à récupérer que l’id qui est de type Long. C’est cet id qui sera utilisé dans le SingleUser dans la suite.

import org.bonitasoft.engine.identity.ContactData;
import org.bonitasoft.engine.identity.User

User user = BonitaUsers.getUser(apiAccessor, taskAssigneeId);
long userManagerId = user.getManagerUserId() ;
return apiAccessor.getIdentityAPI().getUserContactData(userManagerId, true).email;

Bon dev à toi !
Franck,

Plusieurs marqueurs sur cette ligne

  • ContractData Ne peut pas être résolu. Ça peut conduire à des erreurs d’exécution.
  • Groovy:expecting EOF, found ‘contract’ @line1, column 20.

N’oublie pas l’import:
import org.bonitasoft.engine.identity.ContactData

Ok mais celui-ci est toujours là
Groovy:expecting EOF, found ‘contact’ @line1, column 20.

Bizarre,
Normalement, tu as juste à faire:

import org.bonitasoft.engine.identity.ContactData

ContactData contact=apiAccessor.getIdentityAPI().getUserContactData(user.getId(), false);
return contact.getEmail();

Plusieurs marqueurs sur cette ligne

  • user Ne peut pas être résolu. Ça peut conduire à des erreurs d’exécution.
  • implémenter groovy.lang.Script.run.

Mon objet user fait référence à un utilisateur que j’ai déjà récupérer.
Toi, il faut que tu remplace : user.getId() par l’id de ton utilisateur.

Comment le (id) récupérer avec ce script s’il est stocké dans la variable métier

mavariableMetier.mavaleur

Si ton objet métier s’appelle ‘user’ tu fais ‘user.maValeurQueJeVeuxUtiliser’.

org.bonitasoft.engine.identity.ContactData
ContactData contact=apiAccessor.getIdentityAPI().getUserContactData(taskAssignee.firstStepUserId(), false);
return contact.getEmail();

Avec taskAssignee comme ma variable métier, il n’y a pas de message d’erreur dans le script mais mon connecteur échoue tjrs!

Et c’est quoi comme erreur cette fois?

Pas d’erreur mais Le connecteur échoue tjrs

Bonjour,
Je vous ai pas bien compris.
La problématique est que j’ai l’id de celui qui va exécuter la prochaine tâche et je vais qu’il soit notifier avant que la tâche soit disponible dans son panier.

OK, je pense que ceci te retourne l’adresse e-mail de l’utilisateur dont l’id a été passé en paramètre:

return apiAccessor.getIdentityAPI().getUserContactData(monId, true).email;

Ça marche mais seulement si sur le Input du contrat d instanciation l attribut id est de type LONG. Et avec long comme pour id j’ai tjrs un message d’avertissement «si e processus est instancié par un formulaire, n utiliser pas d input de contrat de type Long…

Alors ce msg avertissent et pourquoi les notifications ne passe pas quand ce input de contrat est de type text?

Change ta valeur de retour en String, et dans ton appel, refais passer ton String en Long.

Je vous ai pas trop bien suivi. De quelle valeur de retour faites vous allusion? Dans ma base de données métier, mon attributId est en Long, et dans le input du contrat lorsqu’il est en String, les notifications aux utilisateurs ne passent pas et quand je le mets en Long, ça marche. Si vous pouvez être plus explicite svp.

le Input du contrat d instanciation l attribut id est de type LONG
Tu change le contrat pour qu’il prenne un String, et lorsque tu en as besoin, tu le repasse en Long: Long.valueOf(monId).

Mais si c’est juste pour une histoire de message d’avertissement, c’est pas bien grave.