Modifier le contenus d'une liste de valeurs en fonction des Grant

Bonjour,

J’ai le problème suivant :

Dans un de mes Business Object ( les avenants au contrat ) j’ai un attribut qui est une liste de valeur ( le type de l’avenant ).
J’aimerais modifier le contenus de cette liste en fonction des grant de l’utilisateurs.

J’ai donc ajouté une contraintes qui s’active si l’utilisateur a certains droits :

Et j’ai associé un impact pour que la liste de valeur adéquate soit chargée :

Et les grant en question on les droits sur une fonction qui permet le de créer et d’afficher les avenants de contrat.

Pour un utilisateur possédant les droit dans le liste ( disons ‘NAM_ADMIN_LOCAL’ ) je peux afficher le formulaire de création de l’avenant.

Mais le problème est qu’une requète ajax est lancé de manière intenpestive pour rafraichir la liste de valeurs en question une fois que celle-ci s’affiche :

Qu’est ce qui me manque pour que cela fonctionne ?

Cordialement,
Adrien Olivier

Bonsoir,

Merci pour vos explications très claires, c’est bien tenté mais ça ne marchera pas de cette manière, plusieurs remarques pour répondre à vos besoins :

  1. [GRANT].equals("group")

là vous comparez un objet Grant à un String. Il faut utiliser la méthode hasResponsibility pour regarder si dans les droits il y a un groupe nommé.

  1. Les contraintes peuvent avoir directement une liste de Groupes habilités dans l’onglet adhoc

Mettez alors true dans la condition pour que la contrainte s’applique tout le temps (en liste, en formulaire, en recherche…) pour les groupes listés dans l’habilitation. Sinon limitez le context avec [CONTEXT:UPDATE] par exemple.

  1. Une contrainte “front” uniquement ?

Le périmètre de votre règle est “Front” mais c’est plutot une regle très structurante (pas que de l’affichage) à faire surtout en back (pour que le controle soit fait même si un tel role ne passe pas par cet écran, mais par API ajax, import en masse…).

Ceci étant dit… la contrainte marchera mais ce n’est pas la bonne approche :-)

Si une règle concerne un droit de l’utilisateur et non les données, il est conseillé de faire le travail une seule fois en back, donc au niveau du postLoad de l’objet qui est appelé à l’instanciation de l’objet en mémoire :

if (getGrant().hasResponsibility("Groupe1") || getGrant().hasResponsibility("Groupe2")) {
   ObjectField f = getField("myEnumField");
   f.loadList(this, "OTHER_LIST_NAME", getGrant());
}

Ce sera fait une seule fois au chargement de chaque instance + aucun flux ajax dynamique par le front (aucun setlist dynamique à chaque page ou autre).