application complet dans Bonita

1
0
-1

Bonjour à tous,

j'ai une application à créer dans Bonita mais je ne c'est si je peut tout faire dans Bonita sans utilisation d'une application externe:

-un processus qui permet de créer des utilisateurs avec adresse mail et mot de passe par un compte administrateur. - Et ces utilisateurs pourront se connecter et déclencher des processus qui leurs seront attribuer et ils auront la possibilité de créer d'autres utilisateurs avec une hiérarchie pour chaque utilisateur de voir les processus de ses utilisateurs crées et à l'administrateur de tout voir.

Je ne c'est pas si avec Bonita je peut gérer les comptes automatiquement avec des mots de passe génériques ou si je suis obligée de le faire en externe et connecté mon application(exemple Maven ou Exo) avec BONITA.

Je sollicite votre aide pour avoir les idées claires svp.

Merci d'avance.

Comments

Submitted by yannick.lombardi on Tue, 07/29/2014 - 11:36

Il y a tout ce qu'il faut dans Bonita pour créer et gérer les utilisateurs. Pour cela il faut utiliser les fonctions de l'api Identity : http://documentation.bonitasoft.com/javadoc/api/6.3/index.html

Pour les détails sur l'utilisation de cette api, il y a déjà plein de sujet à ce propos sur le forum.

Pour l'histoire de la hiérarchie, je pense que ça peut se faire en créant des Groupes et des Sous-Groupes d'utilisateurs.

Submitted by wakhafall on Tue, 07/29/2014 - 11:44

Merci Yannick de votre réponse rapide,

si j'ai bien compris je peux utilisé l'api identity pour créer un utilisateur et l'affecté à un groupe ?

Submitted by yannick.lombardi on Tue, 07/29/2014 - 11:52

Oui c'est cela. Par exemple pour créer un utilisateur dans un groupe et avec un certain role, on peut utiliser le script groovy suivant :

import org.bonitasoft.engine.identity.User;
import org.bonitasoft.engine.identity.Group;
import org.bonitasoft.engine.identity.Role;
User user = apiAccessor.getIdentityAPI().createUser('login','password');
Group groupe = apiAccessor.getIdentityAPI().createGroup('nomGroup', 'nomGroupeParent');
Role role = apiAccessor.getIdentityAPI().createRole('nomRole');
apiAccessor.getIdentityAPI().addUserMembership(user.getId(), groupe.getId(), role.getId());
Submitted by wakhafall on Tue, 07/29/2014 - 12:06

merci je comment mieux juste une autre chose : comment je peux affecter mes processus à cet utilisateur crée par votre script groovy ?

Submitted by yannick.lombardi on Tue, 07/29/2014 - 15:19

Pour affecter un processus à un utilisateur il faut utiliser les filtres d'acteurs (dans l'onglet Acteur d'une tâche). Il suffit de choisir un filtre de type "single user" puis de passer en paramètre l'id de cette utilisateur. Par exemple en utilisant :

apiAccessor.getIdentityAPI().getUserByUserName('login');
Submitted by wakhafall on Tue, 07/29/2014 - 15:32

Merci bien Yannick je vais suivre ce logique pour tout faire dans Bonita.

Submitted by wakhafall on Wed, 07/30/2014 - 12:08

Bonjour Yannick, un autre coût de main svp:

voici le code de mon script groovy que j'ai mis dans un connecteur, je récupéré le login et le password dans un formulaire de la tâche qui précède mais quand je test je ne vois pas l'effet de la création de l'user, suis bloquée à cet étape de test.

import org.bonitasoft.engine.identity.User;
import org.bonitasoft.engine.identity.Group;
import org.bonitasoft.engine.identity.Role;
protected void executeConnector() throws Exception
{
User user = apiAccessor.getIdentityAPI().createUser('login','password');
Group groupe = apiAccessor.getIdentityAPI().createGroup('nomGroup', 'acem');
Role role = apiAccessor.getIdentityAPI().createRole('member');
apiAccessor.getIdentityAPI().addUserMembership(user.getId(), groupe.getId(), role.getId());
}

Merci d'avance.

Submitted by yannick.lombardi on Wed, 07/30/2014 - 14:10

Pour voir le nouvel utilisateur crée il faut aller sur le portail en étant connecté avec un profil Administrateur. Puis aller dans l'onglet Organisation et enfin dans Utilisateurs. S'il n'y ai pas, c'est qu'il y a eu une erreur quelque part, du coup il faudra regarder dans les logs pour voir où est le problème. Pour accéder aux logs, il faut aller sur le studio Bonita BPM, dans l'onglet Help puis afficher les logs "Bonita BPM Engine log". L'erreur sera surement vers la fin du fichier.

