InitRefSelect et Bouton associer

4.0
Tags: #<Tag:0x00007f3619bb34c8>
InitRefSelect et Bouton associer
0.0 0

#1

Bonjour,

Je suis en Simplicité® version 4.0.P09b

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?

En vous remerciant par avance.
Zouhair


#2

Hello,

Je n’ai pas eu de réponse sur mon post. Peut-être que ce n’est pas très clair :face_with_raised_eyebrow:

Le cas échéant, comment vous expliquer mieux ce que je cherche à faire.

Cordialement,
Zouhair


#3

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.


#4

Bonsoir,

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?

Cordialement,
Zouhair


#5

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 :

myParentObject.initUpdate = function() {
   this.getGrant().setParameter("myParentId", this.getRowId());
   this.getGrant().setParameter("myParentType", this.getFieldValue("fieldType"));
}

et dans le preSearch de l’objet de l’association, on peut récupérer ce contexte :

myChildObject.preSearch = function() {
  if (this.isRefInstance()) {
    var parentId = this.getGrant().getParameter("myParentId");
    if (parentId) this.setFieldFilter("childfield", parentId);
    var parentType = this.getGrant().getParameter("myParentType");
    if (parentType ) this.setFieldFilter("childType", parentType);
  }
}

On peut ainsi mémoriser toute variable durant la session.