Affichage de la liste des membres d'un espace collaboratif dans un "portlet Etat des membres"

Bonjour,

Je cherche à comprendre fonctionnellement la raison pour laquelle le "portlet Etat des membres" n'affiche pas toute la liste des membres de l'espace collaboratif ?

Par exemple sur l'espace Développement d'Altéa gold de la démo jalios il y a 38 membres dans l'espace collaboratif

https://demo.jalios.com/jcms/d_11620/fr/developpement-d-altea-gold 

il n'y a pourtant que 12 membres affichés dans le portlet état des membres (11 non connectés et 1 connectés)

 

De ce que je comprends, il semblerait que dans la JSP doPortletMemberStatusFullDisplay.jsp la

ligne memberSet = workspace.getMemberSet(true);

ne ramène pas la liste complète des membres de l'espace de travail ?

Si c'est bien cela pour quelle raison est-ce le cas ?

En vous remerciant par avance pour vos éclaircissements.

Cordialement,

CapturePortletEtatDesMembresJCMSJM Brun

4 pts
1 answer
Expert Olivier Jaquemet on 12/14/16 at 5:04 PM

Bonjour,

Il s'agit d'un bug, référencé ESN-406 , corrigé pour la prochaine version 5.4, et pour lequel un patch est disponible.

Pour l'explication technique : l'utilisation de la méthode workspace.getMemberSet(true); est à éviter à tout prix car son usage introduit généralement de mauvaise résultat par rapport à ce qui est attendu par le développeur. Nous allons la déprécier totalement (JCMS-5751).
L'utilisation du AllMemberQueryHandler est a priviligier.

Jean-Marc Brun on 12/14/16 at 5:55 PM

Merci beaucoup pour votre réponse

Pierre MORIN on 12/14/16 at 6:06 PM

Bonjour,
Ne serait-il pas possible de créer une méthode répondant aux attentes des développeurs en même temps que workspace.getMemberSet(true); se fait déprécier ?
En effet, l'utilisation du AllMemberQueryHandler va nuire à la lisibilité du code, tout en compliquant les développements sur JCMS (je penses notamment aux nouveaux développeurs JCMS, qui risquent d'être assez étonnés de ne pas trouver leur bonheur).

Pourriez-vous nous fournir un bout de code utilisant AllMemberQueryHandler qui serait équivalent à ce qu'un développeur attend généralement de workspace.getMemberSet(true); ?

Merci.
Cordialement

Expert Olivier Jaquemet on 12/14/16 at 6:29 PM

Merci Pierre pour ce retour. Je vous retourne la question, qu'attendriez vous comme comportement "générique" sur la méthode en question ?

  • usage de type compte et/ou contact ?
  • compte actif/inactif ou tous ?
  • avec les invités ou sans ?
  • quid des autres filtres ?

Mon opinion personnelle sur le sujet (non partagée par tous à la R&D Jalios) est qu'il ne me semble pas souhaitable de rajouter une énième signature de méthode dans Workspace

  • avec un cas qui ne serait pas vraiment générique,
  • dont la signature serait soit chargée et complexe, soit véhiculerait un POJO plus riche pour les réglages alors que c'est précisément l'objet du AllMemberQueryHandler
  • ne devrait jamais renvoyer tous les résultats (pour des raisons de performance) donc devrait recevoir des paramètres de pagination supplémentaires

Alors que par ailleurs, faire le code suivant me semble relativement simple , permet de sensibiliser le développeur sur l'aspect volumétrie (car pagination obligé), et surtout est très explicite sur le résultat attendu (à la lecture du code) :

  AllMemberQueryHandler amqh = new AllMemberQueryHandler();
  amqh.setWorkspace(...);
  amqh.setUsage(Member.USAGE_ACCOUNT | Member.USAGE_CONTACT | AllMemberQueryHandler.ALL_USAGE);
  amqh.setEnabled(TRUE | FALSE | null);
  // setStart() / setPageSize() / setSort() ...
  PageResult<Member> pr = amqh.getPageResult();  
  pr.getTotalSize(); // nombre de résultat total
  pr.getResultList(); // page courante de résultat

