트랜잭션 관리자: 통합 - 게시
POST 통합을 사용하여 Salesforce와 같은 외부 공급업체 애플리케이션에 데이터를 쓰는 방법에 대해 알아봅니다.
필수 구성요소
이 문서에서는 해당 Salesforce 환경에 통합된 환경이 있다고 CPQ 가정합니다. 계속하기 전에, 필요한 통합을 완료하려면 문서를 참조하십시오 Salesforce 트랜잭션 관리자 통합 패키지 확장 설치 .
최종 사용자가 데이터를 해당 Salesforce 트랜잭션 기록 CPQ 에 다시 쓰는 CPQ 기능을 시작할 때 Salesforce 트랜잭션의 기록 식별자가 있어야 합니다. Salesforce 트랜잭션 ID를 검색하고 나중에 사용할 수 있도록 저장 CPQ 하는 방법을 이해하려면 다음 문서를 참조하십시오 트랜잭션 관리자: 통합 - 가져오기.
Salesforce 설정
이 예에서는 아래 나열된 Salesforce 필드에 LGK 데이터를 씁니다. Salesforce 트랜잭션 및 TransactionLine 객체를 검토하여 이러한 필드가 있는지 확인합니다.
헤더 필드(Salesforce 객체:LGK__Transaction__c)
- LGK__Stage__c 트랜잭션의 스테이지를 보유합니다 CPQ .
- LGK__PricingExtendedNet__c 은(는) 트랜잭션(헤더 수준) 순 합계입니다.
- LGK__Id__c 은(는) 상위 트랜잭션의 에 id 매핑됩니다.
라인 필드(Salesforce 객체: LGK__TransactionLine__c)
- LGK__Quantity__c: 라인 수준 수량입니다.
- LGK__PricingList__c: 라인 수준 정가입니다.
- LGK__PricingNet__c: 라인 순 가격 또는 할인된 개수 가격입니다.
- LGK__PricingExtendedNet__c: 라인 순 합계 또는 확장 순 가격(수량 포함)입니다.
- LGK__ParentTransactionLineId__c 존재하는지 확인합니다 txn.line.custom.parentLineReferenceId . 이 경우 해당 라인 id을 할당하고, 그렇지 않으면 값을 null로 설정합니다.
- LGK__Product2Id__c 은 현재 트랜잭션 라인과 연결된 제품에 매핑됩니다 partnerId .
복합 그래프를 사용한 POST 통합
LGK POST 통합은 Salesforce 복합 그래프 API를 사용하여 단일 API 호출로 여러 Salesforce 객체를 동시에 업데이트하므로 헤더 수준 필드와 라인 수준 필드를 모두 동일한 요청에서 업데이트할 수 있습니다.
Salesforce 복합 그래프 API를 사용하면 여러 작업을 단일 요청으로 묶을 수 있으므로 통합을 매우 효율적으로 수행할 수 있습니다. 이를 통해 단일 POST 호출로 여러 Salesforce 객체에 쓸 수 있으며, API 사용량을 줄이고, 데이터 일관성을 보장하고, 모든 작업이 성공하거나 아무 것도 적용되지 않는 원자 트랜잭션을 활성화할 수 있습니다. 이렇게 하면 통합 프로세스가 단순화되고 오류 처리가 향상됩니다. 복합 그래프 구성에 대한 자세한 내용은 복합 그래프 | REST API 개발자 가이드 | Salesforce 개발자
복합 그래프 API는 Salesforce 핵심 기능이므로 설정이 필요하지 않습니다. 그러나 아래에 설명된 LGK POST 호출에 복합 그래프를 채우기 전에 여기에 개념을 소개합니다. 아래 POST 예에서 통합은 사용자가 요구 사항에 따라 필드를 추가하거나 제거할 수 있는 옵션과 함께 위의 Salesforce 설정 섹션에서 앞서 언급한 헤더 수준 및 라인 수준 필드를 사용합니다.
트랜잭션 관리자 설정
Salesforce 설정 섹션에 언급된 트랜잭션 ID 매핑은 올바른 라인 ID를 Salesforce로 보내고 업데이트, 삭제 및 추가를 효과적으로 관리하는 데 도움이 됩니다 CPQ . Salesforce는 LGK__TransactionId__c 상위 트랜잭션 ID에 매핑함으로써 모든 라인 수준 변경 사항을 올바른 트랜잭션에 연결하여 적절한 연결을 보장할 수 있습니다. LGK__ParentTransactionLineId__c 상위 라인 참조를 확인합니다. 있는 경우 해당 라인 ID를 할당하여 유효한 라인만 업데이트되거나 삭제되도록 합니다. 참조가 없으면 값을 null로 설정합니다. LGK__Product2Id__c은 제품의 파트너 ID에 매핑되어 정확한 가격 책정 및 할인 적용을 위해 올바른 제품이 라인에 연결되도록 합니다. 이러한 동적 매핑을 통해 Salesforce는 트랜잭션 및 제품 데이터와의 적절한 연결을 유지하여 사용자의 라인 수준 할인을 유지하면서 수량을 정확하게 업데이트하고, 라인을 삭제하고, 새 라인을 추가할 수 있습니다.
이 통합 변환에서는 두 개의 사용자 지정 라인 필드와 lineReferenceIdparentLineReferenceId. 이러한 필드는 및 (잠재적으로) txn.line.parent.id 시스템 필드의 txn.line.id 변형을 저장하도록 설정되어야 합니다.
규칙
Salesforce 복합 그래프 API는 특정 식별자에서 하이픈을 지원하지 않으므로 LGK 라인 ID와 같이 하이픈으로 처리된 ID가 포함된 데이터를 보낼 때 문제가 발생할 수 있습니다. 통합이 작동하도록 시스템은 LGK 라인 ID에 있는 하이픈을 제거한 후 Salesforce로 보냅니다. 이렇게 하면 ID가 Salesforce의 형식 요구 사항을 준수하고 잘못된 문자와 관련된 오류 없이 통합이 올바르게 작동할 수 있습니다. 하이픈을 제거하면 Salesforce에서 모든 식별자를 수락하여 통합이 업데이트 및 기타 작업을 원활하게 처리할 수 있도록 합니다.
규칙을 사용하여 하이픈을 제거하려면 라인 수준 참조 ID 필드가 Salesforce와 호환되도록 결정 규칙 작업을 만듭니다. 단일 규칙에 lineReferenceId 결정 작업과 parentLineReferenceId 결정 작업을 모두 추가할 수 있습니다.
다음은 필드를 정의하는 방법에 대한 두 가지 결정 스크립트(트랜잭션 라인 수준)입니다.
// lineReferenceId Determination Action
var original = txn.line.id;
var result = "";
for (var i = 0; i < original.length; i++) {
if (original.charAt(i) !== "-") {
result += original.charAt(i);
}
}
return result;
// parentLineReferenceId Determination Action
var original = txn.line.parent.id;
var result = "";
if (txn.line.parent.id != txn.id) {
for (var i = 0; i < original.length; i++) {
if (original.charAt(i) !== "-") {
result += original.charAt(i);
}
}
}
return result;
규칙은 다음과 같이 구성되어야 하며, 처리할 txn.line.custom.lineReferenceId 두 가지 결정 작업과 txn.line.custom.parentLineReferenceId함께 구성되어야 합니다.
아래 스크린샷은 POST 통합에서 "Salesforce"로서의 외부 연결을 보여줍니다.
새 연결을 작성하려면 의 "연결 작성" 섹션 트랜잭션 관리자: 통합을 참조하십시오.
데이터를 Salesforce에 다시 게시하려면 Salesforce 트랜잭션 기록 ID가 필요합니다. 트랜잭션 ID를 가져오도록 GET 통합을 아직 설정하지 않은 경우 문서를 참조하십시오 트랜잭션 관리자: 통합 - 가져오기.
통합 추가
- 통합 섹션으로 이동하여 새 통합을 생성합니다.
- HTTP 메서드: POST
- 추가 경로:/services/data/vXX.X/composite/graph, 여기서 vXX.X 최신 복합 그래프 버전입니다. 여기에서 최신 버전을 확인할 수 있습니다.
- 포함할 라인 항목 세부 정보: 선택한 라인
- 연결: Salesforce
- 변환 요청 섹션에서 다음 샘플 트랜잭션 JSON을 추가합니다(헤더 및 라인 수준 필드는 기본 설정에 따라 다를 수 있음).
{
"graphs": [
{
"graphId": "graph0",
"compositeRequest": [
{
"method": "PATCH",
"url" : "/services/data/v61.0/sobjects/LGK__Transaction__c/LGK__TransactionUUID__c/{{txn.id}}",
"referenceId": "parentTransaction",
"body": {
"LGK__Stage__c": "{{txn.stage}}",
"LGK__NetTotal__c": "{{txn.pricing.total}}"
}
}
{{#if lines}}
{{~#each lines~}}
{{#if txn.line.product.partnerId}}
,
{
"method": "PATCH",
"url": "/services/data/v61.0/sobjects/LGK__TransactionLine__c/LGK__TransactionLineId__c/{{txn.line.id}}",
"referenceId": "line_{{txn.line.custom.lineReferenceId}}",
"body": {
"LGK__TransactionId__c": "@{parentTransaction.id}",
"LGK__ParentTransactionLineId__c": {{#if txn.line.custom.parentLineReferenceId}}"@{line_{{txn.line.custom.parentLineReferenceId}}.id}"{{else}}null{{/if}},
"LGK__Product2Id__c": "{{txn.line.product.partnerId}}",
"LGK__Quantity__c": "{{txn.line.quantity}}",
"LGK__ListPrice__c": "{{txn.line.pricing.list}}",
"LGK__NetPrice__c": "{{txn.line.pricing.net}}",
"LGK__NetTotal__c": "{{txn.line.pricing.extendedNet}}"
}
}
{{/if}}
{{/each}}
{{/if}}
]
}
]
}
이 변환 템플릿은 다음과 같이 변환 요청 섹션의 변환 템플릿 영역에 추가됩니다.
핸들바 구문에 대한 자세한 내용은 다음 문서를 참조하십시오 트랜잭션 관리자: 통합 - 핸들바 구문.
POST 호출 디버깅
통합 관리자 인터페이스를 사용하여 예상대로 작동하지 않는 POST 호출을 디버그하려면 다음 단계를 수행합니다.
- 통합이 작동하지 않는 트랜잭션 ID를 복사하여 작은 트랜잭션 ID 상자에 붙여넣은 다음 JSON 가져오기를 클릭합니다.
애플리케이션이 샘플 트랜잭션 JSON 상자를 채웁니다.
- 변환 실행을 클릭합니다. 그러면 변환 논리를 통해 샘플 트랜잭션 JSON 입력에 포함된 트랜잭션 정보가 처리되고 Postman을 사용하여 테스트할 수 있는 결과가 생성됩니다.
Salesforce 조직과 인터페이스하도록 Postman을 설정하는 방법에 대한 자세한 내용은 Postman을 Salesforce에 연결을 참조하십시오.