ConsolidationService - 범위 지정, Gobal
ConsolidationService API는 사용자 지정 논리를 사용하여 복잡한 계층적 비즈니스 데이터(예: 계약, 견적, 라인 항목 및 권리)를 병합하고 중복을 제거하는 메서드가 포함된 스크립트 포함입니다.
이 API는 sn_l2c_core 네임스페이스에 속하며, API에 액세스하려면 관리자 역할과 현금으로 연결 코어(com.snc.l2c_core) 플러그인이 필요합니다.
- 여러 속성 또는 중첩된 하위 엔터티에서 두 기록을 동일하게 만드는 요소를 정의합니다.
- 특정 기준이 충족되면 조건부로 기록을 병합합니다.
- 통합 중에 수량 합산 또는 날짜 범위 계산과 같은 사용자 지정 계산을 적용합니다.
- 깊이 중첩된 하위 구조를 재귀적으로 중복 제거(통합)합니다.
- 플로우 및 통합 전반에 걸쳐 동일한 통합 논리를 일관되게 재사용합니다.
ConsolidationService는 현금으로 연결 코어 기본 요소 엔진의 일부이며 제품을 통해 액세스합니다.현금으로 연결 코어
시작하기 전에
- 현금으로 연결 코어 플러그인(
com.snc.l2c_core)이 설치되어 있고관리자역할이 있어야 합니다. - sn_l2c_core 확장하는 사용자 지정 스크립트 포함
입니다. LeadToCashService를 생성하고getConsolidationService()에서ConsolidationService구현을 반환합니다. 이렇게 하면 통합 논리가 파이프라인에 연결되므로 런타임 시 PrimitiveUtil에 의해 해결됩니다. - 통합을 포함하여 L2C Core 기본 요소를 호출하기 위한 엔트리포인트인 PrimitiveUtil에 대해 잘 알고 있습니다.
ConsolidationService는 (l2c) Core 기본 요소 엔진의 현금으로 연결 코어 일부입니다. 이 API를 구현하기 전에 API가 광범위한 호출 파이프라인에 어떻게 적용되는지 이해해야 합니다.
PrimitiveUtil은 통합을 포함한 모든 L2C Core 기본 작업의 런타임 엔트리포인트입니다. PrimitiveUtil은 ConsolidationService 를 직접 호출하는 대신 확장점 메커니즘을 사용하여 서버 쪽 스크립트 또는 현금으로 연결 흐름 디자이너 기본 형식에서 트리거되었는지 여부에 관계없이 런타임에 올바른 서비스 구현을 해결합니다.
ConsolidationService 논리를 이 파이프라인에 연결하려면 sn_l2c_core 확장하는 사용자 지정 스크립트 포함을 만들어야 합니다. LeadToCashService를 생성하고 getConsolidationService()에서 ConsolidationService 구현을 반환합니다. PrimitiveUtil은 런타임에 사용자 지정 LeadToCashService에 대한 확장점 레지스트리를 확인하고 발견되면 호출합니다. 사용자 지정 구현이 등록되지 않은 경우 PrimitiveUtil은 기본 sn_l2c_core로 대체됩니다. LeadToCashService가 자동으로 수행됩니다. 코드에서 직접 이 폴백을 인스턴스화하거나 참조할 필요가 없습니다.
ConsolidationServiceSNC API 확장 및 워크플로우
ConsolidationServiceSNC API의 기본 시스템은 원치 않는 통합이 자신도 모르게 적용되지 않도록 기본적으로 비활성화되어 있습니다. 통합 작업을 사용하려면 사용자 지정 논리를 생성하고 선택적으로 ConsolidationServiceSNC 스크립트 포함과 함께 제공되는 메서드를 재정의해야 합니다.
- 필수 sn_l2c_core 확장하는 사용자 지정 스크립트 포함을 생성합니다. ConsolidationService입니다.
- 필수 true를 반환하도록 enableConsolidation()을 재정의합니다. 이 플래그를 사용하면 시스템에서 서비스 통합을 허용할 수 있습니다. 예시 스크립트:
var MyConsolidationService = Class.create(); MyConsolidationService.prototype = Object.extendsObject( sn_l2c_core.ConsolidationService, { enableConsolidation: function () { return true; // REQUIRED }, type: 'MyConsolidationService' }); - 제어하려는 엔터티에 따라 다음과 같은 추가 메서드를 원하는 대로 재정의하거나 활성화합니다.주:메서드를 재정의하지 않으면
consolidate()는병합 또는 통합이 수행되지 않고 변경되지 않은 대상 JSON을 반환합니다.방법 작업 canConsolidateEntity(contextType) 대상 내에서 통합할 하위 배열을 선택합니다. canMergeEntity(contextType) 소스 하위 항목을 대상에 병합합니다. getHashConfig() 엔터티 그룹화 방법(해시)을 지정합니다. canConsolidateJSONs(json1, json2) 두 JSON을 병합해야 하는지 여부를 결정합니다. overrideAttributeValues() 병합 후와 최종 통합 JSON이 워크플로우를 통해 계속되기 전에 사용자 지정 비즈니스 논리를 적용합니다. getPrimary(json1, json2) 통합 중에 두 엔터티 중 어떤 엔터티를 기본 기록으로 취급할지 결정하며, 그 속성 값은 병합된 결과에서 기본적으로 유지됩니다. preProcess() 데이터 계산을 위한 사전 후크입니다. postHierarchyConsolidation() 최종 정리를 위한 사후 후크입니다. - sn_l2c_core에서 사용자 지정 ConsolidationService를 반환합니다. LeadToCashService입니다.
LeadToCashService는 통합 논리를 Lead-to-Cash 파이프라인에 연결하여 통합이 호출될 때마다 실제로 사용되도록 하는 엔트리포인트입니다. 예시 스크립트:var MyLeadToCashService = Class.create(); MyLeadToCashService.prototype = Object.extendsObject( sn_l2c_core.LeadToCashService, { getConsolidationService: function () { return new MyConsolidationService(); }, type: 'MyLeadToCashService' }); - 서버 측 스크립트에서 직접 또는 Lead-to-Cash Flow Designer 기본 요소를 통해 간접적으로 LeadToCashService.consolidate() 를 호출하여 통합을 호출합니다.
ConsolidationService - canConsolidateEntity(String contextType)
JSON 내에서 통합할 수 있는 하위 엔터티 유형을 지정하는 재정의 가능한 메서드입니다. 기본 구현은 재정의되지 않은 경우 모든 엔터티 유형에 대해 false 를 반환합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| contextType | 문자열 | 하위 엔터티 유형을 나타내는 엔터티 JSON의 배열 속성 키 이름입니다. 예: "lineItems", "특성", "coveredProducts". |
| 유형 | 설명 |
|---|---|
| 부울 | 선택한 엔터티 유형에서 통합이 가능한지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다.
기본값: false |
다음 예에서는 canConsolidateEntity() 를 재정의하여 라인 항목 및 대상 제품에 대한 통합을 활성화하는 방법을 보여줍니다.
var MyConsolidationService = Class.create();
MyConsolidationService.prototype = Object.extendsObject(sn_l2c_core.ConsolidationService, {
enableConsolidation: function() {
return true;
},
canConsolidateEntity: function(contextType) {
return contextType == "lineItems" || contextType == "coveredProducts";
},
type: 'MyConsolidationService'
});
var service = new MyConsolidationService();
gs.info("Can consolidate lineItems = " + service.canConsolidateEntity("lineItems"));
gs.info("Can consolidate characteristics = " + service.canConsolidateEntity("characteristics"));
Can consolidate lineItems = true
Can consolidate characteristics = falseConsolidationService - canConsolidateJSONs(객체 json1, 객체 json2)
해시가 동일한 두 엔터티 JSON을 통합할 수 있는지 여부를 결정하는 조건을 추가하는 재정의 가능한 메서드입니다. 기본 구현은 재정의되지 않은 경우 false를 반환합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| json1 | 객체 | 비교할 첫 번째 엔터티 JSON입니다. sys_id, 테이블, 속성 및 하위 배열을 포함합니다. |
| json2 | 객체 | 비교할 두 번째 엔터티 JSON입니다. sys_id, 테이블, 속성 및 하위 배열을 포함합니다. |
| 유형 | 설명 |
|---|---|
| 부울 | 두 JSON을 하나로 통합할 수 있는지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다.
기본값: false |
이 예에서는 동일한 제품 오퍼링으로 라인 항목을 통합할 수 있도록 canConsolidateJSONs()를 재정의하는 방법을 보여줍니다.
var MyConsolidationService = Class.create();
MyConsolidationService.prototype = Object.extendsObject(sn_l2c_core.ConsolidationService, {
enableConsolidation: function() {
return true;
},
canConsolidateJSONs: function(json1, json2) {
if (json1.table == "sn_quote_mgmt_core_quote_line_item") {
// Fall back to empty string if product_offering has no value
var po1 = json1.attributes.product_offering ? json1.attributes.product_offering.value : "";
// Fall back to empty string if product_offering has no value
var po2 = json2.attributes.product_offering ? json2.attributes.product_offering.value : "";
// Consolidate only if both line items share the same product offering, and that value is not empty
return po1 == po2 && po1 != "";
}
return false;
},
type: 'MyConsolidationService'
});
falseConsolidationService - canMergeEntity(String contextType)
소스 JSON에서 대상 JSON으로 병합할 수 있는 하위 엔터티 유형을 지정하는 재정의 가능한 메서드입니다. 기본 구현은 재정의되지 않은 경우 모든 엔터티 유형에 대해 false를 반환합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| contextType | 문자열 | 하위 엔터티 유형을 나타내는 엔터티 JSON의 배열 속성 키 이름입니다. 예: "lineItems", "특성", "coveredProducts". |
| 유형 | 설명 |
|---|---|
| 부울 | 이 유형의 엔터티를 소스에서 대상으로 병합할 수 있는지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다.
기본값: false |
다음 예에서는 canMergeEntity() 를 재정의하여 라인 항목과 대상 제품에 대한 병합을 활성화하는 방법을 보여줍니다.
var MyConsolidationService = Class.create();
MyConsolidationService.prototype = Object.extendsObject(sn_l2c_core.ConsolidationService, {
enableConsolidation: function() {
return true;
},
canMergeEntity: function(contextType) {
return contextType == "lineItems" || contextType == "coveredProducts";
},
type: 'MyConsolidationService'
});
var service = new MyConsolidationService();
gs.info("Can merge lineItems = " + service.canMergeEntity("lineItems"));
gs.info("Can merge characteristics = " + service.canMergeEntity("characteristics"));
Can merge lineItems = true
Can merge characteristics = falseConsolidationService - consolidate(객체 sourceJSON, 객체 targetJSON, 객체 additionalParams)
소스 엔터티 JSON을 대상 엔터티 JSON에 병합하고 해시 기반 그룹화 및 쌍방향 통합 논리를 기반으로 병합된 결과 내에서 하위 엔터티를 통합합니다.
consolidate() 메서드는 JSON을 통합하기 위한 기본 엔트리포인트 역할을 합니다. 이 메서드는 배열을 items 통해 단일 JSON과 여러 JSON을 모두 소스 입력으로 처리합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| additionalParams | 객체 | 옵션입니다. 통합 방법에 전달되는 추가 구성 매개변수입니다. 인스턴스에 this.additionalParams 로 저장되며 재정의 가능한 모든 메서드에서 액세스할 수 있습니다. 구현 클래스에 필요한 사용자 지정 키-값 쌍을 포함할 수 있습니다. |
| 소스 JSON | 객체 | LeadtoCashCore - 범위 지정됨 createInstance() 또는 effect() 메서드의 JSON 출력을 허용합니다. 단일 엔터티 JSON 객체 또는 여러 엔터티 JSON의 항목 배열을 포함하는 JSON 객체일 수 있습니다. sourceJSON에 items 배열이 포함되어 있지 않은 경우 메서드는 이를 단일 엔터티로 처리하고 배열로 자동으로 래핑합니다. 대상 통합만 필요한 경우 null을 전달하거나 이 매개변수를 생략하십시오. |
| sourceJSON.항목 | 객체 배열 | 옵션입니다. 대상에 병합할 엔터티 JSON의 배열입니다. 각 항목은 속성과 하위 배열이 있는 엔터티를 나타냅니다. 이 속성이 items 있으면 소스 엔터티 목록으로 직접 사용됩니다. |
| sourceJSON.items.attributes | 객체 | 엔터티 속성을 나타내는 키-값 쌍입니다. 각 속성은 값 속성이 있는 객체입니다.예: |
| sourceJSON.items.attributes.end_date | 문자열 | 속성의 종료 날짜입니다. 형식: GlideDate 값(예: 2026-01-01) |
| sourceJSON.items.attributes.product_offering | 문자열 | 속성과 연결된 제품 오퍼링의 이름입니다. 제품 오퍼링 [sn_prd_pm_product_offering] 테이블에 있습니다. |
| sourceJSON.items.attributes.quantity | 문자열 | 속성을 기준으로 구매한 제품 항목의 수입니다. |
| sourceJSON.items.attributes.start_date | 문자열 | 속성의 시작 날짜입니다. 형식: GlideDate 값(예: 2026-01-01) |
| sourceJSON.items.characteristics | 객체 배열 | 옵션입니다. 특성 엔터티 JSON의 배열입니다. |
| sourceJSON.items.특성.속성 | 객체 | 항목 특성과 연결된 속성입니다. 각 하위 속성은 속성을 나타내는 키-값 쌍입니다. 속성은 값 속성이 있는 객체입니다. |
| sourceJSON.items.characteristics.attributes.characteristic | 객체 | 속성과 연결된 특성을 나타내는 키-값 쌍입니다. characteristic 은(는) 값 속성이 있는 객체입니다. |
| sourceJSON.items.characteristics.attributes.value | 객체 | 상위 특성과 연결된 속성 값을 나타내는 키-값 쌍입니다. value 은(는) 값 속성이 있는 객체입니다. |
| sourceJSON.items.characteristics.sys_id | 문자열 | 항목과 연결된 특성의 Sys_id입니다. |
| sourceJSON.items.characteristics.table | 문자열 | 항목과 연결된 특성의 테이블 위치입니다. |
| sourceJSON.items.coveredProducts | 객체 배열 | 옵션입니다. 포함된 제품 엔터티 JSON의 배열입니다. |
| sourceJSON.items.coveredProducts.sys_id | 객체 | 대상 제품 기록의 Sys_id입니다. |
| sourceJSON.items.coveredProducts.table | 문자열 | 대상 제품 기록이 포함된 테이블 이름입니다. 예를 들면 sn_install_base_m2m_contract_sold_product입니다. |
| sourceJSON.items.coveredProducts.attributes | 객체 | 대상 제품의 속성입니다. 필드는 기록에 따라 다를 수 있습니다. |
| sourceJSON.items.coveredProducts.attributes.sold_product | 객체 | 이 대상 제품과 관련된 판매된 제품 기록입니다. |
| sourceJSON.items.coveredProducts.attributes.contract | 객체 | 적용 범위가 정의된 상위 계약 기록입니다. |
| sourceJSON.items.coveredProducts.attributes.service_contract_line | 객체 | 이 대상 제품에 연결된 특정 서비스 계약 라인 항목입니다. |
| sourceJSON.items.coveredProducts.attributes.entitlement | 객체 | 보장 조건을 관리하는 권리 기록입니다. |
| sourceJSON.items.coveredProducts.attributes.install_base | 객체 | 배포된 자산을 나타내는 설치 기반 기록입니다. |
| sourceJSON.items.coveredProducts.attributes.covering_sold_product | 객체 | 이 항목에 대한 범위를 제공하는 판매된 제품입니다. |
| sourceJSON.items.coveredProducts.attributes.date_added | 객체 | 제품이 보장에 추가된 시기를 나타내는 ISO 8601 날짜 문자열입니다. |
| sourceJSON.items.coveredProducts.attributes.date_removed | 객체 | 제품이 보장에서 제거된 시기를 나타내는 ISO 8601 날짜 문자열입니다. 현재 활성 상태이면 null이거나 비어 있습니다. |
| sourceJSON.items.lineItems | 객체 배열 | 옵션입니다. 하위 라인 항목 엔터티 JSON의 배열입니다. 각 하위 항목은 동일한 구조(sys_id, 테이블, 속성 및 중첩된 하위 항목)를 따릅니다. |
| sourceJSON.items.lineItems.attributes | 객체 | 엔터티 속성을 나타내는 키-값 쌍입니다. 각 속성은 값 속성이 있는 객체입니다. 와 sourceJSON.items.attributes동일한 구조를 따릅니다. |
| sourceJSON.items.lineItems.characteristic | 객체 | 라인 항목의 특성을 나타내는 키-값 쌍입니다. 특성은 값 속성이 있는 객체입니다. 와 sourceJSON.items.characteristics동일한 구조를 따릅니다. |
| sourceJSON.items.lineItems.coveredProducts | 라인 항목과 연결된 대상 제품 엔터티 JSON의 배열입니다. 와 sourceJSON.items.coveredProducts동일한 구조를 따릅니다. |
|
| sourceJSON.items.lineItems.sys_id | 엔터티 JSON 라인 항목의 Sys_id입니다. | |
| sourceJSON.items.lineItems.table | 엔터티 JSON 라인 항목의 테이블 위치입니다. | |
| sourceJSON.items.sys_id | 문자열 | 소스 엔터티 기록의 Sys_id입니다. |
| sourceJSON.items.table | 문자열 | 소스 엔터티의 테이블 이름입니다. 예: sn_pss_core_service_contract_line. |
| targetJSON | 객체 | 필수 소스 JSON을 통합할 대상 엔터티 JSON입니다. null이거나 비워둘 수 없습니다. 소스 엔터티(매개변수)sourceJSON 와 동일한 객체 구조를 따릅니다. |
| targetJSON.attributes | 객체 | 대상 엔터티 속성을 나타내는 키-값 쌍입니다. 각 속성은 값 속성이 있는 객체입니다. 소스 속성(sourceJSON.items.attributes 매개변수)과 동일한 객체 구조를 따릅니다.예: |
| targetJSON.lineItems | 객체 배열 | 옵션입니다. 대상의 하위 라인 항목 엔터티 JSON 배열입니다. 와 sourceJSON.items.lineItems동일한 객체 구조를 따릅니다. |
| targetJSON.lineItems.attributes | 객체 | 엔터티 속성을 나타내는 키-값 쌍입니다. 각 속성은 값 속성이 있는 객체입니다. 와 sourceJSON.items.attributes동일한 구조를 따릅니다. |
| targetJSON.lineItems.특성 | 객체 | 라인 항목의 특성을 나타내는 키-값 쌍입니다. 특성은 값 속성이 있는 객체입니다. 와 sourceJSON.items.characteristics동일한 구조를 따릅니다. |
| targetJSON.lineItems.coveredProducts | 라인 항목과 연결된 대상 제품 엔터티 JSON의 배열입니다. 와 sourceJSON.items.coveredProducts동일한 구조를 따릅니다. |
|
| targetJSON.lineItems.sys_id | 엔터티 JSON 라인 항목의 Sys_id입니다. | |
| targetJSON.lineItems.table | 엔터티 JSON 라인 항목의 테이블 위치입니다. | |
| targetJSON.sys_id | 문자열 | 대상 엔터티 기록의 Sys_id입니다. |
| targetJSON.table | 문자열 | 대상 엔터티의 테이블 이름입니다. 예: sn_pss_core_service_contract |
| 유형 | 설명 |
|---|---|
| 객체 | 통합된 JSON 결과입니다. 병합 및 통합된 엔터티 JSON에는 대상 및 병합/통합된 하위 배열의 모든 속성이 포함됩니다. 통합이 비활성화되었거나 sourceJSON이 잘못된 경우 targetJSON을 반환합니다. targetJSON이 null이거나 비어 있으면 null을 반환합니다. |
다음 예제에서는 LeadToCashService를 통해 통합 메서드를 호출하는 방법을 보여 줍니다. 라인 항목을 포함하는 소스 엔터티 JSON을 대상 엔터티 JSON으로 통합합니다. 동일한 제품 오퍼링이 있는 라인 항목은 통합됩니다.
LeadToCashService 를 직접 인스턴스화하지만 프로덕션 사용에서는 확장점을 통해 사용자 지정 서브클래스를 등록하고 PrimitiveUtil을 통해 호출해야 합니다.var sourceToTargetConfigID = "sn_cont_ent_wf_contract_to_quote";
var util = new sn_l2c_core.LeadToCashService(sourceToTargetConfigID);
var sourceJSON = {
"items": [{
"sys_id": "a1b2c3d4e5f6",
"table": "sn_pss_core_service_contract_line",
"attributes": {
"product_offering": {
"value": "po_001"
},
"quantity": {
"value": "5"
},
"start_date": {
"value": "2026-01-01"
},
"end_date": {
"value": "2026-12-31"
}
},
"characteristics": [{
"sys_id": "ch_001",
"table": "sn_pss_core_entitlement_characteristic",
"attributes": {
"characteristic": {
"value": "speed"
},
"value": {
"value": "100mbps"
}
}
}],
"coveredProducts": []
}]
};
var targetJSON = {
"sys_id": "t1a2b3c4d5e6",
"table": "sn_quote_mgmt_core_quote",
"attributes": {
"account": {
"value": "acct_001"
}
},
"lineItems": [{
"sys_id": "li_001",
"table": "sn_quote_mgmt_core_quote_line_item",
"attributes": {
"product_offering": {
"value": "po_001"
},
"quantity": {
"value": "3"
},
"start_date": {
"value": "2026-03-01"
},
"end_date": {
"value": "2026-11-30"
}
},
"characteristics": [{
"sys_id": "ch_002",
"table": "sn_pss_core_entitlement_characteristic",
"attributes": {
"characteristic": {
"value": "speed"
},
"value": {
"value": "100mbps"
}
}
}],
"coveredProducts": []
}]
};
var additionalParams = {};
var output = util.consolidate(sourceJSON, targetJSON, additionalParams);
gs.info("Consolidated output = " + JSON.stringify(output));
출력:
{
"sys_id": "t1a2b3c4d5e6",
"table": "sn_quote_mgmt_core_quote",
"attributes": {
"account": {
"value": "acct_001"
}
},
"lineItems": [
{
"sys_id": "li_001",
"table": "sn_quote_mgmt_core_quote_line_item",
"attributes": {
"product_offering": {
"value": "po_001"
},
"quantity": {
"value": "8"
},
"start_date": {
"value": "2026-01-01"
},
"end_date": {
"value": "2026-12-31"
}
},
"characteristics": [
{
"sys_id": "ch_002",
"table": "sn_pss_core_entitlement_characteristic",
"attributes": {
"characteristic": {
"value": "speed"
},
"value": {
"value": "100mbps"
}
}
}
],
"coveredProducts": []
}
]
}
다음 예제에서는 null sourceJSON을 사용하여 consolidate 메서드를 호출하는 방법을 보여줍니다. 이 경우 targetJSON 내의 하위 엔터티만 통합됩니다. 이 기능은 대상에 병합해야 하는 중복 라인 항목이 이미 포함되어 있는 경우에 유용합니다.
var sourceToTargetConfigID = "sn_cont_ent_wf_contract_to_quote";
var util = new sn_l2c_core.LeadToCashService(sourceToTargetConfigID);
var targetJSON = {
"sys_id": "t1a2b3c4d5e6",
"table": "sn_quote_mgmt_core_quote",
"attributes": {
"account": {
"value": "acct_001"
}
},
"lineItems": [{
"sys_id": "li_001",
"table": "sn_quote_mgmt_core_quote_line_item",
"attributes": {
"product_offering": {
"value": "po_001"
},
"quantity": {
"value": "5"
}
},
"characteristics": [],
"coveredProducts": []
},
{
"sys_id": "li_002",
"table": "sn_quote_mgmt_core_quote_line_item",
"attributes": {
"product_offering": {
"value": "po_001"
},
"quantity": {
"value": "3"
}
},
"characteristics": [],
"coveredProducts": []
}
]
};
var output = util.consolidate(null, targetJSON, {});
gs.info("Consolidated output = " + JSON.stringify(output));
출력:
{
"sys_id": "t1a2b3c4d5e6",
"table": "sn_quote_mgmt_core_quote",
"attributes": {
"account": {
"value": "acct_001"
}
},
"lineItems": [
{
"sys_id": "li_001",
"table": "sn_quote_mgmt_core_quote_line_item",
"attributes": {
"product_offering": {
"value": "po_001"
},
"quantity": {
"value": "8"
}
},
"characteristics": [],
"coveredProducts": []
}
]
}
ConsolidationService - enableConsolidation()
이 서비스 인스턴스에 대해 통합 사용 여부를 제어하는 재정의 가능한 메서드입니다. 기본 구현은 재정의되지 않은 경우 false를 반환합니다. 통합을 사용하려면 구현 클래스가 true를 반환하도록 이 메서드를 재정의해야 합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 안 함 |
| 유형 | 설명 |
|---|---|
| 부울 | 서비스가 통합을 성공적으로 활성화했는지 여부를 나타내는 플래그입니다. 유효한 값은 다음과 같습니다.
기본값: false |
var MyConsolidationService = Class.create();
MyConsolidationService.prototype = Object.extendsObject(sn_l2c_core.ConsolidationService, {
enableConsolidation: function() {
return true;
},
type: 'MyConsolidationService'
});
var service = new MyConsolidationService();
var isEnabled = service.enableConsolidation();
gs.info("Consolidation enabled = " + isEnabled);
Consolidation enabled = trueConsolidationService - getHashConfig()
통합 전에 엔터티를 그룹화하기 위한 해시 구성을 반환하는 재정의 가능한 메서드입니다. 구성은 각 엔터티에 대해 MD5 해시를 생성하는 속성 및 하위 컨텍스트 유형을 지정합니다. 동일한 해시를 가진 엔터티는 쌍방향 통합을 위해 그룹화됩니다. 기본 구현은 재정의되지 않은 경우 빈 객체를 반환합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 안 함 |
| 유형 | 설명 |
|---|---|
| 객체 | 테이블 이름을 해시 구성에 매핑하는 JSON 객체입니다. 각 테이블 항목에는 다음이 포함됩니다.
예상 반환 형식: 테이블의 해시 구성이 빈 객체 테이블에 대한 해시 구성을 찾을 수 없는 경우(정의되지 않음 또는 null) 오류가 기록되고 엔터티가 변경되지 않고 반환됩니다. 기본 구현은 재정의되지 않은 경우 빈 객체를 반환합니다. |
다음 예제에서는 getHashConfig() 를 재정의하여 계약 라인 및 권리 특성에 대한 해시 속성을 정의하는 방법을 보여줍니다.
var MyConsolidationService = Class.create();
MyConsolidationService.prototype = Object.extendsObject(sn_l2c_core.ConsolidationService, {
enableConsolidation: function() {
return true;
},
getHashConfig: function() {
return {
"sn_quote_mgmt_core_quote_line_item": {
"attributes": ["product_offering"],
"childContextTypes": ["sn_pss_core_entitlement_characteristic"]
},
"sn_pss_core_entitlement_characteristic": {
"attributes": ["characteristic", "option", "value"]
},
"sn_pss_core_covered_product": {
"attributes": ["sold_product"]
}
};
},
type: 'MyConsolidationService'
});
var service = new MyConsolidationService();
var config = service.getHashConfig();
gs.info("Hash config = " + JSON.stringify(config));
Hash config = {
"sn_quote_mgmt_core_quote_line_item": {
"attributes": ["product_offering"],
"childContextTypes": ["sn_pss_core_entitlement_characteristic"]
},
"sn_pss_core_entitlement_characteristic": {
"attributes": ["characteristic", "option", "value"]
},
"sn_pss_core_covered_product": {
"attributes": ["sold_product"]
}
}ConsolidationService - getPrimary(객체 json1, 객체 json2)
두 개의 JSON이 통합 중일 때 기본 JSON을 결정하는 재정의 가능한 메서드입니다. 재정의되지 않은 속성의 경우 기본 JSON의 속성 값이 통합 결과에 사용됩니다. 기본 구현은 재정의되지 않은 경우 json1을 반환합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| json1 | 객체 | 통합할 첫 번째 엔터티 JSON입니다. sys_id, 테이블, 속성 및 하위 배열을 포함합니다. |
| json2 | 객체 | 통합할 두 번째 엔터티 JSON입니다. sys_id, 테이블, 속성 및 하위 배열을 포함합니다. |
| 유형 | 설명 |
|---|---|
| 객체 | 선택한 기본 JSON입니다. 이 JSON의 속성은 통합 결과의 기본값이 됩니다. json1 또는 json2여야 합니다. 기본 구현은 재정의되지 않은 경우 json1을 반환합니다. |
다음 예제는 getPrimary() 를 재정의하여 시작 날짜가 이전 날짜인 엔터티를 기본으로 선택하는 방법을 보여줍니다.
// Custom ConsolidationService with getPrimary override
var MyConsolidationService = Class.create();
MyConsolidationService.prototype = Object.extendsObject(sn_l2c_core.ConsolidationService, {
enableConsolidation: function() {
return true;
},
getPrimary: function(json1, json2) {
var date1 = json1.attributes.start_date ? json1.attributes.start_date.value : "";
var date2 = json2.attributes.start_date ? json2.attributes.start_date.value : "";
return date1 <= date2 ? json1 : json2;
},
type: 'MyConsolidationService'
});
// json1 — earlier start date
var json1 = {
sys_id: { value: "a1b2c3d4e5f6" },
table: "sn_pss_core_service_contract_line",
attributes: {
product_offering: { value: "po_abc123" },
quantity: { value: "5" },
start_date: { value: "2024-01-01" }
}
};
// json2 — later start date
var json2 = {
sys_id: { value: "f6e5d4c3b2a1" },
table: "sn_pss_core_service_contract_line",
attributes: {
product_offering: { value: "po_abc123" },
quantity: { value: "3" },
start_date: { value: "2024-06-01" }
}
};
var result = new MyConsolidationService().getPrimary(json1, json2);
출력:
// result === json1 → true
// "2024-01-01" <= "2024-06-01" is true, so json1 (earlier start date) is returned
{
sys_id: { value: "a1b2c3d4e5f6" },
table: "sn_pss_core_service_contract_line",
attributes: {
product_offering: { value: "po_abc123" },
quantity: { value: "5" },
start_date: { value: "2024-01-01" }
}
}
ConsolidationService - overrideAttributeValues(객체 json1, 객체 json2, 객체 consolidatedJSON)
통합된 JSON의 속성을 업데이트하기 위해 두 JSON이 통합된 후 호출되는 재정의 가능한 메서드입니다. 기본 구현은 재정의되지 않은 경우 no-op입니다.
일반적인 사용 사례에는 수량 합계, 날짜 범위 계산(가장 빠른 시작/가장 늦은 종료), 용어 재계산 및 consolidated_from 추적이 포함됩니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| json1 | 객체 | 통합된 첫 번째 엔터티 JSON입니다. 이는 기본 JSON( getPrimary()에 의해 결정됨)입니다. 통합 전의 원래 속성을 포함합니다. |
| json2 | 객체 | 통합된 두 번째 엔터티 JSON입니다. 보조 JSON입니다. 통합 전의 원래 속성을 포함합니다. |
| consolidatedJSON | 객체 | 병합 후 결과 JSON입니다. 이 객체의 속성을 직접 수정하여 사용자 지정 논리를 적용합니다. 처음에는 병합된 하위 배열이 있는 기본 JSON 속성의 딥 복사본을 포함합니다. |
| 유형 | 설명 |
|---|---|
| 무효 | 이 메서드는 값을 반환하지 않습니다. 객체를 직접 수정합니다 consolidatedJSON . |
var MyConsolidationService = Class.create();
MyConsolidationService.prototype = Object.extendsObject(sn_l2c_core.ConsolidationService, {
enableConsolidation: function() {
return true;
},
overrideAttributeValues: function(json1, json2, consolidatedJSON) {
// Sum quantities from both entities; fall back to 0 if quantity has no value
var qty1 = parseInt(json1.attributes.quantity ? json1.attributes.quantity.value : "0");
var qty2 = parseInt(json2.attributes.quantity ? json2.attributes.quantity.value : "0");
consolidatedJSON.attributes.quantity = {
"value": String(qty1 + qty2)
};
// Use the earliest start date; fall back to empty string if start_date has no value
var start1 = json1.attributes.start_date ? json1.attributes.start_date.value : "";
var start2 = json2.attributes.start_date ? json2.attributes.start_date.value : "";
consolidatedJSON.attributes.start_date = {
"value": start1 <= start2 ? start1 : start2
};
// Use the latest end date; fall back to empty string if end_date has no value
var end1 = json1.attributes.end_date ? json1.attributes.end_date.value : "";
var end2 = json2.attributes.end_date ? json2.attributes.end_date.value : "";
consolidatedJSON.attributes.end_date = {
"value": end1 >= end2 ? end1 : end2
};
// Record the sys_ids of the source entities that were merged into this consolidated result
var consolidatedFrom = [];
if (json1.sys_id) consolidatedFrom.push(json1.sys_id);
if (json2.sys_id) consolidatedFrom.push(json2.sys_id);
consolidatedJSON.attributes.consolidated_from = {
"value": consolidatedFrom.join(",")
};
},
type: 'MyConsolidationService'
});ConsolidationService - postHierarchyConsolidation(객체 consolidatedJSON)
계층 구조 통합이 완료된 후 통합된 JSON에 최종 수정 사항을 적용하는 재정의 가능한 메서드입니다. 기본 구현은 재정의되지 않은 경우 no-op입니다.
시스템은 consolidate() 메서드의 최종 통합 결과와 processHashGroup() 내의 각 결과 엔터티에서 이 메서드를 호출합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| consolidatedJSON | 객체 | 모든 병합 및 통합이 완료된 후 완전히 처리된 통합 JSON 객체입니다. 이 객체를 직접 수정하여 최종 변환을 적용합니다. |
| 유형 | 설명 |
|---|---|
| 무효 | 이 메서드는 값을 반환하지 않습니다. 객체를 직접 수정합니다 consolidatedJSON . |
다음 예제에서는 postHierarchyConsolidation() 을 재정의하여 통합 엔터티에 플래그를 설정하는 방법을 보여줍니다.
var MyConsolidationService = Class.create();
MyConsolidationService.prototype = Object.extendsObject(sn_l2c_core.ConsolidationService, {
enableConsolidation: function() {
return true;
},
postHierarchyConsolidation: function(consolidatedJSON) {
if (consolidatedJSON && consolidatedJSON.attributes) {
consolidatedJSON.attributes.is_consolidated = {
"value": "true"
};
}
},
type: 'MyConsolidationService'
});
ConsolidationService - preProcess(객체 sourceJSON, 객체 targetJSON, 객체 additionalParams)
대량 맵 생성 또는 조회 데이터 캐싱과 같은 사용자 지정 전처리 작업을 수행하기 위해 병합 및 통합 전에 호출되는 재정의 가능한 메서드입니다.
이 객체에 계산된 결과를 저장합니다(예: this.targetHeaderId = "sample_sys_id"). 이 메서드는 값을 반환하지 않습니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 소스 대상 | 객체 | 통합할 sourceJSON 출력입니다. LeadtoCashCore - 범위 지정됨 createInstance() 또는 effect() 메서드의 JSON 출력을 허용합니다. 단일 엔터티 JSON 객체 또는 여러 엔터티 JSON의 항목 배열을 포함하는 JSON 객체일 수 있습니다. null이거나 비어 있을 수 있습니다. |
| targetJSON | 객체 | 필수 통합을 위한 대상 엔터티 JSON입니다. |
| additionalParams | 객체 | 옵션입니다. 호출자로부터 전달된 추가 데이터입니다. |
| 유형 | 설명 |
|---|---|
| 무효 | 이 메서드는 값을 반환하지 않습니다. 이후 통합 단계에서 사용할 수 있도록 이 객체에 계산된 결과를 저장합니다. |
다음 예는 preProcess() 를 재정의하여 통합 중에 사용할 대상 헤더 ID를 캐시하는 방법을 보여줍니다.
var MyConsolidationService = Class.create();
MyConsolidationService.prototype = Object.extendsObject(sn_l2c_core.ConsolidationService, {
enableConsolidation: function() {
return true;
},
preProcess: function(sourceJSON, targetJSON, additionalParams) {
// Cache the target entity's sys_id for use in subsequent consolidation steps
this.targetHeaderId = targetJSON.sys_id;
// If sourceJSON and sourceJSON.items are both present, store the item count; otherwise default to 0
this.sourceCount = sourceJSON && sourceJSON.items ? sourceJSON.items.length : 0;
},
type: 'MyConsolidationService'
});