30/10/2018
Introduction
Dans l’article suivant, nous allons implémenter un filtre des utilisateurs à l’assignation et un filtre sur un tag de type Utilisateur
.
Les scripts utilisent des fonctionnalités disponibles à partir de la version 2.3.8
.
Cas d’usage
Dans l’exemple ci-dessous, nous utiliserons le template GEC
.
- Le scope est configuré avec un tag
Service destinataire
positionné sur les tâches, qui correspond à une équipe. - Lors d’une assignation, on récupère le(s) service(s) présent(s) sur les tâches sur lesquelles l’action est effectuée. Les utilisateurs disponibles sont ceux qui possèdent l’ensemble des services dans leurs équipes. Si aucun service n’est récupéré, on ne filtre pas les utilisateurs.
- Même chose au clic sur la réponse
Informer
sur une tâcheA traiter
Le scope contient 2 utilisateurs avec les équipes suivantes :
- Sophie Martin appartient aux équipes
Commerce
etJuridique
- Max Dupond appartient à l’équipe
Commerce
L’objectif est d’arriver aux résultats suivants :
Cas de test | Résultats |
---|---|
Assignation d’une tâche du service Juridique |
Sophie Martin est présente dans la liste des utilisateurs, pas Max Dupond |
Assignation d’une tâche du service Commerce |
Sophie Martin et Max Dupond sont présents dans la liste des utilisateurs |
Assignation de 2 tâches, services Commerce et Juridique |
Sophie Martin est présente dans la liste des utilisateurs, pas Max Dupond |
Le script userFilter.js
est utilisé pour arriver à ce résultat.
Les variables du template dont on a besoin sont définies en début de script :
var SERVICE_TAG_NAME = "ServiceDestinataire";
var RECEIVER_TAG_NAME = "DestinatairePourInfo";
var INFORM_RESPONSE_ID = "Inform";
var USER_FILTER_PLUGIN_NAME = "UserFilterPlugin";
Service REST
Le service FlowerDocs utilisé dans les deux cas est disponible à l’adresse ./plugins/rest/profiles/<profiles>/users/
.
Assignation
On utilise la fonction registerAssigneeProvider
décrite dans la documentation.
var userAPI = JSAPI.get().getUserAPI();
userAPI.registerAssigneeProvider(function(tasks, userEntry, callback){
...
}
On récupère dans un premier temps la liste des services présents sur la ou les tâche(s) :
var tasksServices = getTasksService(tasks);
function getTasksService(tasks)
{
var tasksServices = [];
tasks.forEach(task => {
var servicesValue = task.getTagValues(SERVICE_TAG_NAME);
if(servicesValue !== null){
tasksServices.push(servicesValue);
}
});
return tasksServices;
}
Si aucun service n’est trouvé, on utilise la fonction na()
pour ne pas filtrer les résultats
var tasksServices = getTasksService(tasks);
console.debug("Will filter assignee with profiles " + tasksServices);
//If no services found on tasks, we do not filter assignee
if(tasksServices.length === 0){
callback.na();
}
Si on a récupéré au moins un service sur les tâches, on passe la liste des utilisateurs retournés par le service REST au callback :
else
{
$.get(buildUserServiceUrl(tasksServices, userEntry), function(data){
var users = new Array();
$.each(data, function(key, value) {
users.push(User.fromJSON(JSON.stringify(value)));
});
callback.provide(users);
});
}
function buildUserServiceUrl(profiles, key)
{
return "./plugins/rest/profiles/" + profiles.toString() + "/users/" + key;
}
Filtre d’un tag utilisateur
On filtre la liste des utilisateurs présents au clic sur la réponse Informer
présente sur les tâches au statut A traiter
.

Pour filtrer les tags de type utilisateur, nous allons utiliser un lookup de type plugin comme décrit dans la documentation.
On commence par construire un objet de type lookup qui, lorsqu’il est appelé, appelle le service rest avec les profils récupérés sur les tâches. Comme précédemment, les utilisateurs retournés sont passés en entrée du callback.
function buildLookupPlugin(tasks){
var tasksServices = getTasksService(reasonedAnswerAPI.getTasks());
var lookupPlugin = new LookupPlugin();
lookupPlugin.setLookupHandler(function(fieldName, fieldValue, callback){
$.get(buildUserServiceUrl(tasksServices, fieldValue),function(data){
var users = new Array();
$.each(data, function(key, value) {
var user = new LookupResult();
user.setValue(value.displayName);
user.setName(value.id.value);
users.push(user);
});
callback.onSuccess(users);
});
});
return lookupPlugin;
}
Puis on enregistre ce plugin et on le bind sur le tag utilisateur présent derrière la réponse Informer
.
Cette action est effectuée à chaque fois que l’on clique sur la réponse Informer
.
JSAPI.get().registerForReasonedAnswerOpen(function(reasonedAnswerAPI, reasonedAnswerId) {
if(reasonedAnswerId === INFORM_RESPONSE_ID)
{
var lookupAPI = JSAPI.get().getLookupAPI();
lookupAPI.register(USER_FILTER_PLUGIN_NAME, buildLookupPlugin(reasonedAnswerAPI.getTasks()));
reasonedAnswerAPI.bindFieldOnLookup(RECEIVER_TAG_NAME, USER_FILTER_PLUGIN_NAME);
}
});