Filtre sur une relation d'objet

4.0
Filtre sur une relation d'objet
0
Tags: #<Tag:0x00007f5ff1969800>
(BLANC) #1

Bonjour,

Dans un formulaire de création, je souhaite sélectionner un objet associé via une relation 1-n.
Cependant, je souhaite appliquer un filtre sur la liste des objets proposés dans la pop-up avant que celle-ci s’affiche.
Pour que le filtre s’applique, dois-je passer par un initSearch ? Doit-il être placé dans mon instance en cours de création ou au niveau dans le code de l’objet lié ?

Cdt

(David AZOULAY) #2

Il y a plusieurs approches possibles pour filter une sélection de référence en fonction du besoin:

  • Mettre en place un link mapping, dans la plupart des cas c’est cette approche qui est la meilleure quand le filtrage est dynamique (ex: liée à la valeur d’un autre attribut de l’objet)
  • Coder la logique dans le hook initRefSelect si l’approche ci-dessus est trop limitée vs le besoin
  • Mettre en place un filtrage statique (dans le postLoad) en testant l’instance (via isRefInstance) si le filtrage est statique
    etc.

Bref, merci de préciser la nature de filtrage requis histoire qu’on puisse déterminer quelle est l’approche appropriée dans ce cas

(BLANC) #3

Bonjour,

Dans notre cas, il s’agit d’une relation réflexive que l’on souhaite filtrer en appliquant plusieurs conditions de filtrages.

Dans notre formulaire de création, nous faisons référence plusieurs fois à cette réflexive, pour des besoins métiers différents. Cela implique des conditions de filtrages à appliquer différentes pour chaque lien.

2 questions pour l’implémentation de la méthode initRefSelect en java :

  • Peut-on identifier dans le code, le champs (le lien) sélectionné pour conditionner les règles de gestion ?
  • Peut-on utiliser un champ d’un objet hérité comme filtre ?

Merci d’avance pour votre retour.

Jean-Baptiste

(David AZOULAY) #4
  • Peut-on identifier dans le code, le champs (le lien) sélectionné pour conditionner les règles de gestion ?

On peut savoir depuis quel objet on selectionne la référence via getParentObject()

  • Peut-on utiliser un champ d’un objet hérité comme filtre ?

Oui bien sûr, un attribut hérité est un attribut de l’objet comme un autre, donc filtrable

(BLANC) #5

Pour getParentObject(), dans notre cas nous avons deux (ou plus) recherches sur le même type d’objet lié dans le même formulaire, ce qui implique que getParentObject() renvoie la même valeur. C’est pour cela que je souhaiterai identifier le champ sélectionné par l’utilisateur.

Concernant l’héritage, mon filtre est actuellement positionné dans l’objet parent et je veux accéder à un attribut de l’objet fils. L’objet parent ne connaissant pas les attributs de ses fils, existe-t-il un moyen d’y accéder ?

Cordialement
Jean-Baptiste

(François Genestin) #6

getParentObject sera insuffisant pour filtrer en fonction du champ FK.

Il faut faire une petite évolution pour que l’instance “ref” accède au nom du champ FK du parent object.

getParentObjectRefField n’est pas valorisé dans le contexte de sélection de reference mais le peut facilement.

(David AZOULAY) #7

Oui effectivement.

Pour ce qui est de l’héritage je ne comprends pas vraiment le point, désolé. Un objet fils hérite des attributs du père en termes de definition uniquement. Pour Simplicité un objet père et un objet fils sont 2 objets distincts. Mais peut être ne parle-t-on pas d’héritage ici mais de relation…

(François Genestin) #8

J’ai fait la modif, à tester quand ce sera poussé sur vos instances.
Dans l’objet référencé, vous devriez normalement avoir accès dans votre initRefSelect au nom du champ via :

if ("myForeignKey".equals(getParentObjectRefField()) ...