Role

Recover roles

From a ICatalog object, you may recover a role or every role of a catalog.

public void catalog_useRoles( ICatalog catalog ) {
	// retrieving the group of roles from an application
	Collection<IRole> roles = catalog.getRoles();
	for ( IRole role : roles) {
		System.out.println( role.getLabel() + " [" + role.getName() + "]" );
	}
}

Récupérer les utilisateurs d’un champ rôle

Il peut être utile de récupérer les utilisateurs d’un champ rôle :

  • pour connaitre les utilisateurs qui vont réellement intervenir quand une tâche sera attribué à ce rôle.
  • pour connaitre les utilisateurs qui ont déjà été évalué dans ce rôle.
@Override
public boolean onAfterLoad() {
	// le champ role stock directement des IUser
	Collection<? extends IUser> users = (Collection<? extends IUser>)getWorkflowInstance().getValue("Champrolemultiple");

	System.out.println("List des utilisateurs du rôle : ");
	for (IUser user : users) {
		System.out.println(user.getLogin());
	}

	return super.onAfterLoad();
}

Ajouter des opérateurs dans un rôle

Le code présenté ici vous permet simplement d’ajouter des membres à un IOperatorRole.

Note

On parle bien ici d’un rôle dans l’administration des processus, on parle donc de l’objet de définition et non dynamique.

Ici, on ne valorise pas un rôle pour un document, on ajoute des membres dans l’administration du rôle.

Exemple : “sysadmin” a été supprimé d’un rôle, on ne peut plus le rajouter : voici comment faire !

Mise en place

Le code présenté ici pourra être appelé depuis un code Java ou directement en script depuis la configuration globale ou un autre script.

On passe à la méthode “addMembersToRole” :

  • Le nom système de l’organisation
  • Le nom système du projet
  • Le nom système du catalog (groupe de processus)
  • Le nom système du rôle
  • Les membres que l’on veut ajouter : logins séparés par des “;”
Info

La méthode peut être exécuté dans un contexte transactionnel ou non.

Packages.com.vdoc.role.helpers.RoleHelper.addMembersToRole("DefaultOrganization", "DefaultProject", "MyCatalog", "MyRole1", "sysadmin");
Packages.com.vdoc.role.helpers.RoleHelper.addMembersToRole("DefaultOrganization", "DefaultProject", "MyCatalog", "MyRole2", "user1;user2");

Le code associé est le suivant :

/**
 * Used to add members in administration catalog role
 *  
 * @param organizationName
 * @param projectName
 * @param catalogName
 * @param roleName
 * @param members logins separated by ;
 */
public static void addMembersToRole(String organizationName, String projectName, String catalogName, String roleName, String members) {
	boolean iHandleTransaction = false;
	IDirectoryModule iDirectoryModule = Modules.getDirectoryModule();
	IProjectModule iProjectModule = Modules.getProjectModule();
	IWorkflowModule iWorkflowModule = Modules.getWorkflowModule();
	try	{
		IContext iContext = iDirectoryModule.getContextByLogin("sysadmin");
		
		IOrganization iOrganization = iDirectoryModule.getOrganization(iContext, organizationName);
		IProject iProject = iProjectModule.getProject(iContext, projectName, iOrganization);
		ICatalog iCatalog = iWorkflowModule.getCatalog(iContext, catalogName, iProject);
		
		if (!iWorkflowModule.isTransactionActive())	{
			iWorkflowModule.beginTransaction();
			iHandleTransaction = true;
		}
		
		IOperatorRole iOperatorRole = iWorkflowModule.getOperatorRole(iContext, iCatalog, roleName);
		if (iOperatorRole == null) {
			throw new Exception("Unable to find role by name");
		}
		
		// Split users
		String[] tLogin = members.split(";");
		for (String login : tLogin)	{
			iOperatorRole.addMember(iWorkflowModule.getUserByLogin(login));
			iOperatorRole.save(iContext);
		}
		
		if (iHandleTransaction)	{
			iWorkflowModule.commitTransaction();
		}
	} catch (Exception e)	{
		String message = e.getMessage();
		if (message == null) {
			message = "";
		}
		log.error("Error in RoleHelper addMembersToRole method : " + e.getClass() + " - " + message);
		
		if (iHandleTransaction)	{
			iWorkflowModule.rollbackTransaction();
		}
	} finally {
		Modules.releaseModule(iDirectoryModule);
		Modules.releaseModule(iProjectModule);
		Modules.releaseModule(iWorkflowModule);
	}
}

Sources :