JPlatform 10 - API de gestion de l'organisation et des responsables de département

De plus en plus de fonctions ou modules de JPlatform participent à la gestion des processus de l'organisation (JLearn, JProcess, Gestion des congés, Recrutement, ...)

Pour cela, ces modules ont besoins de connaitre la structure de l'organisation et la relation hiérarchique entre les membres (qui est responsable de qui). Il est notamment important de pouvoir déterminer les membres qui composent l'équipe d'un responsable.

Jusqu'à présent ces informations étaient portées par le module Organigramme (FlowChart). En conséquence plusieurs modules étaient donc dépendant de ce module pour pouvoir fonctionner.

JPlatform 10 lève cette contrainte en ré-introduisant dans le coeur une API de gestion de la structure de l'organisation.

Celle-ci gère les informations suivantes :

  • La structure de l'organisation : identification d'un groupe servant de racine à l'organisation
  • Les responsables de groupe : sur chaque groupe de l'organisation, il est possible de préciser qui est le responsable. Le responsable est aussi responsable des sous-groupe qui n'ont pas de responsable précisé.
  • Les responsables de membres : par défaut le responsable d'un membre, est le responsable du groupe de l'organisation auquel est rattaché ce membre. Pour des cas compliqués qui ne peuvent pas être résolus par l'appartenance à un groupe de l'organisation (employés détachés, attachés à plusieurs groupes, ...) il faut pouvoir préciser pour un membre donné son responsable.

Grâce à ces informations, cette API permet déterminer notamment l'ensemble des collaborateurs d'un responsable.

Le module Organigramme se base sur cette nouvelle API.

1. Structures de données

1.1 Structure de l'organisation

La structure de l'organisation (département, services, filiales, ...) est représentée par des groupes.

Ces groupes sous tous fils d'un groupe parent qui est déclaré par la propriété $channel.organization.root-group qui est éditable dans le gestionnaire des propriétés (onglet Utilisateurs)

1.2 Responsable déclaré vs responsable calculé 

On stocke des responsables déclarés sur des groupes et des membres.

On calcule des responsables sur les groupes de l'organisation et les membres n'ayant pas de responsable déclaré.

1.3 Représentation du responsable déclaré d'un groupe ou d'un membre (declaredManager

Un champ declaredManager de type Member a été ajouté aux classes Group et Member.

Ce champ contient le manager explicite d'un groupe ou du membre.

Sur un groupe, le declaredManager représente responsable de tous les membres de ce groupe et des sous-groupes qui n'ont pas de manager déclaré.

Sur un membre, le declaredManager représente un responsable spécifique qui prévaut sur le responsable calculé des groupes auquel appartient le membre. Ce champ ne doit donc être utilisé que pour des cas particuliers.

2. Migration des données

L'ancienne propriété racine de l'organisation fournie par le module Organigramme (jcmsplugin.flowchart.root.id) n'est pas migrée et doit être re-saisie dans le gestionnaire des propriétés (onglet Utilisateurs) pour alimenter la nouvelle propriété $channel.organization-root-group

Les extradata/extradbdata des groupes et des membres sont migrés en lazy. Elles sont relues et transférées dans l'attribut declaredMember lors du l'accès via la méthode getDeclaredManager.

Lors de l'enregistrement du groupe ou du membre, le champs declaredMember est donc mis à jour (et les extradata=/=extradbdata ne seront alors plus jamais accédées).

3. Interface d'édition

L'interface d'édition d'un groupe comporte le champ Responsable.

L'interface d'édition d'un membre a été revue. Une nouvelle section Organisation (fieldset) regroupe les champs OrganisationServiceFonction et Responsable.

L'interface d'affichage du profil du membre en back-office reflète aussi cette structure.

Dans toutes ces interfaces, les champs Responsable n'apparaissent que si un groupe racine de l'organisation a été défini dans les propriétés.

4. Export CSV

Une nouvelle colonne Responsable affichant la valeur du champ declaredManager a été ajoutée aux export CSV des membres et des groupes.

5. Export XML / JSON

Les exports XML et JSON d'un membre ou d'un groupe comporte le champ declaredManager.

Il est possible de demander le related manager pour obtenir le manager effectif du groupe ou du membre.

Exemple : http://localhost:8080/en/rest/data/c_1234?related=manager

6. Impact sur le module Organigramme (FlowChart)

Le module Organigramme 4.0 (compatible uniquement JPlatform 10) ne fournit plus d'extradata/extradbdata pour saisir le manager dans l'édition d'un groupe ou d'un membre.

Par contre, une extradata est toujours fourni pour saisir l'assistant(e) sur un groupe.

7. Portail d'équipe

L'attribut teamPortal a été ajouté sur la classe Group. Celui-ci n'est proposé à la saisie dans l'éditeur de groupe que si il existe un groupe racine de l'organisation.

La méthode Member.getTeamPortal() retourne le portail d'équipe du membre. Celui-ci est déterminé en faisant un parcours en largeur du l'arbre des groupes. On commence donc par les groupes auquel est rattaché le membre puis on remonte niveau par niveau.

La portlet Redirection (PortletPortalRedirect) propose parmi les différents choix de redirection, la redirection vers le portail d'équipe du membre.

8. API

8.1 Recherche du responsable d'un groupe

La méthode Group.getManager() renvoie le responsable du groupe (déclaré ou déduis des groupes parents). Pour les groupes parents, on recherche le plus proche groupe parent ayant un manager déclaré.

La recherche se fait en largeur (et non en profondeur) dans l'arborescence des parents.

La méthode Group:isManagedBy(Member) renvoie true si ce groupe est effectivement géré par le membre fourni.

8.2 Recherche du responsable d'un membre

La méthode Member.getManager() renvoie le responsable du membre (déclaré ou déduis des groupes du membres)

La méthode Member.isManagerOf(Group) renvoie true si ce membre est le responsable du groupe fourni.

8.2 Recherche des membres gérés par un responsable

La méthode Member.getManagedMemberSet() renvoie l'ensemble des membres gérés directement par un responsable.

8.4 Correspondance avec l'API de FlowChartManager

Module Organigramme JPlatform 10
FlowChartManager.getRootGroup() Channel.getOrganizationRootGroup()
FlowChartManager.getFirstManager(Member) Member.getManager()
FlowChartManager.getFirstManager(Member, DataSelector) Member.getManager(DataSelector)
FlowChartManager.getDeclaredManager(Group) Group.getDeclaredManager()
FlowChartManager.isManager(Member, Group) Group.isManagedBy(Member) Member.isManagerOf(Group)
FlowChartManager.getManagedMemberSet(Member) Member.getManagedMemberSet()
FlowChartManager.getGroupSet(Member) Member.getOrganizationGroupSet()

En résumé...

De plus en plus de fonctions de JPlatform participent à la gestion des processus de l'organisation. JPlatform 10 introduit une nouvelle API qui permet connaitre la structure de l'organisation et la relation hiérarchique entre les membres (qui est responsable de qui).

Sujet
Produits
Publié

28/10/17

Rédacteur
  • Olivier Dedieu