BOM 応答の拡張

  • リリースバージョン: Australia
  • 更新日 2026年03月12日
  • 所要時間:4分
  • この拡張を使用して、部品表が更新されるたびに ProductList アイテムを操作できます。

    BOM 応答時の拡張は、環境ではデフォルトで有効になっており、部品表 (BOM) が更新されるたびに ProductList 内のアイテムを操作するために使用できます。

    注:
    CPQ環境には製品アクションを含むルールを含める必要があります。含まれないと、拡張がループするルールが何もありません。

    BOM 応答

    次のサンプルでは、On BOM Response 拡張が製品をループし、製品の価格を変更します。

    //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;
            }
    }

    BOM 応答拡張では、GET または POST を介して外部 REST サービスを要求できます。

    次のサンプルスクリプトでは、BOM 応答時拡張は外部接続を使用して、顧客データで powerPricing API をクエリします。サービスから取得された顧客固有のレートデータを使用して、拡張によって既存の ProductList レコードの価格が調整されます。

    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;

    ルールエンジンの BOM と拡張 BOM の違い

    実行時の BOM には、実行時の製品ルールの結果に基づくルールエンジン BOM と、BOM 拡張の結果である拡張 BOM の 2 つのバージョンがあります。

    BOM 拡張の ProductList オブジェクト (スクリプトで参照) は、拡張 BOM ではなく、ルールエンジン BOM の結果です。これは、無限ループがないことを確認するためです。スクリプトが返される独自の ProductList を参照し、BOM の更新時に特定のオブジェクトの価格をパーセンテージで値上げするようにスクリプトが設定されているとします。この場合、次にBOMの内容が更新されると、値上げが何度も繰り返されます。

    この状況を防ぐために、拡張された BOM は、検証拡張の ProductList 以外のルールまたは拡張によって参照されません。これにより、BOM 拡張がルールエンジンの外部で機能することが保証されますが、BOM 拡張で条件が満たされた場合、その条件を停止する BOM 拡張スクリプト内の BOM への変更は参照されないため、次回の BOM 更新時にそれらの条件が再度満たされる可能性も意味します。

    外部接続の場合、応答が一貫している限り、これは問題になりません。ただし、文字列を生成したり、特定の時間を保存したりするなど、複数回起動したときに応答が変更された場合は、BOM が更新されるたびに更新されます。

    BOM 応答の拡張は、次の目的で使用できます。

    • BOM 内の製品の価格を動的に変更します。これは、送料が静的で税金が動的であるなど、静的な変更率または動的な変更率のいずれかにすることができます。
    • $100+ の税が見積もられた後に配布される無料のステッカーの数量など、BOM 内の何らかの条件に依存する BOM 内の製品の属性を変更します。
    • BOM から明細品目を削除します。