Picklist 拡張価格の拡張
Picklist 拡張価格拡張を使用して、場所やその他の要因に応じて価格を調整します。
選択リスト拡張の価格設定拡張を使用して、指定された選択リスト拡張フィールドのフィールドオプションの価格設定を動的に変更できます。
必須条件
CPQサポートサイトからサポートケースを送信するか、support@logik.io にメールを送信して、お使いの環境で拡張を有効にするように要求します。拡張を使用するユースケースを提供してください。
Picklist 拡張フィールドは、拡張の影響を受けるために [拡張を有効にする] トグルをオンにする必要があります。
[拡張] タブは、 CPQ アドミンで詳細計画に移動するときに表示されます。
Picklist Extension Pricing Enrichment の実際のデモをご覧ください。
デモンストレーションスクリプト
デモビデオでは、次のスクリプトが使用されました。
let sourcesArr = [];
let componentArr = [];
let accessoryArr = [];
pleRequest.forEach(o => {
if(o.fieldVariableName == "alternateEnergySources") {
sourcesArr.push(o.optionValue);
//o.price = "1000";
}
if(o.fieldVariableName == "alternateEnergyComponents") {
componentArr.push(o.optionValue);
//o.price = "900";
}
if(o.fieldVariableName == "alternateEnergyAccessory") {
accessoryArr.push(o.optionValue);
//o.price = "800";
}
});
var sourceMap = new Map();
if(sourcesArr != null && sourcesArr.length != 0) {
var sourceRows = lookup("Select Energy, BasePrice from AlternateEnergyPricing where Zip = :zip and Energy IN (:value)", { "zip": cfg.zipCode, "value": sourcesArr });
for (var row of sourceRows) {
sourceMap.set(row.get("Energy"), row.get("BasePrice"));
}
} else { //source PLE not part of request. So populate this map for other PLEs
console.log("Entered non PLE in request case");
sourcesArr = ["Solar", "Wind", "Nuclear"];
var sourceRows = lookup("Select Energy, BasePrice from AlternateEnergyPricing where Zip = :zip and Energy IN (:value)", { "zip": cfg.zipCode, "value": sourcesArr });
for (var row of sourceRows) {
sourceMap.set(row.get("Energy"), row.get("BasePrice"));
}
console.log(sourcesArr);
console.log(sourceMap);
}
var multiplierMap = new Map();
if(cfg.alternateEnergySources != "") {
var multiplierRows = lookup("Select Group, Factor from AlternateEnergyMultiplier where Zip = :zip and Energy = :energyVal", { "zip": cfg.zipCode, "energyVal": cfg.alternateEnergySources });
for (var row of multiplierRows) {
multiplierMap.set(row.get("Group"), row.get("Factor"));
}
}
let sourcePrice = sourceMap.get(cfg.alternateEnergySources);
if(sourcePrice != null) {
pleRequest.forEach(o => {
if(o.fieldVariableName == "alternateEnergySources") {
o.price = sourceMap.get(o.optionValue);
}
if(o.fieldVariableName == "alternateEnergyComponents") {
let compPrice = multiplierMap.get("Component");
if(compPrice != null) {
o.price = sourcePrice*compPrice;
}
}
if(o.fieldVariableName == "alternateEnergyAccessory") {
let multA = multiplierMap.get("Accessory");
if(multA != null) {
o.price = sourcePrice*multA;
}
}
});
}
console.log(sourcesArr);
console.log(componentArr);
console.log(accessoryArr);
console.log(sourceMap);
console.log(multiplierMap);
return pleRequest;
サンプルデザイン、ユースケース、pleRequest 要素
拡張スクリプトの設計例:
- 選択リストオプションをループし、後で参照できるように保存します (pleRequest.forEach())
- オプションの価格を取得して保存します (テーブルルックアップまたは関数自体に保存します)
- 適切なオプションの価格を設定する (pleRequest.forEach())
ユースケース:
- 郵便番号依存価格設定
- 価格乗数と割引
- デルタ価格設定
- 独立したコンポーネント価格の差し引かれる
pleRequest 要素:
- pleRequest.fieldVariableName:選択リストフィールドの変数名
- pleRequest.optionValue:フィールドで定義された picklist オプション
- pleRequest.productId:PLE マッピング内の製品の ID
- pleRequest.price:拡張で設定する価格
pleRequest オブジェクトの要素の参照は、ProductList、cfg、cfgRequest などのオブジェクトの参照と似ています。変数が pleRequest に代入された場合でも (for ループで、 またはforEach 関数を使用して)、要素は変数の後に参照され、その後にピリオドが続きます。