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.
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