Picklist 拡張価格の拡張

  • リリースバージョン: Australia
  • 更新日 2026年03月12日
  • 所要時間:5分
  • Picklist 拡張価格拡張を使用して、場所やその他の要因に応じて価格を調整します。

    選択リスト拡張の価格設定拡張を使用して、指定された選択リスト拡張フィールドのフィールドオプションの価格設定を動的に変更できます。

    必須条件

    CPQサポートサイトからサポートケースを送信するか、support@logik.io にメールを送信して、お使いの環境で拡張を有効にするように要求します。拡張を使用するユースケースを提供してください。

    Picklist 拡張フィールドは、拡張の影響を受けるために [拡張を有効にする] トグルをオンにする必要があります。

    選択リスト拡張フィールド

    [拡張] タブは、 CPQ アドミンで詳細計画に移動するときに表示されます。

    選択リスト拡張フィールド

    Picklist Extension Pricing Enrichment の実際のデモをご覧ください。

    PLE 拡張スクリプトデモ

    デモンストレーションスクリプト

    デモビデオでは、次のスクリプトが使用されました。

    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 要素

    拡張スクリプトの設計例:

    1. 選択リストオプションをループし、後で参照できるように保存します (pleRequest.forEach())
    2. オプションの価格を取得して保存します (テーブルルックアップまたは関数自体に保存します)
    3. 適切なオプションの価格を設定する (pleRequest.forEach())

    ユースケース:

    • 郵便番号依存価格設定
    • 価格乗数と割引
    • デルタ価格設定
    • 独立したコンポーネント価格の差し引かれる

    pleRequest 要素:

    • pleRequest.fieldVariableName:選択リストフィールドの変数名
    • pleRequest.optionValue:フィールドで定義された picklist オプション
    • pleRequest.productId:PLE マッピング内の製品の ID
    • pleRequest.price:拡張で設定する価格

    pleRequest オブジェクトの要素の参照は、ProductListcfgcfgRequest などのオブジェクトの参照と似ています。変数が pleRequest に代入された場合でも (for ループで、 またはforEach 関数を使用して)、要素は変数の後に参照され、その後にピリオドが続きます。