Par contre je ne vois pas trop l'utilité de créer un connecteur pour créer un utilisateur. Un simple script groovy (dans l'onglet Operation d'une tache de type script) me parait suffisant pour faire cela. Et dans l'exemple que tu as posté, il faut bien faire attention à ce que le groupe "acem" existe déjà, sinon c'est un plantage assuré du script.

3 answers

1
0
-1
This one is the BEST answer!

J'ai pas modifier les logs voici mon code :

import org.bonitasoft.engine.identity.User;
import org.bonitasoft.engine.identity.Group;
import org.bonitasoft.engine.identity.Role;
protected void executeConnector() throws Exception
{
User user = apiAccessor.getIdentityAPI().createUser(couriel,raisonSocial);
Group groupe = apiAccessor.getIdentityAPI().createGroup('nomGroup', 'acme');
Role role = apiAccessor.getIdentityAPI().createRole('member');
apiAccessor.getIdentityAPI().addUserMembership(user.getId(), groupe.getId(), role.getId());
}

Mes variales couriel et raisonSocial sont globales même si je mets des valeurs statiques c'est sans résultats

pour les logs

Root exception: java.lang.NoClassDefFoundError: org/eclipse/equinox/http/jetty/JettyConfigurator at org.eclipse.help.internal.server.JettyHelpServer$StopServerThread.run(JettyHelpServer.java:96) Caused by: java.lang.ClassNotFoundException: org.eclipse.equinox.http.jetty.JettyConfigurator at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) at java.lang.ClassLoader.loadClass(Unknown Source) ... 1 more

!ENTRY org.bonitasoft.studio.engine 1 0 2014-07-31 13:18:36.437 !INFO Building bar for process Pool001 (1.0 )...

Comments

Submitted by yannick.lombardi on Thu, 07/31/2014 - 14:40

Apparemment tu es sur la version 5.X de Bonita. Si ça se trouve, ça fonctionne différemment sur cette version. Je pensais que tu étais sur la version 6.X. Ce que j'ai indiqué ne fonctionne pas sur la "vieille" version de Bonita.

Submitted by wakhafall on Mon, 08/04/2014 - 12:07

J'utilise la version 6.2.2

Est juste le fait que je regroupe le tout dans une méthode de type de retour void?

Je suis toujours bloqué par cette création d'user.

Merci d'avance.

1
0
-1

J'ai conclus que si je passe le login dans un champs text ça fonctionne pas , alors quand je le passe en liste déroulante ça marche !

Moi j'ai une tâche avant où je définis le Login (dans un champs texte), et j'attribue la tâche d'aprés au user que je viens de créer et dans ce cas ça fonctionne pas ! Y a-t-il une modification à faire au niveau de la variable (login) définie dans le script ?

J'ai essayé avec les " " où ' ' est apparemment pareil !

Comments

Submitted by yannick.lombardi on Thu, 07/31/2014 - 13:56

Il ne me semble pas qu'il y ai besoin de modifier quoi que ce soit. Si c'est un variable de type string, il n'y a pas besoin d'ajouter des "" ou ''. Il suffit de passer le nom de la variable en paramètre.

Submitted by rahmi.hichem on Thu, 07/31/2014 - 14:05

Je confirme ! il y'a quelque chose qui ne vas pas (le compte est créé j'en suit certain vu que je peux me connecter dessus juste aprés). Je vais voir ce qui ne vas pas. Je vous remercie en tous cas

1
0
-1

Bonjour,

Pour l'implémentation du filtre user j'ai bien suivi votre logique mais quand mon user se connecte il trouve pas la tâche à exécuter !?

Comments

Submitted by yannick.lombardi on Wed, 07/30/2014 - 17:14

En étant en profil administrateur, est ce que la tâche est bien présente ? Et si oui, elle est noté comme étant assignée à quelqu'un ?

Si ce n'est pas le cas, il y a surement eut une erreur quelque part. Il faut donc regarder dans les logs.

Submitted by rahmi.hichem on Wed, 07/30/2014 - 17:28

est ce bien ça ce qu'on doit mettre au niveau de l'ID user dans le filtre

return apiAccessor.getIdentityAPI().getUserByUserName(u_login).getId();
Submitted by yannick.lombardi on Wed, 07/30/2014 - 17:31

