Directory

The SDK API integrates a module that let the developers handle, directly from the Process extensions (or any other access point inside the portal) , the directory elements and the defined links between them.

The communication between Process and the directory is transparent via the SDK.

This layer simplifies the realization of administrative tasks such as:

  • the creation of users,groups,organizations;
  • the association between groups and users;
  • the implementation of security on the created elements.

This API can be fully integrated with the one of the workflow module.

Some definitions

Classes diagram

This classes’ diagram represents the main relations that exist between every classe of the directory system.

overview directory overview directory

Table of elements correspondence

Functional term Technical term SDK term JDO term Description
Organization Organization IOrganization Organization Organization/Structure
Group Group IGroup Group Group of people
User User IUser User Portal user
Localization Localization ILocalization Localization Place or geographical situation Examples: building,floor,office
Extended attributes Extended attributes Attributes IAttributes Directory extended attributes

Comment requêter sur l’annuaire ?

Depuis le code Java, il faut récupérer certains utilisateurs de l’annuaire, par rapport à un ou plusieurs filtres.

Dans ce cas, il est très déconseillé de monter en mémoire tous les utilisateurs de l’annuaire pour ensuite les parcourir et les filtrer. Cette logique peut être valide sur de petits annuaires, mais elle deviendra rapidement beaucoup trop consommatrice en mémoire (sans parler du temps d’exécution…).

Le cas de l’objet “utilisateur” de l’annuaire est traité ici, mais une logique équivalente peut être adoptée sur les autres types d’objets de l’annuaire.

Récupérer les éléments systèmes de l’annuaire (IProject, ICatalog, IResourceDefinition)

La protocole URI peut être à adapter selon l’id du projet sys_DirectoryProject (n’ayant pas d’organisation, il ne peut pas être appelé par un appel normal du SDK).

IContext iContext = getProjectModule().getContextByLogin("sysadmin");

IProject iProject = (IProject)getProjectModule().getElementByProtocolURI("uri://vdoc/project/3");
ICatalog iCatalog = getWorkflowModule().getCatalog(iContext, "sys_Directory", ICatalog.IType.STORAGE, iProject);
IResourceDefinition iResourceDefinition = getWorkflowModule().getResourceDefinition(iContext, iCatalog, "sys_User");

Filtrer les champs d’un objet de l’annuaire

La protocole URI peut être à adapter selon l’id du projet sys_DirectoryProject (n’ayant pas d’organisation, il ne peut pas être appelé par un appel normal du SDK).

Soit un attribut étendu nommé “ChampNombre” présent pour les utilisateurs de notre annuaire. Si on souhaite rechercher les utilisateurs possédant un champ nombre supérieur à 100, voici comment réaliser cette requête via un IViewController :

IContext iContext = getProjectModule().getContextByLogin("sysadmin");

IProject iProject = (IProject)getProjectModule().getElementByProtocolURI("uri://vdoc/project/3");
ICatalog iCatalog = getWorkflowModule().getCatalog(iContext, "sys_Directory", ICatalog.IType.STORAGE, iProject);
IResourceDefinition iResourceDefinition = getWorkflowModule().getResourceDefinition(iContext, iCatalog, "sys_User");

IViewController iViewController = getWorkflowModule().getViewController(IResource.class);
iViewController.addGreaterOrEqualConstraint("ChampNombre", 100);

Collection<IStorageResource> cUserExtendedAttributes = iViewController.evaluate(iResourceDefinition);
for (IStorageResource iStorageResource : cUserExtendedAttributes) {
	IUser iUser = getDirectoryModule().getUserByLogin(iStorageResource.getName());
	LOGGER.error(iUser.getFullName());
}

Filtres possibles

Nom du filtre Commentaire
addEqualsConstraint Contrainte d’égalité
addNotEqualsConstraint Contrainte d’inégalité
addGreaterConstraint Contrainte de supériorité
addGreaterOrEqualConstraint Contrainte de supériorité ou d’égalité
addLessConstraint Contrainte d’infériorité
addLessOrEqualsConstraint Contrainte d’infériorité ou d’égalité
addLikeConstraint Contrainte de similitude (voir le LIKE SQL)
addNotLikeConstraint Contrainte de non similitude (voir le LIKE SQL)
addInConstraint Contrainte de présence (dans une liste)
addNotInConstraint Contrainte d’absence (dans un liste)

Source : https://wiki.myvdoc.net/xwiki/bin/view/Dev+Floor/HowToRequestVDocDirectory