스크립팅: 설정 값을 채우는 방법
구성/재구성 시 Blueprint 보강 스크립트를 사용하여 필드 값을 세트에 로드하는 방법에 대한 자세한 예를 봅니다.
이 문서에서는 "구성/재구성 시" Blueprint 보강 스크립트를 사용하여 필드 값을 세트에 로드하는 방법을 설명합니다.
이 예에서는 외부 연결을 사용하여 Salesforce에 SOQL 호출을 하여 모든 계정 연락처의 성을 가져오고 추가 구성을 위해 세트에 미리 로드하는 방법을 보여줍니다.
필수 구성요소
이 예제를 완료하려면 다음이 필요합니다.
- 인스턴스에서 CPQ 활성화된 보강
- 인스턴스에서 외부 연결이 활성화되어 있습니다.CPQ
- 작성되어 Blueprint와 연결된 세트
- 세트와 연결된 텍스트 필드
외부 연결: SOQL 호출
관리자 화면의 CPQ 유틸리티 아래에서 외부 연결을 찾습니다.
- 통합 유형을 Salesforce로 설정합니다.
- 생성할 SOQL 쿼리를 정의합니다. 이 예에서는 특정 계정과 연결된 모든 연락처를 검색하고 성을 저장합니다.
SOQL 쿼리:
SELECT LastName FROM Contact WHERE AccountId = '{{accId}}'
스크립트 구성/재구성 시
블루프린트에서 보강 영역으로 이동하여 "구성/재구성 시" 보강에 스크립트를 추가합니다.
let setData = []; // initialize the set data as an empty array
//if initializing, default in setData
if (cfgRequest.demoset_swc.data == []) {
const inp = {"accId":"0015f000006lRKcAAM" }; // Hardcoded accountId, could be mapped in from a field
const response = Salesforce.getSetInit_swc(inp); // SELECT LastName FROM Contact WHERE AccountId = '{{accId}}'
const contactList = response.body.records;
if (contactList.length > 0) {
for (var contact of contactList) {
let elem = {"textTest_swc":{"value": contact.LastName } }; // set the field value
setData.push(elem); // add to the setData array
}
// after looping through all the contacts/previous set data, add them to the set
cfgRequest.demoset_swc.set("data",setData);
}
}
return cfgRequest;
스크립트 검토 과정
- setData 배열은 빈 배열(1행)으로 초기화됩니다.
- API 페이로드 또는 이전 구성(3행)의 데이터가 세트에 이미 있는지 확인합니다.
- Salesforce에 대한 쿼리 입력을 정의합니다(5행). 이 예에서 계정 ID는 하드 코딩되어 있지만 필드에서 전달되거나 견적의 쌍둥이 필드에서 매핑될 수 있습니다. 정의된 외부 연결을 사용하여 Salesforce에 SOQL 쿼리를 수행한 다음, 응답을 저장하고(6행) 기록 배열(7행)을 가져옵니다.
- 호출이 기록을 반환하면(8행), 기록을 반복하고(9행) "textTest_swc" 필드 값을 연락처 LastName(10행)으로 설정합니다. 마지막으로 setData 배열에 새 set 요소를 추가합니다(11행).
- 접촉 창구를 반복한 후 구성 요청(14행)의 세트 "demoSet_swc"에 모든 setData를 추가합니다.
- 마지막으로 업데이트된 구성 요청을 반환합니다(18행).
이 스크립트를 다시 사용하려면 다음 줄을 변경합니다.
- 라인 5: 계정 ID(0015f000006lRKcAAM)를 새 값으로 업데이트하거나 견적의 필드를 쌍으로 만듭니다.
- 6행: Salesforce 연결의 이름을 업데이트합니다.
- 10번째 줄: 필드 이름(textTest_swc)을 사용 중인 세트의 필드로 업데이트합니다.
- 16번째 줄: 세트 이름(demoset_swc)을 사용 중인 세트의 이름으로 업데이트합니다.
외부 연결에서 데이터 설정 각 구성
대신 사용자가 이전 구성에서 입력한 모든 내용을 기본 데이터가 덮어쓰도록 하려면 4행에서 if 절을 삭제합니다.
집합의 특정 필드만 사용자가 편집한 필드를 덮어쓰도록 하고 구성 간에 다른 필드를 유지하려면 집합 인덱스를 명시적으로 참조해야 합니다.
cfgRequest.[setName].data[i].set("fieldName",{"value":"fieldValue"});
다음을 바꾸면 향상에서 사용할 수 있습니다.
setName: 세트의 변수 이름fieldName: 필드의 변수 이름i: 필드 값을 결정하려는 기존 인덱스fieldValue: 필드에 대해 설정하려는 값
주:
빈 데이터 배열을 참조하지 않으려면 이 호출이 보강 스크립트에서 설정된 기본 코드 후에 발생해야 합니다. 그렇지 않으면 초기화 시 null 참조 오류가 발생합니다.
또한 데이터에서 참조하는 인덱스가 있는지 확인해야 합니다. 설정된 데이터 배열의 길이에 대한 검사를 포함하는 것은 데이터 배열이 존재하는지 보장하는 좋은 방법입니다. 다음 예시를 참조하십시오.
if (cfgRequest.setTest.data.length >= 1) {
cfgRequest.setTest.data[0].set("setTestNumberField",{"value":cardNumber});
cfgRequest.setTest.data[0].set("setTestSingleSelect picklist",{"value":"set option 1"});
}
length 함수가 "1"을 반환하는 동안 인덱스는 첫 번째 인덱스로 0부터 시작하여 참조되기 때문에 인덱스는 "0"입니다.