Oui, c'est ça que j'utilise. Par contre il faut cela peut planter si l'utilisateur n'existe pas. En solution à cela, j'utilise un try/catch de façon à attribuer la tâche à un autre utilisateur (dont je sais qu'il existe) au cas où l'utilisateur premier n'est pas trouvé.

Submitted by rahmi.hichem on Thu, 07/31/2014 - 10:59

Justement je me connecte avec le Login et le mot de passe de l'utilisateur que je viens de créer et je ne trouve rien alors que sur la tâche en question je mets bien le filtre avec le code que j'ai postuler ci-dessus ! Pouvez vous me faire un .proc de votre exemple ?

Submitted by yannick.lombardi on Thu, 07/31/2014 - 11:18

Voici un .proc qui fait cela : http://paf.im/DOGXH

Submitted by wakhafall on Thu, 07/31/2014 - 11:24

Bonjour Yannick, j'ai utilisé un connecteur du fait c'est à partir d'une formulaire d'un process éxécuté par une autre user que je récupère le login et password. j'ai testé avec une tâche script dans l'onglet opération mais j'ai que c'est des variables à mettre à jour, je ne vois pas ou mettre mon script. Mon user n'est toujours pas créer et les logs ne me signal pas d'erreurs juste ces deux lignes: !ENTRY org.bonitasoft.studio.engine 1 0 2014-07-31 11:08:15.074 !INFO Build complete for process Pool001 (1.0 ). Un coût de main si possible merci

Submitted by yannick.lombardi on Thu, 07/31/2014 - 11:33

Bonjour wakhafall,

