CPQ에서 디버깅
디버거를 사용하여 배포 전에 스크립트를 완성하는 방법입니다.
에서 스크립트 CPQ를 수정해야 하는 경우 고급 기능 및 보강 스크립트의 디버깅 도구가 도움이 될 수 있습니다. 이 가이드에서는 디버그 JSON을 작성하여 배포 전에 스크립트를 격리하고 테스트하는 방법을 보여줍니다. 결함이 있는 스크립트를 디버깅하기 위한 다음 베스트 프랙티스를 따르면 Blueprint가 완벽하게 실행되도록 할 수 있습니다.
디버깅에 대한 일반 지침
console.log() 사용: 복잡한 동작을 코딩할 때 특정 값이 올바른 방식으로 설정되거나 조작되었는지 확인해야 할 수 있습니다. 규칙에 의해 반환된 내용만 보는 대신, 스크립트에서 console.log([variableName]) 함수를 사용하여 디버거에서 실행할 때 해당 줄에 있는 변수 값을 표시합니다.
코드 블록 주석 처리: 스크립트가 길어지면 동작이 시작되는 위치를 확인하기 위해 코드의 많은 부분을 주석 처리해야 할 수도 있습니다. 이 작업은 일반적으로 또는 /* */를 사용한 다음 디버깅하여 수행할 수 있습니다.
나중에 사용할 수 있도록 디버그 JSON을 주석 처리합니다. 구현하는 동안 규칙을 지속적으로 업데이트하는 경우 디버깅 JSON을 설명 블록 내의 스크립트 상단 또는 하단에 저장하는 것이 좋습니다. 이렇게 하면 스크립트가 저장될 때 나중에 참조할 수 있도록 JSON도 저장할 수 있습니다.
이러한 기능에 대한 자세한 팁은 다음 문서를 참조하십시오 설명과 콘솔을 사용하여 스크립트 디버깅.
디버거 사용 방법
스크립트 편집기에서:
- 버그 아이콘(a)을 클릭하여 더거 옵션을 전환합니다.
- 구성 중에 규칙이 실행될 때 나타나는 대로 디버거 입력 섹션(b)에 JSON을 입력합니다.
- 디버거 출력 패널에서 디버거 실행 을 클릭하여 디버거 입력으로 규칙을 실행합니다.주:디버거를 실행하기 위해 스크립트를 저장할 필요는 없습니다. 버튼을 클릭했을 때의 스크립트 상태는 테스트 중에 사용됩니다.
- 반환된 객체와 console.log 정보는 디버거 출력 패널(d)에 나타납니다.
디버거는 CPQ 속성-값 쌍을 사용하여 작성되는 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" } } - 다중 선택 목록은 문자열이 포함된 배열 형식입니다. 하나의 옵션만 선택한 경우에도 디버깅할 때 문자열은 대괄호([ ])로 래핑되고 쉼표(,)로 구분되는 배열 형식이어야 합니다.
{ "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 형식으로 입력됩니다. 값은 두 개의 속성으로 구성된 객체입니다. value 및 userEdited. 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"
}
]선택 목록 확장 가격 보강:
선택 목록 확장 요청: 입력은 속성 변수 이름을 키로, 의도한 값을 값으로 사용하여 JSON 형식의 객체 배열로 입력됩니다. 이 예에서 "set" 및 "index"는 집합을 사용하는 경우에만 필요합니다.[
{
"fieldVariableName": "myField1",
"set": "mySetVariableName1",
"index": 1,
"optionValue": "Option 1",
"productId": "myProduct1",
"productUniqueIdentifier": "myId"
}
]
디버거의 동작이 런타임 동작과 다른 경우
거의 모든 경우에 디버깅 JSON은 런타임 중에 일반적으로 필드에 유효한 값으로 입력되는 내용과 정확히 일치해야 합니다. 위에서 설명한 올바른 데이터 유형 또는 구조를 사용하고 있는지 확인하십시오.
경우에 따라 유사한 규칙이 같은 필드에서 작용할 수 있습니다. 이 경우 디버거는 한 번에 하나의 규칙의 동작만 표시할 수 있으므로 도움이 되지 않습니다. 원치 않는 동작을 배제하기 위해 전체 규칙을 비활성화하고 다시 배포해야 할 수도 있습니다.
다른 모든 방법이 실패하면 지원팀에 케이스를 열거나 support@logik.io 로 이메일을 보내주십시오.