Personnaliser la valeur par défaut d'un attribut d'action

Bonjour,

Dans un objet D (ImmoDocLease/Document), j’ai une action « Envoyer document(s) par mail », disponible en liste, ligne et formulaire, avec une méthode en back et un attribut d’action « attAct ».

Le ou les documents sélectionnés seront donc envoyés par un seul mail au(x) locataire(s) concerné(s).

L’objet D est lié à l’objet L (ImmoLease/Bail).

Je voudrais alimenter l’attribut d’action avec une valeur par défaut uniquement lorsque je suis en panel D ou formulaire D, et non pas en liste principale.

Valeur par défaut alimentée :

Valeur par défaut non alimentée :

En plus, cette valeur par défaut est calculée en fonction de l’objet L en utilisant le row_id de l’objet L (fk parent) ainsi qu’un autre attribut de l’objet L.

La valeur par défaut est en fait la liste des locataires du bail en question, d’où le besoin uniquement en Panel ou formulaire car dans ces cas, on a un bail unique associé aux documents et on peut donc récupérer les locataires de ce bail, contrairement à la liste principale où il y aura des documents correspondants à plusieurs baux, et donc impossible de savoir quel doc est à envoyer à quel locataire.

En espérant que le besoin soit clair pour vous, pourriez-vous me dire svp :

1- Comment arriver à savoir si je dois alimenter cette valeur par défaut ou non ? en d’autres termes, comment savoir si l’action a été lancée depuis la liste principale (liste ou lignes), en panel ou depuis le formulaire ? (Le nom de l’instance dans initAction est toujours le même « confirm_ImmoDocLease »)
2- Supposons que l’action a été lancée depuis un panel (en sélectionnant des lignes puis lancer l’action ou en lancant l’action au niveau d’une ligne), comment arriver à récupérer le row_id du parent ainsi qu’un autre attribut (champs nécessaires pour trouver les locataires du bail parent) ?
3- J’imagine que l’alimentation de la valeur par défaut doit se faire dans l’initAction, quand je le test, j’ai l’impression que ce calcul est lancé (à tort) 1 première fois quand j’accède au formulaire de l’objet L, et ensuite N fois (plus que 2 fois le nombre de documents du bail L parent !) quand j’accède à l’onglet bas des documents (objet D), Comment faire pour ce initAction (valorisation par défaut) ne s’exécute qu’une seule fois, lorsque je lance l’action ?

Merci d’avance pour votre aide.

Abed.

[Platform]
Status=OK
Version=5.2.19
BuiltOn=2022-10-13 19:55
Git=5.2/ee0cc463984fe6aa77c11338976142f2f47bd910
Encoding=UTF-8
EndpointIP=149.202.173.228
EndpointURL=http://e3m.simplicite.io:10118
TimeZone=Europe/Paris
SystemDate=2022-10-14 10:54:46

Il y a un exemple dans la démo: module-demo/DemoProduct.java at master · simplicitesoftware/module-demo · GitHub

Cf. le hook initAction

Bonjour @david et merci pour votre réponse.

J’ai déjà utilisé dans le passé le initAction pour modifier de manière simple une valeur par défaut, à l’image de ce qu’on fait dans Démo.

Ici j’ai un besoin un peu plus compliqué, puisque comme je l’ai dit, avant de mettre cette valeur par défaut, je dois d’abord savoir d’où l’action a été lancée ? liste principale, panel,…

En plus, pour calculer la valeur par défaut que je dois appliquer, j’ai besoin d’info de l’objet parent (si je suis en panel par exemple)

Et enfin, vu que ce calcul de valeur par défaut est un peu lourd, je voudrais savoir comment faire pour que initAction ne s’exécute qu’une seule fois, lors du lancement de l’action, et non pas lors de l’ouverture du formulaire parent ou de la sélection de l’onglet bas des documents.

Merci d’avance pour votre aide.

Abed.

Pour savoir si vous êtes lancé depuis un panel ou pas vous pouvez tester le getParent() s’il est null c’est que vous êtes en principal.

Le hook initAction s’exécutera toujours, à vous de concevoir son implémentation pour exploiter des données précalculées par ailleurs et stockées au niveau de votre objet, de paramètres d’objet ou de session ou dans le genre.

Autre idée :

une solution générale est de placer un contexte applicatif de navigation dans une variable de session dans vos différents initUpdate() ou initList(parent) des objets utilisés.

getGrant().setParameter("MY_ACTION_CONTEXT", "des données serialisées objet,id,email...")

et dans l’initAction :

  • faire de choses en fonction de getGrant().getParameter("MY_ACTION_CONTEXT")
  • supprimer le context via removeParameter, pour qu’il ne serve qu’une seule fois, ou lui mettre un compteur…

Quand je le teste dans le initAction le getParentObject() il me donne toujours null, peu importe l’endroit où je lance l’action. Je ne peux pas non plus me baser sur le nom de l’instance étant donné que c’est toujours confirm_ImmoDocLease
Je me prend peut-être mal mais je n’arrive toujours pas à trouver d’où l’action a été lancée.

@Francois ne devrait on pas valoriser le parent object dans l’instance de l’action dans le cas d’une action lancée depuis une liste fille ?

1 Like

Bonjour,

L’instance d’objet de l’action est volontairement différente car il ne faut pas modifier la définition des attributs de l’objet d’origine. L’action peut contenir des champs additionnels (en saisie pour préciser l’action) en plus des champs de l’objet forcés en lecture (pour confirmation).

Effectivement, ce serait utile d’ajouter le filiation pour remonter à l’instance d’origine.
getParentObject retournera l’instance d’objet qui a lancé l’action (main ou panel à priori) dans l’initAction.

En attendant de livrer cette évolution en 5.2.20, il faut passer par des paramètres de contexte comme décrit plus haut.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.