Action avec attributs - mapping de relation

Request description

Comment réaliser un filtre en fonction de la sélection d’une occurence de mon objet A pour filtrer les items de mon objet B dans une action avec attributs ?

Objet A : Type d’offre
Objet B : Sous type d’offre

Cela fonctionne bien dans un formulaire par un mapping de relation. Comment transposer ce mapping dans l’action avec attributs ?

image

Technical information

Other relevant information

Version : 5.3.19

Les actions ne sont pas aussi riches que les objets métier, à priori on ne peut pas sans code car il n’y a pas de notion de mapping de relations…

Il faut trouver un moyen de récupérer la valeur de l’autre champ depuis l’initRefSelect de l’objet sous-type.

Dans le template UI de l’action, tu peux ajouter un <script> qui sur le “change” du 1er champ, set un paramètre en back.

avec un block javascript du style :

<script>
setTimeout(() => { // to wait for input drawing
   $("input[name=typeFieldName_idACTION_NAME]").on("change", function(e) {
       $ui.getApp().setSysParam(null, "MYPARAM1", $(this).val());
   });
}, 200);
</script>

Ensuite dans l’initRefSelect de l’autre objet en back pour filtrer, tu dois pouvoir récupérer la valeur via

getGrant().getParameter("MYPARAM1");

Le nom du champ front est à récupérer via l’inspecteur du navigateur, c’est le nom du champ + “_id” + nom de l’action.

Une autre solution simple serait de filtrer le “type” depuis l’écran de recherche du “sous-type”, et virer le premier champ de l’action.

Bonjour François,

<script type="text/javascript" >
$(".modal").on('shown.bs.modal', function () {
	let f = $("input[name='demTypeOffreIdPopup_idRecDemande-transition-ACONF-AAFFECT-A']");
   alert(f.length);
   alert(f.first().attr('id'));
   f.first().on("change", function(e) {
   		alert("demTypeOffreIdPopup");
       $ui.getApp().setSysParam(null, "MYPARAM1", $(this).val());
   });
	f.first().change(function(){
	  alert("The text has been changed.");
	});

    let ff = $("input[name='demTypeOffreIdPopup__tofNom_idRecDemande-transition-ACONF-AAFFECT-A']");
   alert(ff.length);
   
   ff.first().on("change", function(e) {
   		alert("demTypeOffreIdPopup__tofNom");
       $ui.getApp().setSysParam(null, "MYPARAM1", $(this).val());
   });
	ff.first().change(function(){
	  alert("The text has been changed.");
	});
   
   ff.val("test");
})
</script>

On arrive pas à catcher l’event Change (On a pas l’alerte) Peux tu nous éclairer sur le sujet ?

Bonjour,

Le code bind 2 changes sur le champs :

  • ff.on("change", function....);
  • ff.change(function....);

Sinon ff.val("test") ne trigger pas de change, il faut faire

ff.val("test").change();
ou
ff.val("test").trigger("change");

Les 2 handlers “change” seront appelés sauf à ajouter un event.stopPropagation() ou stopImmediatePropagation()

Mettez des debugger plutôt que des alert pour debugger avec le navigateur, ce que vaut “ff” et s’il pointe bien sur le champ affiché.

Sinon à voir si c’est le $(".modal").on('shown.bs.modal', ...) qui est appelé trop tôt, avant que le champ soit affiché… sinon je corrigerai mon exemple car c’est mieux qu’un timeout aléatoire.

Quand on modifie la donnée depuis la pop up, le socle ne fait pas le change() et donc on ne passe pas dans le trigger.

Déjà répondu, as tu appliqué les recommandations ?
quel est ton nouveau code ?
debugger pour tester que c’est le bon champ… ?

f.on("change", function(e) { console.log("coucou"); });
f.val("x"); // ne fait pas de change
f.val("x").change(); // là oui

c’est le navigateur qui trigger le change coté UI.
mais en javascript comme en jQuery il faut le forcer, le val ne suffit pas.

input.value = “x” n’a jamais provoqué de change.
$(input).val(“x”) non plus.

il faut un input.change() explicite.

Je te contacte par mail, ça sera plus simple.

Ok merci j’ai pu reproduire.

c’est sur le bouton lookup quand on sélectionne une référence dans un dialogue d’action, effectivement ça ne trigger pas de “change” quand la UI valorise les champs liés en retour.

On va corriger.

Ce sera livré en 5.3.24+

[Message prédéfini]

Nous conseillons aux utilisateurs de marquer comme “solution” la réponse résolvant leur problématique pour permettre au support de mieux suivre les sujets non résolus, et à la communauté de trouver plus facilement la bonne réponse.

Vos messages indiquant une résolution du problème, nous avons réalisé cette opération pour vous.