CPQ スクリプティング言語の参照

  • リリースバージョン: Australia
  • 更新日 2026年03月12日
  • 所要時間:5分
  • CPQ がサポートする演算子、オブジェクト、キーワードを、型変換、型チェック、サポートされていない操作の代替スクリプト、オブジェクトプロパティへのアクセスに関する情報とともに表示します。

    CPQ は JavaScript に似た言語を使用して、ルールと拡張によってフィールドと BOM データの値を動的に変更します。JavaScript はほぼ 30 年かけて構築された複雑な言語であり、開発者がコーディング中に通常期待するすべての機能を再現することはできませんが、 CPQ スクリプトは依然として製品の動的な構成を支援する強力なツールです。

    CPQスクリプティングの機能は常に拡張されています。最新の機能を確認するには、もう一度チェックしてください。

    サポートされている演算子

    算術演算子:

    +
    加算
    -
    減算
    *
    乗算
    /
    部門
    %
    係数
    ++
    インクリメント
    --
    デクリメント

    文字列演算子:

    +
    連結
    +=
    追加アサイン

    代入演算子:

    =
    アサイン
    +=
    追加アサイン
    -=
    減算の割り当て

    比較演算子:

    ==
    次の値に等しい (=)
    ===
    等号と等号型
    !=
    次の値と等しくない
    !==
    等しい値でも等しい型でもありません
    >
    次の値を超える
    <
    次の値未満
    >=
    次の値以上
    <=
    次の値以下

    論理演算子:

    &&
    AND
    ||
    または

    サポートされているオブジェクト

    サポートされている各オブジェクトは、次のように宣言できます。

    [ ]
    アレイ
    " "
    文字列
    ( )
    番号
    true | false
    ブーリアン
    { }, new Map( )
    マップ
    新しい日付 ( )
    日付

    undefinedNaNおよび null はサポートされていません。

    注:
    日付オブジェクトは返されませんが、[ヘルプ] メニューの日付 API を使用して参照および操作できます。

    サポートされているキーワード

    • var
    • let
    • 定数
    • 新規
    • if
    • else if
    • else
    • for
    • for/of
    • return

    無限ループによってパフォーマンスが停止するリスクがあるため、中断のある while または無条件の for ループはサポートされていません。

    スクリプト自体は 1 つの関数と見なされるのに十分なサイズにする必要があるため、関数はサポートしていません。スクリプトが長く、多くの条件と変数がある場合は、管理テーブルを作成してテーブルクエリを使用することを検討してください。マネージドテーブルとテーブルクエリの使用の詳細については、「 マトリクスローダー:CSV テーブルのアップロードテーブルクエリの最小化」を参照してください。

    サポートされていない操作の代替スクリプト

    代入の乗算と除算 (/= または *=): number = number * otherNumber;number = number / otherNumber;

    指数 (x**y): Math.pow(x, y);

    タイプ変換

    アレイを文字列に変換する: Array.toString()

    数値を文字列に変換: [number] + ""

    数値文字列を数値に変換: [文字列] - 0

    注:
    文字列はアレイとして扱うことはできませんが、 .length は文字列に対して機能します。

    タイプのチェック

    入力が数値かどうかを示すブール値を返します。 LGK.isNumber(123)

    オブジェクトプロパティへのアクセス

    cfgRequest などのマップオブジェクトのプロパティには、2 つの方法でアクセスできます。

    objectName.propertyName
    //or
    objectName["propertyName"]

    これは、代わりに「propertyName」テキストを変数に置き換えることができるため、大量の繰り返しコードをテーブルルックアップの結果に置き換えるのに役立ちます。

    たとえば、次のフィールドが関連付けられた詳細計画と、shipstatebooleantest という名前の管理テーブルについて考えてみます。

    • シップステータス
    • ブール 1
    • ブール値2
    • ブール 3
    • 数量 1
    • quantity2
    • 数量 3
    表 : 1. シップステートブールテスト
    ID シップステータス trueブール 数量テスト 行数量
    1 アリゾナ ブール 1 数量 1 1
    2 メイン ブール値2 quantity2 2
    3 カリフォルニア ブール 3 数量 3 3

    shipState が何であるかを確認し、それに応じてブール値と数量を設定する同一の if ステートメントを使用する代わりに、テーブル ルックアップの結果に基づいて値を設定する 1 つの if ステートメントのみに置き換えることができます。

    次の構成/再構成時スクリプトでは、 shipState フィールドに値がある場合に、ルックアップ関数によって返されるフィールドが設定されます。shipState フィールドが空白の場合、すべてのブール値フィールドと数量フィールドが設定されます。

    if (cfgRequest.shipState.value != "" && cfgRequest.shipState.value != null){
    	var fieldMapping = lookup("Select trueBoolean,quantityTest,rowQuantity from shipstatebooleantest where shipState = :value", { "value": cfgRequest.shipState.value });
    	console.log(fieldMapping);
    	if (fieldMapping != []){
    		cfgRequest[fieldMapping[0].trueBoolean].set("value",true);
    		cfgRequest[fieldMapping[0].quantityTest].set("value",fieldMapping[0].rowQuantity);
    	}
    }
    else{
    	var fieldMapping = lookup("Select trueBoolean,quantityTest,rowQuantity from shipstatebooleantest");
      console.log(fieldMapping);
      for (var row of fieldMapping) {
     		cfgRequest[row.trueBoolean].set("value",true);
     		cfgRequest[row.quantityTest].set("value",row.rowQuantity);
      }
    } 
    CPQインスタンスでここに説明されていない機能が必要な場合は、ユースケースを support@logik.io にお問い合わせください。