Workflow avec membre responsable comme valideur

Nicolas Delon · le 30/04/19 à 05:51

Bonjour,

Nous souhaitons mettre en place un workflow dans lequel un rédacteur aurait la possibilité de faire valider sa publication (en l'occurence un formulaire jprocess) par le responsable de son service. A chaque service, un rédacteur différent et un responsabe de service différent. Serait il possible d'utiliser pour cela le responsable renseigné sur le membre en question (Editer membre / Organisation / Responsable) ? Autrement reformulé, y aurait il un lien possible entre le rôle présent dans un workflow et le respoinsable du membre ou une autre possibilité ?

responsable

12 pts
Sébastien Thorel · le 30/04/19 à 10:44

Bonjour !

C'est possible via un développement spécifique dans un datacontroller avant l'écriture du JProcessRequest. 

Si ça vous intéresse, j'ai un exemple de code.

#1

Salut Sébastien,

Je te remercie pour ta réponse et t'avoue que nous sommes très interessé par l'exemple de code que tu proposes !

Nicolas Delon · le 30/04/19 à 21:05
#2

Bonjour,

nous aussi nous sommes intéressés.

fabrice mathieu · le 07/05/19 à 09:07
0 pt
Sébastien Thorel · le 07/05/19 à 10:51

Désolé pour la réponse tardive...

Soit un workflow avec en état initial "en attente de validation n+1", avec 3 rôles dont un rôle valideur, affecté en workflow d'instance au JProcessRequest.

mceclip0

Ce rôle valideur doit être configuré en rôle ouvert obligatoire dans votre espace et lié à un groupe contenant tous les potentiels valideurs.

Un JProcessRequestDataController est défini avec une surcharge de beforeWrite :

JProcessRequest demande = (JProcessRequest) data;

if (op == OP_CREATE || op == OP_UPDATE) {
						
			
   String wfValidationN1 = channel.getProperty(WORKFLOW_VALIDATIONN1_ID);
			
   // Si formulaire avec validation n+1 et en étape 1, il faut changer le destinataire
   if (demande.getWorkflowId().equals(wfValidationN1) 
	 && 
 Integer.toString(demande.getPstatus()).equals(channel.getProperty(WORKFLOW_VALIDATIONN1_STATUT))) {
				
          Member superieurHierarchique = IntranetUtils.getSuperieurHierachique(mbr);
				
          if (Util.notEmpty(superieurHierarchique)) {
               HashMap<String, TreeSet<Member>> originalRoleMap = demande.getRoleMap();
	       HashMap<String, Object> newRoleMap = new HashMap<String, Object>();
	       if (Util.notEmpty(originalRoleMap)) {
			 newRoleMap.putAll(originalRoleMap);
	       }
	       demande.setRoleMap(newRoleMap);
	
	       String roleValideur = wfValidationN1 + "-" + 
                    channel.getProperty(WORKFLOW_VALIDATIONN1_ROLE);
	       demande.unassignRole(roleValideur);   // Pour réinitialiser complètement ce rôle (il pourrait y avoir plusieurs membres affectés...)
	       demande.assignRole(roleValideur, superieurHierarchique);
	   }
     }
}
  • WORKFLOW_VALIDATIONN1_ID = id de votre workflow (ex: jprocess_demande__demande_avec_validation_n1)
  • WORKFLOW_VALIDATIONN1_STATUT = valeur du statut du workflow (ex: -201)
  • WORKFLOW_VALIDATIONN1_ROLE = id du rôle valideur dans le workflow (ex: valideur)

 

Je ne dis pas que c'est la solution idéale mais ça fonctionne chez nous.

Je suis preneur si vous avez des améliorations.

1 pt
Sébastien Raphel · le 13/05/19 à 11:36

La seule solution disponible actuellement pour répondre à ce besoin est bien de passé par un développement spécifique d'un DataController.

C'est d'ailleurs ce qui est fait dans le module Demande de Congés pour la validation hiérarchique.

1 pt