Peux tu poster ton code complet (récupération du login/password + création de l'utilisateur). Comme ça on pourra voir si le soucis vient de là.

C'est étrange que tu n’aies que cela dans les logs. As tu modifiés le fichier de configuration des logs (loggin-properties) ?

Submitted by wakhafall on Thu, 07/31/2014 - 11:54

Voici mon code compet :

import org.bonitasoft.engine.identity.User;
import org.bonitasoft.engine.identity.Group;
import org.bonitasoft.engine.identity.Role;
protected void executeConnector() throws Exception
{
User user = apiAccessor.getIdentityAPI().createUser(couriel,raisonSocial);
Group groupe = apiAccessor.getIdentityAPI().createGroup('nomGroup', 'acme');
Role role = apiAccessor.getIdentityAPI().createRole('member');
apiAccessor.getIdentityAPI().addUserMembership(user.getId(), groupe.getId(), role.getId());
}

J'ai deux tâches le premier humain avec un formulair(couriel et raisonSocial) c'est des variables globales du process renseigné dès l’exécution du process. pour le fichier de configuration j'ai rien changé aussi et même si je teste sans utilisé les données de mon formulaire cela ne marche pas.

Submitted by yannick.lombardi on Fri, 08/01/2014 - 17:10

Je ne vois pas du tout d'où peut provenir le problème. S'il n'y a rien dans les logs, c'est qu'il n'y a pas d'erreur. Mais si ça ne fonctionne pas, c'est qu'il y a une erreur.

Est ce que tu pourrais exporter ton process en .bos ? Ca nous permettrait de le tester pour voir d'où vient le soucis.

Submitted by wakhafall on Tue, 08/05/2014 - 15:56

création user automatique Merci Yannick pour ton aide voila mon fichier bos

Submitted by yannick.lombardi on Tue, 08/05/2014 - 16:11

Je viens de tester ton processus sans y toucher et j'ai cette erreur dans les logs :

AVERTISSEMENT: THREAD_ID=104 | HOSTNAME=W28323 | TENANT_ID=1 | org.bonitasoft.engine.expression.exception.SExpressionEvaluationException : "PROCESS_DEFINITION_ID=7322932459237758601 | PROCESS_NAME=Pool001 | PROCESS_VERSION=1.0 | PROCESS_INSTANCE_ID=18 | ROOT_PROCESS_INSTANCE_ID=18 | FLOW_NODE_DEFINITION_ID=-6126911940336084817 | FLOW_NODE_INSTANCE_ID=87 | FLOW_NODE_NAME=Étape2 | CONNECTOR_DEFINITION_IMPLEMENTATION_CLASS_NAME=test1 | CONNECTOR_INSTANCE_ID=15 | groovy.lang.MissingMethodException: No signature of method: org.bonitasoft.engine.identity.UserCreator.getId() is applicable for argument types: () values: []
Possible solutions: getAt(java.lang.String), wait(), find(), grep(), wait(long), each(groovy.lang.Closure)"

Ca dit qu'il n'existe pas de methode getId() pour un objet de type UserCreator. Dans mon code j'avais indiqué qu'il fallait faire "user.getId()" et non "userCreator.getId()". C'est donc ça l'erreur.

J'ai donc modifié ton script :

import org.bonitasoft.engine.identity.ContactDataCreator;
import org.bonitasoft.engine.identity.UserCreator;
import org.bonitasoft.engine.identity.Group;
import org.bonitasoft.engine.identity.Role;
import org.bonitasoft.engine.identity.User;

ContactDataCreator contactDataCreator = new ContactDataCreator();
 
contactDataCreator.setEmail(couriel);
 
UserCreator userCreator = new UserCreator(raisonS, raisonS);
userCreator.setPersonalContactData(contactDataCreator);
userCreator.setFirstName(nom);
userCreator.setLastName(prenom);
 
User user = apiAccessor.getIdentityAPI().createUser(userCreator);

Role role = apiAccessor.getIdentityAPI().createRole('distributeur');// assigné l'user a un role
Group groupe = apiAccessor.getIdentityAPI().createGroup('groupDistributeur', '');  //créé un sous-groupe pour l'user'
apiAccessor.getIdentityAPI().addUserMembership(user.getId(), groupe.getId(), role.getId()); // ajouter le tout

Et maintenant il n'y a plus d'erreur, ça fonctionne nickel.

PS : J'ai appris un truc au passage, je ne savais pas qu'on pouvait faire des connecteurs groovy de cette manière. Merci pour l'info.

Submitted by wakhafall on Tue, 08/05/2014 - 16:52

Nikel alors et ce la marche de mon coté je prêterai plus d'attention aux logs seulement je ne comprends pas pourquoi si j'essaye de me connecter avec l'utilisateur crée j'y arrive pas? Tu a pu te connecté avec?

Submitted by yannick.lombardi on Tue, 08/05/2014 - 17:02

Ah oui, c'est normal. C'est le truc auquel je ne pense jamais. Il faut aussi attribuer un profil à l'utilisateur. A la fin de ton script il faudrait rajouter la ligne suivante :

apiAccessor.getProfileAPI().createProfileMember(1, user.getId(), 0, 0);

Le 1 correspond à l'id du profil user. Et les deux 0 correspondent au groupe et au role (mais on les laisse à 0 car là c'est un utilisateur qu'on crée).

Submitted by wakhafall on Mon, 08/11/2014 - 15:26

Bonjour Yannick, merci sa marche nickel. Mais serait-il possible d'assigner une tâche d'un autre processus à cet utilisateur créer?

J'ai testé mais cela bloque au niveau du filtre car je ne sais pas d'avance le login et je ne peux pas utiliser les variables globales pour l'estoquer.

Submitted by yannick.lombardi on Mon, 08/11/2014 - 16:05

Bonjour.

Est ce que tu veux lui attribuer une tâche directement après l'avoir créé (dans le même process) ? Si oui, je te conseil de simplement retourner l'id de l'utilisateur après l'avoir crée et de le stocker dans un variable. Comme ça tu n'as pas besoin de connaitre son login.

Une autre idée pourrait être de récupérer le nombre d'utilisateur en supposant que celui que tu viens de créer sera le dernier. Mais ça implique qu'il n'y ait aucun trop dans la numérotation et il faut être sûr qu'il ait bien le dernier id (trop risqué à mon avis).

Submitted by wakhafall on Mon, 08/11/2014 - 16:20

J'ai ta première proposition cela marche si je reste sur le même ce process mais ce que je veux c'est que cela ne soit pas dans le même process car cet utilisateur plusieurs autre process qui lui seront assigné.

La dernier solution que j'ai trouvé c'est une tâche d'émission message qui récupère l'id de l'utilisateur et le transmet au autres process par tache de réception pour pouvoir implémenter le filtre. je pense me faire comprendre.

Submitted by yannick.lombardi on Mon, 08/11/2014 - 16:22

C'est effectivement la solution que j'allais proposer si l'affectation se fait dans un autre processus. L'envoi de messages comportant l'id de l'utilisateur est surement la meilleur idée.

Submitted by wakhafall on Mon, 08/11/2014 - 16:30

Merci j'ai testé et cela marche

Notifications