Aller au contenu

Utiliser les Candidate Values et On Change

Résumé de l'article

Lors de la création d’une opportunité, permettez à l’utilisateur de choisir une devise associée à plusieurs listes de prix pour leurs produits. Puisque chaque liste de prix contient une collection de produits avec leur propre prix unitaire, lorsqu’une opportunité est assignée à une liste de prix, le coût du produit sera défini automatiquement.

Lors de la création d’une opportunité, permettez à l’utilisateur de choisir une devise associée à plusieurs listes de prix pour leurs produits. Puisque chaque liste de prix contient une collection de produits avec leur propre prix unitaire, lorsqu’une opportunité est assignée à une liste de prix, le coût du produit sera défini automatiquement.

Lors de la création d’une opportunité, permettez à l’utilisateur de choisir la devise, puis n’affichez que les listes de prix de la même devise. Cela fonctionne parce que chaque liste de prix a une devise définie. Une fois la devise et la liste de prix de l’opportunité enregistrées, permettez à l’utilisateur d’ajouter des produits. Comme chaque opportunité est assignée à une liste de prix, et que cette liste de prix contient une collection de produits avec leur propre prix unitaire, le prix du produit doit être défini automatiquement et être un champ en lecture seule.

1. Définir la sélection de devise de l’utilisateur et l’association à la liste de prix

Section intitulée « 1. Définir la sélection de devise de l’utilisateur et l’association à la liste de prix »

Pendant qu’un utilisateur crée une opportunité, la devise de l’opportunité doit influencer quelle liste de prix sera disponible pour la sélection. Pour limiter les listes de prix disponibles à un utilisateur, ajoutez une candidate value au paramètre « priceList » de la commande « create » de l’Aggregate opportunity. Le type de données doit être « pricelist ». Ensuite, ajoutez un critère à la candidate value, sélectionnez « currency equal (JS) values.currency ». Dans le bloc javascript, « values » contient les données sélectionnées dans le dialogue avant de soumettre le formulaire. Cela est possible parce qu’une liste de prix est associée à une devise.

2. Afficher les listes de prix selon la devise sélectionnée

Section intitulée « 2. Afficher les listes de prix selon la devise sélectionnée »

De même, après la création de l’opportunité, l’utilisateur pourrait avoir besoin de changer la liste de prix précédemment sélectionnée. Dans ce scénario, l’utilisateur devrait une fois de plus être limité aux listes de prix de la même devise que celle enregistrée pour l’opportunité. Cette fois, lors de l’ajout d’une candidate value au paramètre « priceList » de la commande « changePriceList » de l’Aggregate « opportunity », le Javascript devrait être « data.currency » au lieu de « value.currency ».

3. Réinitialiser la liste de prix lors d’un changement de devise

Section intitulée « 3. Réinitialiser la liste de prix lors d’un changement de devise »

Cette étape fait partie de ce workflow mais n’est pas liée à « on change » ou « candidate value ».

Pour vider la sélection de liste de prix si la devise change, ajoutez une mutation à la commande « changeCurrency ». Ajoutez le champ « pricelist » et sélectionnez « null value » comme type.

4. Restreindre les produits aux listes de prix disponibles

Section intitulée « 4. Restreindre les produits aux listes de prix disponibles »

Gardez à l’esprit que certains produits pourraient être disponibles uniquement dans certaines listes de prix et le prix de chaque produit pourrait varier d’une liste de prix à l’autre. Ainsi, lors de l’ajout de produits sous une opportunité, l’utilisateur ne devrait avoir accès qu’à l’ajout des produits faisant partie de la liste de prix sélectionnée pour l’opportunité.

Si ce n’est pas déjà fait, créez une commande « add Entity command » sous l’Aggregate « opportunity » avec le nom de champ conteneur défini sur « products » et avec « product » et « quantity » comme champs obligatoires ainsi que « unitPrice » comme champ non obligatoire. Dans cet exemple, cette commande a été nommée « addOpportunityProduct ». À ce stade, n’importe quels produits peuvent être ajoutés aux opportunités.

Ensuite, voyons comment filtrer nos produits. Ajoutez simplement une « candidate value », en JavaScript, au paramètre « product » de la commande nouvellement créée :

data.priceList.priceListItems.map("product")

Lors de l’ajout de produits de la liste de prix sélectionnée à une opportunité, le prix du produit doit correspondre à celui de cette liste de prix.

Pour ce faire, ajoutez cette ligne Javascript dans la section « on change » du properties panel :

return p => ({
unitPrice: data.priceList.priceListItems.find({product: p}).price
})

À ce stade, lorsque l’utilisateur ajoute un produit, le prix est affiché automatiquement. Cependant, le prix pourrait être modifié manuellement par l’utilisateur.

5. Rendre le prix unitaire en lecture seule lors de l’ajout de produits

Section intitulée « 5. Rendre le prix unitaire en lecture seule lors de l’ajout de produits »

L’utilisateur ne devrait pas avoir l’option de changer le prix unitaire des articles ; le champ devrait être « read only ».

Pour obtenir un contrôle plus granulaire sur l’interface utilisateur du dialogue, ajoutez un dialogue sous la commande « addOpportunityProduct », de l’Aggregate « opportunity ». Ensuite, sélectionnez le champ « unitPrice » du dialogue et activez l’option « read only ». Elle se trouve sous le sous-panneau properties du panneau Project Explorer.

Passez en Live Mode pour tester.

L’utilisation des Candidate values et des actions « on change » garantit que la liste de prix appropriée est automatiquement sélectionnée en fonction de la devise choisie. Cette approche dynamique simplifie la gestion des prix des produits, améliore la précision et offre une expérience utilisateur plus fluide dans la gestion des opportunités au sein du système.