Comment filtrer les enregistrements des champs Lookup à l'aide du JavaScript

Aujourd'hui, nous allons voir comment appliquer des filtres personnalisés aux champs Lookup en fonction des données de formulaire.

Il est possible de filtrer la liste des enregistrements qui seront affichés à l'utilisateur pour un champ Lookup à l'aide d'une requête FetchXml et la fonction addPreSerach.


La fonction addPreSearch permet de capturer l'évènement PreSearch (lorsque l’utilisateur commence à rechercher des enregistrements) pour les champs de type Lookup, et de définir les méthodes JavaScript à exécuter pour gérer cet évènement. Ceci permet de filtrer et de contrôler les résultats à afficher dans la liste de recherche.
Pour utiliser cette fonction:

Xrm.Page.getControl("Fieldname ").addPreSearch(OnPreSearchHandler)

Pour annuler l'abonnement d'une méthode à l'évènement PreSearch vous pouvez utiliser la fonction removePreSearch :

Xrm.Page.getControl("Fieldname ").removePreSearch(handler)


Pour tester ces fonctions, je vous propose l'exemple suivant : sur l'entité Compte nous avons le champ Compte parent et le champ Type de compte, comme vous pouvez le constater dans l'image ci-dessous :


Nous allons donc filtrer le champ Compte parent en fonction du champ Type de compte afin de ne proposer que les Comptes parent du même type que le compte consulté. Pour cela nous allons utiliser le code ci-dessous :


La 1ère méthode PreSearchHandler permet de gérer l'évènement PreSerach pour le champ "Compte parent", donc elle récupère la valeur du champ "Type de compte", et ensuite elle construit la requête FetchXml en fonction de la valeur en passant le type du compte récupéré. La requête construite permettra de filtrer les résultats du champ "Compte parent".

La 2ème méthode OnLoad me permet d'abonner la fonction PreSearchHandler à l'évènement PreSearch du champ "Compte parent". La fonction se lancera ainsi à chaque fois que l'utilisateur commencera à chercher dans le champ "Compte parent".


Pour tester ce code dans le CRM, nous allons créer une nouvelle ressource web et y copier ce code, puis attacher la fonction OnLoad à l'évènement OnLoad du formulaire de l'entité Compte et enregistrer et publier le formulaire.



Ensuite, nous allons attacher cette ressource au formulaire principal de l'entité Compte et enregistrer la fonction OnLoad sur l'évènement OnLoad :


Pour tester, nous allons prendre un compte existant avant de renseigner le champ Type de compte. Le champ Compte parent propose tous les comptes disponibles comme vous pouvez le remarquer dans l'écran ci-dessous :


Une fois qu’une valeur est rentrée dans le champ Type de compte, le Lookup Compte parent se filtre automatiquement en proposant uniquement les comptes ayant le même type que celui choisi :


En proposant aux utilisateurs une liste préfiltrée d'enregistrements, le remplissage du formulaire est facilité faisant gagner un temps considérable aux utilisateurs. Il ne faut surtout pas hésiter à utiliser cette fonctionnalité qui rend sans doute l'expérience utilisateur plus simple.


J’espère que cet article peut vous être utile.


3 commentaires:

  1. Bonjour,

    Débutant en JS ces valeurs correspondent à quoi exactement ?
    jav_accounttypecode
    parentaccountid
    je pourrais ainsi appliquer à mon formulaire.

    Merci pour cette solution qui me semble aussi très utile.

    Lionel

    RépondreSupprimer
    Réponses
    1. Bonjour Lionel,
      La valeur parentaccountid correspond au nom système du lookup Compte parent que je souhaite filtré
      et la valeur jav_accounttypecode correspond au nom système du champe qui me premettra de filtrer la liste des comptes à afficher dans le lookup Compte parent.
      Bon courage.

      Supprimer
  2. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer