트랜잭션 관리자: 통합 - 핸들바 구문
통합 변환 템플릿을 빌드할 때 핸들바 템플릿 언어를 사용할 수 있습니다.
핸들바는 동적 콘텐츠를 생성하는 데 사용되는 경량 템플릿 언어입니다. 통합 변환 템플릿을 빌드하는 관리자는 다음과 같은 주요 Handlebars 구문 요소와 함께 다음과 같은 개선 사항과 관련된 개선 사항을 사용합니다.CPQ
- 핸들바 표현식: 이중 중괄호로 {{ }}묶인 표현식을 사용하면 관리자가 변수, 함수 또는 속성을 템플릿에 삽입할 수 있습니다. 예를 들어 {{user.name}} 사용자 객체의 name 속성 값을 렌더링합니다.
- 기본 제공 도우미에는 조건부 도우미와 반복 도우미가 포함됩니다.
- 조건부 도우미를 사용하면 값에 따라 조건부로 컨텐츠를 렌더링할 수 있습니다. 예:
- #if 조건이 예일 경우 컨텐츠를 렌더링합니다.
{{#if user.isActive}} Active {{/if}}이 스니펫은
user.isActive가 예일 때만 "활성"을 렌더링합니다. - #unless – #if와 반대로 조건이 false인 경우 컨텐츠를 렌더링합니다.
{{#unless user.isActive}} Inactive {{/unless}}이 스니펫은
user.isActive가 아니오인 경우 "비활성"을 렌더링합니다.
- #if 조건이 예일 경우 컨텐츠를 렌더링합니다.
- 반복 도우미를 사용하면 목록을 반복하거나 범위를 수정할 수 있습니다.
- #each 배열을 반복하고 각 항목의 컨텐츠를 렌더링합니다.
{{#each users}} <li>{{this.name}}</li> {{/each}}이 스니펫은 사용자를 반복하고 각 사용자의 이름을 목록 항목으로 표시합니다.
- #with 범위를 특정 객체로 변경합니다.
{{#with user}} <p>{{name}}</p> {{/with}}이 스니펫은 블록의
사용자속성에 대한 액세스를 단순화합니다.
- #each 배열을 반복하고 각 항목의 컨텐츠를 렌더링합니다.
- 조건부 도우미를 사용하면 값에 따라 조건부로 컨텐츠를 렌더링할 수 있습니다. 예:
통합을 위한 고급 핸들바 구문
다음은 핸들바 템플릿 언어를 활용하는 통합 템플릿에 사용되는 각 구문 요소에 대한 설명입니다.
- {{#if lines}} {{/if}}
{{#if}} 어떤 것이 사실인지 확인합니다.
다음 스니펫은
줄에 무언가가 있는지 확인합니다.줄에 값(예: 항목 목록 또는 일부 데이터)이 있는 경우 블록 내에서 작업을 수행합니다.줄이 비어 있거나 없으면 블록을 건너뜁니다.{{#if lines}} We have lines to process! {{else}} No lines available. {{/if}}라인이 있으면 "처리할 라인이 있습니다!"로 표시됩니다. 그렇지 않으면 "사용 가능한 회선 없음"으로 표시됩니다. - {{~#each lines~}} {{/each}}
{{#each}} 목록의 각 항목에 대해 내용을 반복합니다.
다음 스니펫은
라인목록의 각 항목을 반복하고 모든 항목에 대한 블록 내부의 콘텐츠를 렌더링합니다. ~ 기호는 핸들바의 공백 제어 문자입니다. 블록 전후의 추가 공간이나 줄 바꿈을 제거하여 더 깨끗하고 컴팩트한 출력을 보장합니다. (아래 참조){{~#each lines~}} <p>{{this}}</p> {{/each}}스니펫은
각 항목을 한 줄로 살펴보고 각 항목을 단락 태그에 넣습니다. - {{#if <logik line-level field varname>}} {{/if}}
{{#if <logik ...}} 특정 데이터가 사실인지 존재하는지 확인합니다. 데이터의 특정 필드 또는 값(예: varname)이 존재하는지 또는 예인지 확인합니다. 데이터 세트와 같은 보다 복잡한 구조에서 특정 정보를 확인하는 방법입니다.
{{#if logik.lineLevelField.isActive}} The field is active! {{else}} The field is not active. {{/if}}이 스니펫은
logik.lineLevelField.isActive가 예인지 여부를 확인합니다(예: "활성"인지 확인). 활성 상태이면 "필드가 활성 상태입니다!"로 표시됩니다. 그렇지 않은 경우 "필드가 활성화되어 있지 않습니다"라고 표시됩니다.
물결표(~)
제어 문자인 물결표(~)는 공백과 줄 바꿈을 숨겨 출력을 깔끔하게 유지하는 데 도움이 됩니다. HTML을 더 컴팩트하게 만들고 출력의 간격 문제를 방지합니다.
위의 예 중 일부에서 앞의 #each 선행 물결표는 블록이 시작되기 전에 공백을 제거합니다. #each 뒤의 후행 물결표는 블록이 시작된 후 공백을 제거합니다.
zeroIfMissing 사용자 지정 도우미
zeroIfMissing 도우미는 누락된 값으로 인한 오류를 방지하고 숫자 필드가 항상 유효한 기본값을 갖도록 합니다.
Custom Helper 'zeroIfMissing'
"price": {{zeroIfMissing txn.price}}, would become -> "price": 0 (or "price": 9.99, if txn.price is present)
lgkFilter 사용자 지정 도우미
lgkFilter 도우미는 컬렉션을 반복하고 지정된 조건을 충족하는 항목만 포함합니다.
{
"numericFiltered": [
{{#lgkFilter lines "txn.line.custom.someNumber > 10"}}
{
"id": "{{txn.line.product.id}}",
"someNumber": "{{txn.line.custom.someNumber}}"
}
{{else}}
{
"error": "Item could not be added (numeric condition)"
}
{{/lgkFilter}}
],
"textFiltered": [
{{#lgkFilter lines "txn.line.custom.status == Active"}}
{
"id": "{{txn.line.product.id}}",
"status": "{{txn.line.custom.status}}"
}
{{else}}
{
"error": "Item could not be added (text condition)"
}
{{/lgkFilter}}
]
}
- 간단한 구문: {{#lgkFilter lines "<predicate_field>"}}
- 조건부 구문: {{#lgkFilter lines "<predicate_field> <comparator> <literal_value>"}}
- 지원되는 비교기: <, , ><=, >=, !=,==
- &와 같은 복잡한 조건은 지원되지 않습니다.
else 블록은 도우미 내에서 지원됩니다.
구문이 올바르지 않고 필드를 구문 분석할 수 없는 경우 도우미가 오류를 발생시킵니다.
도우미는 유효한 JSON 출력을 위해 내부적으로 쉼표 조인을 수행합니다.
@ 기호
@는 현재 컨텍스트가 아닌 외부 또는 상위 컨텍스트에서 값을 끌어오도록 합니다. 필요한 데이터가 구조의 상위 수준에 있고 현재 범위의 로컬 데이터와 혼동하지 않으려는 경우에 자주 사용됩니다.
표현식 "LGK__TransactionId__c": "@{parentTransaction.id}"@ 에서 기호는 핸들바 또는 기타 유사한 시스템과 같은 템플릿 시스템의 상위 컨텍스트 또는 개체의 값을 참조하는 데 사용됩니다.
이 구문은 @{} 시스템에 상위 컨텍스트(현재 범위 밖의 객체 또는 데이터)를 보고 parentTransaction.id 값을 검색하도록 지시합니다.
예를 들어 다음과 같은 객체가 있다고 가정합니다.
{
"parentTransaction": {
"id": "12345"
}
}
를 사용하면 "LGK__TransactionId__c": "@{parentTransaction.id}"parentTransaction의 id(12345)"LGK__TransactionId__c"가 .
조건부 할당 예시
이 라인 "LGK__ParentTransactionLineId__c": {{#if txn.line.custom.parentLineReferenceId}} "@{line_{{txn.line.custom.parentReferenceId}}.id}" {{else}} null {{/if}} 은 핸들바 템플릿의 일부이며 필드 LGK__ParentTransactionLineId__c의 값을 조건부로 설정합니다.
LGK__ParentTransactionLineId__c는 결과 값이 배치될 키입니다.- {{#if txn.line.custom.parentLineReferenceId}}
txn.line.custom.parentLineReferenceId가 존재하고 값이 있는지 확인합니다. - @{line_{{txn.line.custom.parentReferenceId}}.id}
parentReferenceId를 기반으로 특정 줄의ID에 대한 동적 참조를 생성합니다. - {{else}} null {{/if}} 조건이 false이면 값을 null로 설정합니다.
Salesforce 필드와 조건부 구두점 연결
핸들바에서 템플릿의 변수를 결합하고 {{#if}} 블록을 사용하여 조건부 논리를 처리하여 구두점(예: 쉼표, 공백 및 조건부 확인)과 함께 여러 필드를 연결할 수 있습니다.
예를 들어, 다음 접근 방식을 사용하여 도로명 주소, 도로명 주소2, 도시, 주 및 주소의 우편 번호와 같은 필드를 연결하고 도로명 주소2 뒤의 쉼표와 공백이 도로명 주소2가 채워진 경우에만 포함되도록 할 수 있습니다.
{{#if streetAddress}}
{{streetAddress}}
{{#if streetAddress2}}, {{streetAddress2}}{{/if}}
{{#if city}}, {{city}}{{/if}}
{{#if state}}, {{state}}{{/if}}
{{#if zipcode}}, {{zipcode}}{{/if}}
{{else}}
No address available
{{/if}}
이는 streetAddress, streetAddress2 및 city와 같은 필드를 연결하여 해당 필드가 채워지는 경우에만 쉼표가 포함되도록 합니다.
streetAddress2가 있는 출력 예:"123 Main St, Apt 4, San Francisco, CA, 94105"
streetAddress2가 없는 출력 예:"123 Main St, San Francisco, CA, 94105"
결론
관리자는 이러한 핵심 요소를 사용하여 동적이고 유연하며 유지관리 가능한 통합 변환 템플릿을 만들 수 있습니다. 표현식, 도우미, 블록, 조건부 및 상위 컨텍스트 참조를 이해하고 활용하면 복잡한 데이터와 논리를 쉽게 처리할 수 있습니다.