CPQでのデバッグ

  • リリースバージョン: Australia
  • 更新日 2026年03月12日
  • 所要時間:10分
  • 展開前にデバッガーを使用してスクリプトを完成させる方法。

    CPQでスクリプトを修正する必要がある場合は、「拡張機能」と「拡張スクリプト」のデバッグツールが役に立ちます。このガイドでは、展開前にデバッグ JSON を記述してスクリプトを分離してテストする方法について説明します。欠陥のあるスクリプトをデバッグするためのこれらのベストプラクティスに従うことで、詳細計画が確実に実行されるようにすることができます。

    デバッグに関する一般的なガイドライン

    console.log() の使用: 複雑な動作をコーディングする場合、特定の値が正しい方法で設定または操作されているかどうかを確認する必要がある場合があります。ルールによって返されたものだけを表示するのではなく、スクリプトで console.log([variableName]) 関数を使用して、デバッガーで実行したときにその行に変数の値を表示します。

    コードブロックをコメントアウトする:スクリプトが長くなると、動作の発生元を確認するために、コードの大部分をコメント化する必要がある場合があります。これは通常、または /* */ を使用してからデバッグすることで実行できます。

    将来使用するためにデバッグ JSON をコメントアウトする:実装中にルールを継続的に更新する場合は、デバッグ JSON をスクリプトの上部または下部のコメントブロック内に保存することをお勧めします。これにより、スクリプトが保存されたときに、後で参照できるように JSON も保存できます。

    これらの機能に関するその他のヒントについては、「 コメントとコンソールを使用したスクリプトのデバッグ」を参照してください。

    デバッガの使用方法

    デバッガ画面

    スクリプトエディターの場合:

    • バグアイコン (a) をクリックして、ダバガーのオプションを切り替えます。
    • 構成中にルールが実行されたときに表示される JSON を [デバッガー入力] セクション (b) に入力します。
    • [デバッガー出力] パネルの [デバッガーを実行 ] をクリックして、デバッガー入力を使用してルールを実行します。
      注:
      デバッガーを実行するためにスクリプトを保存する必要はありません。ボタンがクリックされたときのスクリプトの状態は、テスト時に使用されます。
    • 返されたオブジェクトとconsole.log情報は、[デバッガ出力] パネルに表示されます (d)。

    CPQデバッガーは、属性と値のペアを使用して記述される JSON 形式を使用します。属性はルールで使用されるフィールドの変数名であり、値はオブジェクト形式のフィールドデータです。

    注:
    フィールドがルールまたは拡張で参照されている限り、JSON で対応する属性が必要です。指定しないと、スクリプトをデバッガーで実行できません。

    また、次の点にも注意してください。

    • JSON パッケージは波かっこ ({ }) を使用して囲まれています
    • 各フィールドはカンマ (,) で区切られます。
    • 各属性と値のペアは、コロン (:) で区切られます。

    使用する JSON の構造は、各フィールドのオブジェクトタイプ、およびスクリプトがルールと拡張のどちらに使用されているかによって異なります。

    フィールド固有の JSON 形式

    • テキスト、数値、ブール値、および単一選択ピックリストフィールドは、文字列、数値、ブール値などの単純な特異値オブジェクトに対応するため、デバッグが最も簡単なフィールドです。
      {
      	"cfg":{
      		"textField": "value",
      		"singleSelect picklist": "value",
      		"numberField": 123,
      		"booleanField": true
      	}
      } 
    • 日付フィールドは、ISO-8601 国際標準を使用して日付情報を保持します。デバッガーでフィールドに日付を入力する場合、データは YYYY-MM-DDThh:mm:ss.sssZ 形式の文字列である必要があります。

      {
      	"cfg":{
      		"dateField": "2024-01-01T00:00:00.000Z"
      	}
      } 
    • 複数選択の選択リストは、文字列を含むアレイの形式です。オプションが 1 つだけ選択されていても、デバッグ時には文字列を配列形式にし、角括弧 ([ ]) で囲み、カンマ (,) で区切る必要があります。
      {
      	"cfg":{
      		"multiSelect picklist": [
      			"option 1",
      			"option 2"
      		]
      	}
      }
    • 製品ピッカーは、独自のタイプのシンプルなルールである一括アクションを備えているため、ルールまたは拡張での参照に固有です。これらは選択リストオプションによってのみ参照でき、単一選択または複数選択フィールドとして扱われます。または、デバッガーが製品ピッカーサブフィールドを参照するか、キー PKR を使用して集計することができます。
      {
      	"cfg": {
      		"productPickerSS": "selectedValue",
      		"productPickerMS": [
      			"selectedValue1",
      			"selectedValue2"
      		]
      	},
      	"pkr": {
      		"productPicker2": {
      			"value": "productPicker2_option1",
      			"select": true,
      			"quantity": 100,
      			"exampleSubfield": "Example Value",
      			"aggregates": {
      				"quantity_max": 100
      			}
      		}
      	}
      }

      ルールで製品ピッカーサブフィールドを参照する場合は、cfg ではなく pkr オブジェクトを使用する必要があることに注意してください。

      let x = pkr.productPickerName.subFieldName
    • セットは高度な関数で参照できませんが、詳細関数に含まれるフィールドは参照できます。セットフィールドの性質上、セットの行は [構成/再構成] 拡張でのみ決定および参照できます。ただし、optionValue などのフィールドがルール内にあるかどうかをテストすることはできます。
      {
      	"set": {
      		"exampleSet": {
      			"index": 1,
      			"optionValue": "product1",
      			"selectOption": true,
      			"size": 2,
      			"aggregateExample1": 1
      		}
      	}
      }

      セットのフィールドをデフォルトにする方法の詳細については、「 スクリプティング:設定値を入力する方法」を参照してください。

    コンテキスト固有の JSON 形式

    フィールド入力は、フィールド変数名をキーとして使用し、目的の値を値として使用して、JSON 形式で入力されます。

    {
      "cfg": {
        "exampleField": "Example Value"
      }
    }

    構成および再構成では、フィールド変数名をキーとして使用して、入力が JSON 形式で入力されます。値は、 valueuserEdited の 2 つのプロパティで構成されるオブジェクトです。 value 目的のフィールド値に設定する必要があります。 userEdited はブール値です。

    コンテキスト固有の JSON 形式:フィールド

    {
    	"cfgRequest": {
    		"exampleField": {
    			"value": "Example Value",
    			"userEdited": false
    		},
    		"exampleMultiselect picklist": {
    			"value": [
    				"one",
    				"two"
    			],
    			"userEdited": false
    		}
    	}
    }

    userEditedプロパティの使用方法の詳細については、次を参照してください。スクリプティング:最初構成と後続構成の確認

    コンテキスト固有の JSON 形式:製品ピッカー

    "cfgRequest": {
    	"pkr": {
    		 "productPicker1": {
    					"data": [
    						{
    							"value": {
    								"value": "productPicker1_option1",
    								"userEdited": false
    							},
    							"select": {
    								"value": true,
    								"userEdited": false
    							},
    							"quantity": {
    								"value": 100,
    								"userEdited": false
    							},
    							"exampleSubfield": {
    								"value": "Example Value",
    								"userEdited": false
    							}
    						}
    					],
    					"aggregates": {
    						"quantity_max": {
    						"value": 100
    					}
    				}
    			}
    		},
    		"productPicker2": {
    			"value": "productPicker2_option1",
    			"userEdited": false
    		}
    	}
    }

    コンテキスト固有の JSON 形式:セット

    {
    	"cfgRequest": {
    		"set": {
    			"exampleSet": {
    				"data": [
    					{
    						"index": {
    						"value": 1
    						},
    						"optionValue": {
    							"value": "product1",
    							"userEdited": false
    						},
    						"selectOption": {
    							"value": true,
    							"userEdited": false
    						},
    						"textField": {
    							"value": "a",
    							"userEdited": false
    						}
    					}
    				],
    				"size": {
    					"value": 1,
    					"userEdited": false
    				},
    				"aggregateExample1": {
    					"value": 1
    				}
    			}
    		}
    	}
    }

    コンテキスト固有の JSON フォーマット:セット内の製品ピッカー

    	"cfgRequest": {
    		"set": {
    			"exampleSet": {
    				"data": [
    					{
    						"index": {
    							"value": 1
    						},
    						"optionValue": {
    							"value": "product1",
    							"userEdited": false
    						},
    						"selectOption": {
    							"value": true,
    							"userEdited": false
    						},
    						"productPicker1InSet": {
    							"value": [
    								"option1_Of_productPicker1InSet",
    								"option2_Of_productPicker1InSet"
    							],
    						"userEdited": false
    						},
    						"pkr": {
    							"productPicker2InSet": {
    								"data": [
    									{
    										"value": {
    											"value": "option1_Of_productPicker2InSet",
    											"userEdited": false
    										},
    										"select": {
    											"value": true,
    											"userEdited": false
    										},
    										"quantity": {
    											"value": 100,
    											"userEdited": false
    										}
    									}
    								],
    								"aggregates": {
    									"quantity_max": {
    									"value": 100
    									}
    								}
    							}
    						}
    					}
    				],
    				"size": {
    					"value": 1,
    					"userEdited": false
    				},
    				"aggregateExample1": {
    					"value": 1
    				}
    			}
    		}
    	}
    }

    BOM 応答の拡張:

    製品リスト:入力は、プロパティ変数名をキーとして使用し、目的の値を値として使用して、JSON 形式のオブジェクトのアレイとして入力されます。

    [
    	{
    		"id": "test product",
    		"quantity": 2
    	},
    	{
    		"id": "test product2",
    		"quantity": 5,
    		"bomType": "MANUFACTURING"
    	}
    ]

    Picklist 拡張価格拡張:

    Picklist 拡張要求:入力は、プロパティ変数名をキーとして使用し、意図した値を値として使用して、JSON 形式のオブジェクトのアレイとして入力されます。この例では、「set」と「index」は set を使用する場合にのみ必要です。
    [
    	{
    		"fieldVariableName": "myField1",
    		"set": "mySetVariableName1",
    		"index": 1,
    		"optionValue": "Option 1",
    		"productId": "myProduct1",
    		"productUniqueIdentifier": "myId"
    	}
    ]

    デバッガの動作がランタイムの動作と異なる場合

    ほとんどの場合、デバッグ JSON は、実行時にフィールドの有効な値として通常入力されるものと正確に一致する必要があります。上記の正しいデータタイプまたは構造を使用していることを確認してください。

    また、同じフィールドに対して同様のルールが作用している場合もあります。この場合、デバッガーは一度に 1 つのルールの動作しか表示できないため、役に立ちません。望ましくない動作を除外するために、ルール全体を非アクティブ化して再展開する必要がある場合があります。

    他のすべてがうまくいかない場合は、サポートチームにケースを開くか、support@logik.io までメールでお問い合わせください。