We apologize for untranslated text, you can use the Google Translation button to get an automatic translation of the web page in the language of your choice.

Workflow avec membre responsable comme valideur

Nicolas Delon · on 4/30/19 at 5:51 AM

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 · on 4/30/19 at 10:44 AM

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 · on 4/30/19 at 9:05 PM
#2

Bonjour,

nous aussi nous sommes intéressés.

fabrice mathieu · on 5/7/19 at 9:07 AM
0 pts
Sébastien Thorel · on 5/7/19 at 10:51 AM

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 · on 5/13/19 at 11:36 AM

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.

0 pts