J’utilise un initRefSelect pour filtrer une liste d’enregistrements par rapport à une valeur de champs et ça marche.
Je souhaite afficher le bouton associer à l’utilisateur et pouvoir avoir le même filtre que pour la création “unitaire”, est ce que c’est possible? et comment?
La hook initRefSelect ne sert pas à filtrer l’associate mais le popup de sélection unitaire.
Sur l’IHM legacy, le bouton “Associate” utilise l’instance “ref_” donc il faut mettre le code de filtrage sur cette instance car également utilisée par le popup de sélection.
Exemple, pour filtrer l’objet lié sur avec la valeur d’un champ du père :
myObject.preSearch = function() {
if (this.isRefInstance()) {
var parent = this.getParentObject();
if (parent)
this.setFieldFilter("childfield", parent.getFieldValue("parentfield"));
}
}
L’associate n’est pas encore implémenté en V4 responsive, mais c’est dans le backlog.
Je reviens sur ce post parce que j’ai testé le bout de code :
En cliquant sur associer dans le panel d’une relation d’un objet :
ça rentre, dans le presearch,
ça rentre dans la boucle avec la condition this.isRefInstance()
mais par contre il ne rentre pas dans boucle if(parent). En mettant un console.log pour m’afficher parent, il me renvoie null donc je ne peux pas filtrer sur le bouton associer.
Est ce que j’ai faux quelque part et donc il me manque quelque chose (j’ai strictement copié ton code)? ou est ce qu’il y a quelque chose à corriger sur la plateforme?
Le parent est valorisé pour les instances “Panel” (liste associée à un parent direct), il ne l’ai peut être pas pour les références d’une association.
Il faut donc passer le contexte d’une autre façon. En général on passe par
des variables globales stockée dans les droits de session
ou locales stockées dans l’instance d’objet
Par exemple à l’ouverture du formulaire parent, on positionne une variable de contexte dans le initUpdate pour mémoriser des infos sur l’objet ouvert :
est-ce-que vous avez des exemples de SCRIPT permettant de mémoriser les infos de l’objet ouvert en création quand la saisie change.
je m’explique, dans mon objet réservation, l’utilisateur saisi une date de début et une date de fin.
je voudrais mémoriser ces dates dans des variables afin de les utiliser dans le preSearch d’un objet associé.
J’ai un objet réservation. dans cet objet, l’utilisateur saisi une date de début et une date de fin.
ensuite, il doit sélectionner une ressource (objet lié). je veux passer à ressource les dates saisies mais pas encore enregistrée afin d’afficher que les ressources disponibles entre les 2 dates.
je dois donc affecter des paramètres en fonction du changement des champs date.
Le link mapping est un mécanisme standard qui permet de filtrer/restreindre une selection en fonction de valeurs déjà saisies dans le formulaire. Je pense que c’est juste ça dont vous avez besoin dans votre cas.
Cf. au niveau du Link vous avez un onglet Link mapping
Il y a un exemple sur la Démo à jour sur le Link demoCtcOrdId qui, au niveau des contacts, restreint les commandes sélectionnables en fonction du client sélectionné
je vais regarder mais je ne pense pas que ce soit ça.
je veux restreindre les ressources en fonction des dates déjà réservées.
je dois donc faire une requete en fonction de 2 dates saisies
Je pense que ça doit le faire avec des link mappings, @Francois peux tu donner ton avis car je sais que tu as travaillé sur les link mappings recemment
Si ça ne le fait pas avec les link mappings simples il est toujours possible de setter un (ou plusieurs) paramètre(s) avec vos dates sur on change via Ajax et de vous en servir pour faire un filtrage sur votre objet lié.
Un LinkMap sur une relation ne peut que faire qu’un égalité avec un champ ou une valeur fixe.
Soit vous avez besoin des paramétres en back / rhino pour un usage ultérieur (par exemple dans le postValidate du save pour revérfier la regle de gestion, ajouter des filtres dans le preSearch du popup…)
Dans ce cas, il faut binder un “onchange” sur les champs nécessaires pour les notifier au serveur avant ouverture du popup (réponse de @david)
Soit c’est juste un aide à la saisie au niveau de la liste des référence, alors il faut juste ajouter un hook client sur le “beforeload(ctn,obj)” du popup donc de l’instance “ref” de l’objet référencé :
Avant affichage de la liste popup, lire les valeurs du formulaire et forcer les filters de l’objet lié dans le hook beforeload (les dates passeront dans les paramètres de recherche du popup).
Il faudra donc nécessairement que l’objet référencé comporte ces champs (non persistants ou masqué) pour pouvoir les récuperer côté back dans le preSearch / forcer une searchspec ou des setFilters spécifiques.
NB: Pour plus de clarté (mais seulement sur la branche master pour le moment) on a ajouté des alias get/setParameter au niveau grant, on peut donc désormais écrire: