Workflow Assigne Search

cancel
Showing results for 
Search instead for 
Did you mean: 
sibe
Active Member

Re: Workflow Assigne Search

Exactement c'est ce que j'ai constaté aussi,  mais là en entrée je n'ai que des utilisateurs à ma portée, donc finalement je recupère pas un site mais un tableau de site via

var sites = siteService.listUserSites(authorityName);
Ce que je pensais faire aussi, c'est d'ajouter la liste des membres de sites récupérés dans un objet de type Tableau, mais as tu une idée plus light.

Merci
cleseach
Active Member II

Re: Workflow Assigne Search

Tout le but du jeu est de passer l'identifiant du site comme paramètre à ton webscript ;-)
Ca demande quelques ajustements, bien entendu !
sibe
Active Member

Re: Workflow Assigne Search

Une bonne idée mais ça ne règle pas le problème car en ajoutant l'identitiant du site dans l'url on récupère aussi bien les membres associés mais au final on se retrouve dans le même cas de figure pour les utilsateurs présents dans beacoup de sites.

Tu ne crois pas que l'on peut retravailler sur le résultat obtenu c'est à dire la variable userResults afin d'utiliser des tableaux ?

var sites = siteService.listUserSites(authorityName);
       for each(var site in sites)
{
var userResults =  user.person.properties.userName);
}
cleseach
Active Member II

Re: Workflow Assigne Search

Aller hop, c'est la fin de semaine, je vais illustrer mon propos d'un petit exemple.

Lorsque tu fais une recherche pour choisir un acteur du workflow, l'url suivante est appelé :
http://localhost:8080/share/proxy/alfresco/api/forms/picker/authority/children?selectableType=cm:per...
Comme tu pourras le voir, j'ai joué une requête très egocentrique ;-)

Cette url va faire appel au webscript Alfresco pickerchildren.get.
Ce webscript va traiter différents cas de recherche en fonction des paramètres de l'url. Ici, on recherche un utilisateur (cf. authority + selectableType=cmSmiley Tongueerson) dont le nom contient "charles".

La recherche a proprement parlé est réalisée par la méthode findUsers(searchTerm, maxResults, results) :
function findUsers(searchTerm, maxResults, results)
{
   var paging = utils.createPaging(maxResults, -1);
   var searchResults = groups.searchUsers(searchTerm, paging, "lastName");
  
   // create person object for each result
   for each(var user in searchResults)
   {
      if (logger.isLoggingEnabled())
         logger.log("found user = " + user.userName);
     
      // add to results
      results.push(
      {
         item: createPersonResult(user.person),
         selectable: true
      });
   }
}

Voila pour la situation de départ.
Pour ton besoin, il faut passer une information sur le site. L'URL peut donc devenir quelque chose du genre :
http://localhost:8080/share/proxy/alfresco/api/forms/picker/authority/children?selectableType=cm:per...
Le webscript devra ensuite passer l'information sur le site à la fonction findUsers :
function findUsers(searchTerm, maxResults, results, siteName)
{
  var searchResults = Array();
 
   if (site == null) {
      // Pas dans un site, recherche complète
      var paging = utils.createPaging(maxResults, -1);
      searchResults = groups.searchUsers(searchTerm, paging, "lastName");
   } else {
      var site = siteService.getSite(siteName);
      var members = site.listMembers(searchTerm, "", maxResults, true);
      for (var i=0; i<members.size(); i++) {
         searchResults[i] = groups.getUser(userName);
      }
   }

   // create person object for each result
   for each(var user in searchResults)
   {
      if (logger.isLoggingEnabled())
         logger.log("found user = " + user.userName);
     
      // add to results
      results.push(
      {
         item: createPersonResult(user.person),
         selectable: true
      });
   }
}

Bien entendu, il reste plein de choses à faire :
  • Tester que ça fonctionne (!)

  • Faire la modification dans Share pour passer le site en paramètre

  • Vérifier que l'absence de paging n'est pas un frein trop gros

  • Mettre en place le tri des résultats si on le souhaite
Voila donc tout ce que je peux avoir en tête pour couvrir ton besoin.

Cordialement,
Charles
sibe
Active Member

Re: Workflow Assigne Search

Merci Charles pour cette belle description, je vais essayer de l'exécuter pour voir si ça change quelques choses.

Thank je te tiens au courant.
sibe
Active Member

Re: Workflow Assigne Search

Aller hop, c'est la fin de semaine, je vais illustrer mon propos d'un petit exemple.

Lorsque tu fais une recherche pour choisir un acteur du workflow, l'url suivante est appelé :
http://localhost:8080/share/proxy/alfresco/api/forms/picker/authority/children?selectableType=cm:per...
Comme tu pourras le voir, j'ai joué une requête très egocentrique ;-)

Cette url va faire appel au webscript Alfresco pickerchildren.get.
Ce webscript va traiter différents cas de recherche en fonction des paramètres de l'url. Ici, on recherche un utilisateur (cf. authority + selectableType=cmSmiley Tongueerson) dont le nom contient "charles".

La recherche a proprement parlé est réalisée par la méthode findUsers(searchTerm, maxResults, results) :
function findUsers(searchTerm, maxResults, results)
{
   var paging = utils.createPaging(maxResults, -1);
   var searchResults = groups.searchUsers(searchTerm, paging, "lastName");
  
   // create person object for each result
   for each(var user in searchResults)
   {
      if (logger.isLoggingEnabled())
         logger.log("found user = " + user.userName);
     
      // add to results
      results.push(
      {
         item: createPersonResult(user.person),
         selectable: true
      });
   }
}

Voila pour la situation de départ.

jusque là çava.
Pour ton besoin, il faut passer une information sur le site. L'URL peut donc devenir quelque chose du genre :
http://localhost:8080/share/proxy/alfresco/api/forms/picker/authority/children?selectableType=cm:per...
Salut Charles,


Le webscript devra ensuite passer l'information sur le site à la fonction findUsers :
function findUsers(searchTerm, maxResults, results, siteName)
{
  var searchResults = Array();
 
La variable site est-elle celle passée via l'url du webscript si oui j'ai bien ajouté la ligne suivante pour la déclaration de site
[code]
var argsSiteName = args['site'];
   if (site == null) {
      // Pas dans un site, recherche complète
      var paging = utils.createPaging(maxResults, -1);
      searchResults = groups.searchUsers(searchTerm, paging, "lastName");
   }

Cette deuxième partie est la plus importante.
1er question : La variable userName vient d'où ?
2ème question le pagging est aparemment obligatoire dans les 2 cas de figure ?

Je ne rentre jamais dans ce boucle même en spécifiant un site.
    else {
      var site = siteService.getSite(siteName);
      var members = site.listMembers(searchTerm, "", maxResults, true);
      for (var i=0; i<members.size(); i++) {
         searchResults = groups.getUser(userName);
      }
   }

   // create person object for each result
   for each(var user in searchResults)
   {
      if (logger.isLoggingEnabled())
         logger.log("found user = " + user.userName);
     
      // add to results
      results.push(
      {
         item: createPersonResult(user.person),
         selectable: true
      });
   }
}

Bien entendu, il reste plein de choses à faire :
  • Tester que ça fonctionne (!)

  • Faire la modification dans Share pour passer le site en paramètre ==> OKI

  • Vérifier que l'absence de paging n'est pas un frein trop gros ==>un peu

  • Mettre en place le tri des résultats si on le souhaite
==> OKI

Voila donc tout ce que je peux avoir en tête pour couvrir ton besoin.
===>Thank en tout cas pour ta disponibilité

Cordialement,
Charles