Enrichissement de la réponse sur BOM

  • Rversion finale: Australia
  • Mis à jour 12 mars 2026
  • 3 minutes de lecture
  • Vous pouvez utiliser cet enrichissement pour utiliser les éléments ProductList chaque fois qu’il y a une mise à jour de la nomenclature.

    L’enrichissement de la réponse de nomenclature est activé par défaut dans les environnements et peut être utilisé pour manipuler les éléments de la liste de produits chaque fois qu’il y a une mise à jour de la nomenclature (BOM).

    Remarque :
    L’environnement CPQ doit inclure des règles avec des actions sur les produits, sinon il n’y aura rien à parcourir pour l’enrichissement.

    Réponse BOM

    Dans l’exemple suivant, l’enrichissement de la réponse sur nomenclature parcourt les produits en boucle et modifie leur prix.

    //Loop over products and change price of a product
    let dealProduct = cfg.blueMoonSelected;
    if (dealProduct == true) {
            for(var prod of ProductList) {
                    let price = prod.price * .8;
                    prod.price = price;
            }
    }

    Sur la réponse BOM, les enrichissements peuvent demander des services REST externes via GET ou POST.

    Dans l’exemple de script suivant, l’enrichissement de la réponse On BOM utilise une connexion externe pour interroger une API powerPricing avec des données client. Une fois les données tarifaires spécifiques au client récupérées à partir du service, l’enrichissement ajuste la tarification des enregistrements ProductList existants.

    var powerInputs = {"membershipCode":cfg.eCMembershipCode, "icp":cfg.eCICPNumber};
    let powerResponse = External.powerPricing(powerInputs);
    let dailyCharge = 0; let ratesArr = [];
    
    if(powerResponse.status == 200) {
    	for(var record of powerResponse.body) {
    		if(record.chargeType == cfg.expectedUsage) {
    			dailyCharge = record.dailyCharges;
    			ratesArr = record.rates;
    		}
    	}
    	for(var prod of ProductList) {
    		if(prod.id=="electricBillEstimator") {
    			let addedPrice = dailyCharge * cfg.serviceDurationInDays;
    			prod.price = addedPrice;
    		}
    			if(prod.id=="Standard Rate" || prod.id=="Low Rate") {
    			prod.price = dailyCharge;
    		}
    	}
    	for(var rateVal of ratesArr) {
    		ProductList.id = "Additional Charge Per KWH: " + rateVal.name;
    		ProductList.quantity = 1;
    		ProductList.bomType = "Manufacturing";
    		ProductList.orderNumber = 2;
    		ProductList.price = rateVal.rate;
    		ProductList.notes = rateVal.measure;
    		ProductList.parentProduct = "electricBillEstimator";
    		ProductList.next();
    	}
    }
    
    return ProductList;

    Différence entre la nomenclature du moteur de règles et la nomenclature enrichie

    Il existe deux versions de la nomenclature pendant l’exécution : la nomenclature du moteur de règles, qui est basée sur les résultats des règles de produit pendant l’exécution, et la nomenclature enrichie, qui est le résultat de l’enrichissement de la nomenclature.

    L’objet ProductList de l’enrichissement de nomenclature (référencé dans le script) est le résultat de la nomenclature du moteur de règles, et non de la nomenclature enrichie. Ceci afin de s’assurer qu’il n’y a pas de boucles infinies. Supposons que le script fasse référence à sa propre liste de produits qu’il renvoie et que le script soit configuré pour augmenter le prix de certains objets d’un pourcentage lors de la mise à jour de la nomenclature. Dans ce cas, la prochaine fois que le contenu de la nomenclature serait mis à jour, l’augmentation de prix se reproduirait encore et encore.

    Pour éviter cette situation, la nomenclature enrichie n’est référencée par aucune règle ou enrichissement autre que la ProductList de l’enrichissement de validation. Cela garantit que l’enrichissement de la nomenclature peut fonctionner en dehors du moteur de règles, mais cela signifie également que si une condition est remplie dans l’enrichissement de nomenclature, ces conditions peuvent être remplies à nouveau la prochaine mise à jour de la nomenclature, car toute modification apportée à la nomenclature dans le script d’enrichissement de nomenclature qui arrête cette condition ne sera pas référencée.

    Avec les connexions externes, ce n’est pas un problème tant que la réponse est cohérente. Toutefois, si la réponse change lorsqu’elle est déclenchée plusieurs fois, par exemple lors de la génération d’une chaîne ou de l’enregistrement d’un certain temps, elle est mise à jour à chaque fois que la nomenclature est mise à jour.

    L’enrichissement de la réponse BOM peut être utilisé pour :

    • modifier dynamiquement le prix des produits dans la nomenclature. Il peut s’agir d’un taux de changement statique ou dynamique, comme des frais d’expédition statiques et des taxes dynamiques.
    • modifier les attributs des produits de la nomenclature qui dépendent d’une condition de la nomenclature, comme la quantité d’autocollants gratuits distribués une fois que 100 $ + de taxe ont été indiqués.
    • supprimez un élément de ligne de la nomenclature.