Activité appelante, Sous Processus et Acteurs

Dans le studio Bonita tu as en haut dans les menus “Aide > Logs du moteur”.
Copie colle la fin des logs pour voir.

Aucune indication dans les logs moteur alors que je suis sensé retrouvé les Trace de mes erreurs.

Lorsque j’affecte mon filtre sur une seule personne cela fonctionne mais quand j’affecte avec mon bout de code à un groupe cela ne fonctionne pas. Un problème dans la récupération de l’attribut concerné ? Ca irait plus vite si j’avais accès à tous les logs…

Je te conseil d’avancer par étapes. Au pire, ne met pas de filtre pour le moment et teste ton code et affiche le résultat dans un formulaire. Il faut que tu affiches l’ID de la personne qui lance le sous processus. Car si j ai compris, seule la personne qui lance ce sous processus doit pouvoir faire les actions et pas ceux de son groupe. Mais ceux de son groupe sont autorisés à faire le sous processus si c’est à leur tour de le faire.

Essaye encore un peu et ce soir je prend le temps avec toi pour le faire.

J’ai testé mon code java dans un programme eclipse basé sur ma base bonita et celui ci fonctionne.
Le but est d’autoriser seulement un groupe donné à pouvoir poursuivre la suite du processus initié.

Je tente de comprendre pourquoi il ne passe pas sous bontia Studio mais sans l’affichage des logs que j’ai mis dans ma classe c’est plus dur…

Alors après une batterie de test :

  • si je mets en dur dans le code le nom du groupe et que celui ci est un groupe à la racine, cela fonctionne
  • si je mets en dur dans le code le nom du groupe et que celui ci est un sous groupe cela NE fonctionne PAS
  • si je récupère dans le code l’attribut du filtre en entrée (le nom du groupe) et que celui ci est un groupe à la racine, cela NE fonctionne PAS

Donc comment utiliser correctement la fonction getGroupByPath ?
Et comment récupérer correctement l’attribut que l’on a défini dans l’implémentation du filtre ?

Oui mais a priori après avoir tout refait de A à Z (parce bon avec Bonita Studio c’est pas forcement super clean à chaque fois) je pense avoir trouvé une solution qui fonctionne grâce à toi.

Donc au final, suivant ton exemple j’ai mis un filtre que j’ai défini moi même au niveau de la lane du sous processus. Et ce filtre est le suivant :

try
{

		Group gp = getAPIAccessor().getIdentityAPI().getGroupByPath(getGroupeAutorise());
		
		List<User> tmp = getAPIAccessor().getIdentityAPI().getUsersInGroup(gp.getId(), 0, 20000,UserCriterion.FIRST_NAME_ASC);
	
		Iterator<User> it = tmp.iterator();
		List<Long> retour = new ArrayList<Long>();
		while (it.hasNext())
		{
			retour.add(new Long(it.next().getId()));
		}
		return retour;

	}

où groupeAutorise est le nom de l’attribut d’entrée du filtre d’acteur qui est rempli par une variable du sous processus, mappé au niveau de l’activité appelante au sein du processus principal.

Je pense que cela aurait été plus vite résolu si les logs écrits dans les classes java étaient disponibles quelque part !

En tout cas, je vais refaire quelques tests mais cela semble fonctionnel !

Merci !

import org.bonitasoft.engine.identity.UserCriterion; import org.bonitasoft.engine.identity.User; int nb = apiAccessor.getIdentityAPI().getNumberOfUsers(); long group = apiAccessor.getIdentityAPI().getGroupByPath("/acme").getId(); //ArrayList listUsersGr = apiAccessor.identityAPI.getUsersInGroup(group, 0, nb, UserCriterion.FIRST_NAME_ASC); return group;

je t ai remis un bout de code pour savoir comment utiliser le .getGroupByPath(). A mon avis, tu as dû oublié le “/” avant le nom. Par contre, je ne sais pas si ton code répond entièrement à tes attentes.

Ca marche avec ou sans le “/” du moins si c’est un groupe, faut que je refasse des tests avec les sous groupes.
Sinon a priori ca semble convenir à mes besoins
Ce sous processus est très important pour moi car il me permet de diviser par 4 la taille globale de mon processus.

Bonjour,

je comprends le concept mais j’ai du mal à le réaliser (malgré la doc de bonita). Donc si jamais tu as des exemples basiques concrets je suis preneur.

Merci,

Donc techniquement ce serait possible de récupérer l’ID du groupe auquel appartient la personne qui a fait la tâche avant et de filtrer ensuite par cet ID de groupe ?

Par contre les filtres il faut les mettre au niveau des activités tâches humaines, mais qu’en est il des autres type des tâches contenus dans le processus ?

Les filtres peuvent se mettre au niveau des tâches humaines ou sur les lanes. Pour les tâches de services, pas besoin de filtre car c’est une opération automatique non humaine.