Dans le cadre de l'amélioration CSP-410, l'invocation du AllMemberQueryHandler va être utilisée.

Expert Sylvain DEVAUX on 12/14/16 at 6:37 PM

Le monde est petit, je suis jsutement en train de corriger CSP-410 :)

Pierre MORIN on 12/14/16 at 6:46 PM

Merci pour cette réponse très complète !

Pour ma part, j'attendais de "workspace.getMemberSet(...)" qu'il me soit renvoyée la "liste" complète des membres faisant partie du WS.
J'entends par là tous les Member faisant partie d'au moins 1 groupe associé à cet espace. L'inclusion des contacts ne me semble pas forcément inutile.
Pour ma part, j'aurais plutôt mis 2 paramètres booléens à la méthode : un pour inclure les DBMember et 1 pour inclure les contacts. Mais, très franchement, je ne suis pas sûr que ce soit pertinent.

J'entends bien que ceci peut être gourmand et poser des soucis de performance, cependant il peut arriver assez fréquemment qu'il soit nécessaire de récupérer la totalité des membres associés à un espace (pour envoyer une alerte, par exemple), et, dans ce cas, l'utilisation de AllMemberQueryHandler n'est pas des plus aisée, surtout pour les nouveaux arrivants (qui ne connaissent généralement même pas son existence).

En gros, le soucis me semble être au niveau du 3ème point de votre seconde liste : nous pouvons vite chercher une méthode qui ramène tous les utilisateurs d'un WS, alors que justement il est souhaitable d'éviter de faire ce genre d'appel. ;-)

Expert Olivier Jaquemet on 12/16/16 at 12:50 PM

Merci Pierre pour ce retour.
Je le prendrais en compte si nous décidions d'exposer une méthode utilitaire plus simple (même si pour l'instant je reste sur ma position et je ne pense pas que ça soit souhaitable).

Pierre MORIN on 12/16/16 at 2:58 PM

Une bonne vieille méthode dans le Channel ou tout autre classe utilitaire pourrait suffire, aussi. ;-)

Expert Olivier Jaquemet on 12/16/16 at 3:03 PM

A lire cette réflexion, je pense que vous avez bien cerné ma réflexion ;) JCMS est déjà assez en mode "spaghetti code" pour qu'on évite de rajouter une méthode utilitaire dont on est pas sur qu'elle soit générique. (d'autant plus quand AllMemberQueryHandler peut être utilisé pour ce besoin).

Pierre MORIN on 12/16/16 at 3:11 PM

Par contre, ça me fait penser : existe t-il une "documentation" référençant des cas d'usages de l'API assez courantes, comme "comment récupérer tous les membres d'un WS", "comment récupérer la liste des membres actuellement connectés", "comment filtrer les résultats selon un paramètre GET spécifique", etc ?

Océane Puech on 1/2/17 at 5:18 PM

Je réagis sur la dernière remarque, ce serait intéressant outre le catalogue API accessible sur la plateforme de connaître un peu ce qui est possible/ce qui a déjà été fait. Cela existe ?

Manager Ronan Kerdudou on 1/3/17 at 12:03 PM

Bonjour,

Lors de la Formation Développeur nous sensibilisons les développeurs sur la manière de trouver l'information, via la documentation, la Javadoc, le code accessible en exemple.

La richesse du produit est importante et il est difficile de détailler tous les cas d'utilisation, fonctionnels, paramétrages techniques, méthodes disponibles dans les API et les développements spécifiques réalisables, notamment la majorité des developments spécifiques sont réalisées par les société de services et nous n'en avons pas toujours connaissance.

Cependant nous travaillons continuellement à l'amélioration de la documentation, que nous mettons à disposition sur le présent site. Et notamment nous enrichissons quotidiennement la base de connaissances pour répondre le plus efficacement aux questions les plus importantes et aux questions récurrentes.

Pierre MORIN on 1/9/17 at 12:01 PM

Merci Ronan, je n'avais pas entendu parler de cette base de connaissances avant.

1 pt