Introduction
Dans le CRM, nous avons un agrégat « Compte », qui a une collection d’entités « Contacts ». Ici, on cherche à avoir un champ au niveau du root (Compte) qui va pointer vers un seul élément de la collection d’entité (contacts) pour définir le contact principal du compte.
Attention : on ne peut pas créer un champ « contact principal » de type Contact et le configurer pour avoir le choix de la liste des contacts du compte, car ceci irait créer une deuxième entrée de contact dans la base de données avec les informations du contact sélectionné. Une modification des informations du contact dans la liste ne se reflèterait pas dans le contact principal. On va donc devoir créer un champ qui va référencer vers un contact dans la liste avec son id.
Étapes à suivre
1. Créer un champ de type string qu’on va nommer primaryContactId
qui va nous servir pour créer notre référence à un contact principal.
2. Créer un computed field de type string qu’on va nommer contactPrincipal
. Ce champ va contenir le contact qui est référencé par le champ simple primaryContactId
en faisant une recherche en JavaScript.
return data.contacts.get(data.primaryContactId)
3. Création d’une commande modifierContactPrincipal
pour gérer la sélection du contact principal
et lui ajouter le param primaryContactId
créer lors de l’étape 1.
N. B. La commande doit être au niveau du compte.
4. Ajout du champ contactPrincipal au UI et association à la commande
Glisse le computed field contactPrincipal
dans le UI.
Associe le à la commande de l’étape 3 avec un behavior « execute a command» > on click > modify.
Cette commande nous permet de mettre l’id du contact principal, cependant, à ce stade, le dialogue de la commande nous affiche un champ string. Même si la valeur enregistrée sera en mode texte, on veut présenter à l’utilisateur la liste des contacts existants dans le compte pour qu’il en choisisse un.
5. Configuration des « Candidates Values » pour afficher une liste de contacts dans le dialogue de sélection
Ouvre les propriétés du param primaryContactId, pour éditer les « Candidates Values » en mode JavaScript.
data.contacts.map(c => ({ value: c, label: (c.nomComplet + " (" + c.titre + ")") }))
N. B. Cette étape va permettre d’afficher la liste des contacts comme option de sélection. Pour chaque contact, on affichera le nom et le titre du contact, mais une fois celui-ci sélectionné, c’est l’ID qui sera sauvegardé dans la valeur du champ.)
Voici le résultat du dialogue de la commande :
6. Affichage du nom complet du contact principal dans l’interface
Comme dernière étape, on va devoir modifier la valeur du champ en ajoutant «.nomComplet » dans l’attribut Value afin de retourner la valeur du champ nomComplet du contact. Puis, on peut modifier le « label » qui affichera « contact principal nom complet » pour simplement « contact principal ».
Ceci va nous permettre d’afficher non pas l’ID (car on référence à une entité) du contact sélectionner, mais bien son nom complet.
Conclusion
En suivant ces étapes, vous pouvez configurer un champ qui permet de sélectionner et afficher un contact principal parmi une liste de contacts d’un compte, tout en évitant de dupliquer les données. Cette solution garantit une mise à jour en temps réel des informations du contact principal.