ConsolidationService - Escopo, gobal
. ConsolidationService A API é uma inclusão de script com métodos para mesclar e desduplicar dados de negócios complexos e hierárquicos (como contratos, cotações, itens de linha e direitos) usando lógica personalizada.
Esta API pertence ao namespace sn_l2c_core e requer a função de administrador e o plug-in Lead to Cash Core (com.snc.l2c_core) para acessá-la.
- Definir o que torna dois registros iguais em vários atributos ou entidades secundárias aninhadas.
- Mesclar registros condicionalmente quando determinados critérios são atendidos.
- Aplicar cálculos personalizados durante a consolidação, como somar quantidades ou calcular intervalos de datas.
- Recursivamente desduplicando (consolidando) estruturas secundárias profundamente aninhadas.
- Reutilizando a mesma lógica de consolidação de forma consistente em fluxos e integrações.
. ConsolidationService É parte do mecanismo primitivo Lead para dinheiro principal e é acessado por meio de Base para Lead-to-Cash produto.
Antes de começar
- O plug-in Lead para núcleo de dinheiro (
.snc.l2c_core) instalados e o.administradorfunção. - Uma inclusão de script personalizado que se estende
sn_l2c_core.LeadToCashServicee retorna seuConsolidationServiceimplementação deGetConsolidationService(). Isso liga sua lógica de consolidação ao pipeline para que ela seja resolvida pelo PrimitiveUtil no tempo de execução. - Familiaridade com PrimitiveUtil, que é o ponto de entrada para invocar primitivas do núcleo L2C, incluindo consolidação.
ConsolidationService faz parte do Base para Lead-to-Cash(L2c) Mecanismo primitivos do núcleo. Antes de implementar esta API, você deve entender como ela se encaixa no pipeline de invocação mais amplo.
PrimitiveUtil é o ponto de entrada do tempo de execução para todas as operações primitivas do L2C Core, incluindo a consolidação. Em vez de invocar ConsolidationService Diretamente, o PrimitiveUtil usa um mecanismo de ponto de extensão para resolver a implementação de serviço correta no tempo de execução, seja acionado a partir de um script do lado do servidor ou de uma primitiva do Designer de fluxo de lead para caixa.
Para conectar seu ConsolidationService Neste pipeline, você deve criar uma inclusão de script personalizado que estenda sn_l2c_core.leadToCashService e retorne seu ConsolidationService implementação de GetConsolidationService() . PrimitiveUtil verifica o registro do ponto de extensão para um LeadToCashService personalizado no tempo de execução e invoca-o se um for encontrado. Se nenhuma implementação personalizada for registrada, PrimitiveUtil retornará para a base sn_l2c_core.LeadToCashService automaticamente. Você nunca precisa instanciar ou referenciar este fallback diretamente no seu código.
Fluxo de trabalho e extensão da API ConsolidationServiceSNC
. ServiçoSNC de consolidação O sistema base da API é desabilitado por padrão para garantir que a consolidação indesejada não seja aplicada sem saber. Para habilitar ações de consolidação, você deve criar lógica personalizada e, opcionalmente, substituir métodos fornecidos com a inclusão de script ConsolidationServiceSNC.
- Necessário. Crie uma inclusão de script personalizado que estenda sn_l2c_core.ConsolidationService.
- Necessário. Substituir EnableConsolidation() para retornar verdadeiro . Este sinalizador permite que o sistema permita a consolidação no seu serviço. Script de exemplo:
var MyConsolidationService = Class.create(); MyConsolidationService.prototype = Object.extendsObject( sn_l2c_core.ConsolidationService, { enableConsolidation: function () { return true; // REQUIRED }, type: 'MyConsolidationService' }); - Dependendo das entidades que você deseja controlar, opcionalmente substitua (ou habilite) qualquer número destes métodos adicionais:Nota:Se você não substituir nenhum método,
consolidar()Retorna o JSON de destino inalterado sem mesclagem ou consolidação realizada.Método Ação CanConsolidateEntity (contextType) Escolha quais matrizes secundárias consolidar em um destino. MergeEntity (contextType) Mesclar secundários de origem em um destino. GetHashConfig() Especifique como as entidades são agrupadas (hash). ConsolidateJSONs(json1, json2) Decida se dois JSONs devem se mesclar. Valores do atributo sobreridesobreride() Aplique a lógica de negócios personalizada após uma mesclagem e antes que o JSON consolidado final continue pelo fluxo de trabalho. GetPrimary(json1, json2) Decide qual das duas entidades é tratada como o registro primário durante a consolidação, cujos valores de atributo são mantidos por padrão no resultado mesclado. Pré-processamento () Pré-hook para computação de dados. PostHierarchyConsolidation() Post-hook para limpeza final. - Retorne seu ConsolidationService personalizado de sn_l2c_core.leadToCashService.
LeadToCashServiceÉ o ponto de entrada que liga sua lógica de consolidação ao pipeline Lead-to-Cash para que ele seja realmente usado sempre que a consolidação for invocada. Script de exemplo:var MyLeadToCashService = Class.create(); MyLeadToCashService.prototype = Object.extendsObject( sn_l2c_core.LeadToCashService, { getConsolidationService: function () { return new MyConsolidationService(); }, type: 'MyLeadToCashService' }); - Invoque sua consolidação chamando LeadToCashService.Consolidate() Diretamente de um script do lado do servidor ou indiretamente por primitivas do Designer de fluxo de lead para caixa.
ConsolidationService - canConsolidateEntity(cadeia de caracteres contextType)
Método substituível para especificar quais tipos de entidade secundária podem ser consolidados em um JSON. A implementação de base retorna falso para todos os tipos de entidade, se não forem substituídos.
| Nome | Tipo | Descrição |
|---|---|---|
| contextType | Cadeia de caracteres | O nome da chave da propriedade de matriz na entidade JSON que representa o tipo de entidade secundária. Exemplos: "Itens de linha" , "características" , "CoveredProducts" . |
| Tipo | Descrição |
|---|---|
| Booliano | Sinalizador que indica se a consolidação é possível no tipo de entidade selecionado. Valores válidos:
Padrão: falso |
O exemplo a seguir mostra como substituir CanConsolidateEntity() para habilitar a consolidação de itens de linha e produtos cobertos.
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(Objeto json1, Objeto json2)
Método substituível que adiciona condições para determinar se duas JSONs de entidade com o mesmo hash podem ser consolidadas. A implementação de base retorna falso se não for substituída.
| Nome | Tipo | Descrição |
|---|---|---|
| json1 | Objeto | Primeira entidade JSON a ser comparada. Contém sys_id, tabela, atributos e matrizes secundárias. |
| json2 | Objeto | JSON da segunda entidade para comparar. Contém sys_id, tabela, atributos e matrizes secundárias. |
| Tipo | Descrição |
|---|---|
| Booliano | Sinalizador que indica se os dois JSONs podem ser consolidados em um. Valores válidos:
Padrão: falso |
Este exemplo mostra como substituir CanConsolidateJSONs() para permitir a consolidação de itens de linha com a mesma oferta de produto.
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(cadeia de caracteres contextType)
Método substituível para especificar quais tipos de entidade secundária podem ser mesclados dos JSONs de origem no JSON de destino. A implementação de base retorna falso para todos os tipos de entidade se não for substituída.
| Nome | Tipo | Descrição |
|---|---|---|
| contextType | Cadeia de caracteres | O nome da chave da propriedade de matriz na entidade JSON que representa o tipo de entidade secundária. Exemplos: "Itens de linha" , "características" , "CoveredProducts" . |
| Tipo | Descrição |
|---|---|
| Booliano | Sinalizador que indica se entidades deste tipo podem ser mescladas da origem para o destino. Valores válidos:
Padrão: falso |
O exemplo a seguir mostra como substituir MergeEntity() para habilitar a mesclagem de itens de linha e produtos cobertos.
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 - Consolidar (Object sourceJSON, Object targetJSON, Object additionalParams)
Mescla JSON(s) de entidade de origem em um JSON de entidade de destino e consolida entidades secundárias no resultado mesclado com base no agrupamento baseado em hash e na lógica de consolidação pareada.
. consolidar() O método atua como o principal ponto de entrada para consolidar JSONs. Este método lida com JSON único e vários JSONs, por meio de itemsmatriz, como entrada de origem.
| Nome | Tipo | Descrição |
|---|---|---|
| additionalParams | Objeto | Opcional. Parâmetros de configuração extras passados para os métodos de consolidação. Armazenado na instância como Parâmetros adicionais e é acessível em todos os métodos substituíveis. Pode conter quaisquer pares de chave-valor personalizados necessários para a classe de implementação. |
| JSON | Objeto | Aceita a saída JSON do LeadtoCashCore - Com escopo CreateInstance() ou efeito () método. Pode ser um objeto JSON de entidade única ou um objeto JSON que contém uma matriz de itens de JSONs de várias entidades. Se sourceJSON não contiver uma matriz de itens, o método a tratará como uma única entidade e a envolverá em uma matriz automaticamente. Passe nulo ou omita este parâmetro se somente a consolidação de destino for necessária. |
| sourceJSON.items | Matriz de objetivos | Opcional. Matriz de JSONs de entidade para mesclar no destino. Cada item representa uma entidade com seus atributos e matrizes secundárias. Se esta propriedade existir, itemsé usado diretamente como a lista de entidades de origem. |
| sourceJSON.items.attributes | Objeto | Pares de chave-valor que representam os atributos da entidade. Cada atributo é um objeto com uma propriedade de valor.Exemplo: |
| sourceJSON.items.attributes.end_date | Cadeia de caracteres | Data de término do atributo. Formato: Valor GlideDate (por exemplo, 2026-01-01) |
| sourceJSON.items.attributes.product_offering | Cadeia de caracteres | Nome da oferta de produto associada ao atributo. Localizado na tabela Oferta de produto [sn_prd_pm_product_offering]. |
| sourceJSON.items.attributes.quantity | Cadeia de caracteres | Número de itens de produto comprados em relação ao atributo. |
| sourceJSON.items.attributes.start_date | Cadeia de caracteres | Data de início do atributo. Formato: Valor GlideDate (por exemplo, 2026-01-01) |
| sourceJSON.items.characteristics | Matriz de objetivos | Opcional. Matriz de JSONs da entidade característica. |
| sourceJSON.items.characteristics.attributes | Objeto | Atributos associados à característica do item. Cada propriedade secundária é um par chave-valor que representa o atributo. O atributo é um objeto com uma propriedade de valor. |
| sourceJSON.items.characteristics.attributes.characteristic | Objeto | Par chave-valor que representa a característica associada ao atributo. characteristicé um objeto com uma propriedade de valor. |
| sourceJSON.items.characteristics.attributes.value | Objeto | Par chave-valor que representa o valor do atributo associado à característica primária. valueé um objeto com uma propriedade de valor. |
| sourceJSON.items.characteristics.sys_id | Cadeia de caracteres | Sys_id da característica associada ao item. |
| sourceJSON.items.characteristics.table | Cadeia de caracteres | Local da tabela da característica associada ao item. |
| sourceJSON.items.coveredProducts | Matriz de objetivos | Opcional. Matriz de JSONs da entidade do produto coberto. |
| sourceJSON.items.coveredProducts.sys_id | Objeto | Sys_id do registro do produto coberto. |
| sourceJSON.items.coveredProducts.table | Cadeia de caracteres | Nome da tabela que contém o registro do produto coberto. Por exemplo, sn_install_base_m2m_contract_sold_product . |
| sourceJSON.items.coveredProducts.attributes | Objeto | Atributos do produto coberto. Os campos podem variar com base no registro. |
| sourceJSON.items.coveredProducts.attributes.sold_product | Objeto | Registro de produto vendido associado a este produto coberto. |
| sourceJSON.items.coveredProducts.attributes.contract | Objeto | Registro do contrato primário sob o qual a cobertura está definida. |
| sourceJSON.items.coveredProducts.attributes.service_contract_line | Objeto | Item de linha do contrato de serviço específico vinculado a este produto coberto. |
| sourceJSON.items.coveredProducts.attributes.entitlement | Objeto | Registro de direito que rege os termos de cobertura. |
| sourceJSON.items.coveredProducts.attributes.install_base | Objeto | Registro da base de instalação que representa o ativo implantado. |
| sourceJSON.items.coveredProducts.attributes.covering_sold_product | Objeto | Produto vendido que fornece cobertura para esta entrada. |
| sourceJSON.items.coveredProducts.attributes.date_added | Objeto | Cadeia de caracteres de data ISO 8601 que indica quando o produto foi adicionado à cobertura. |
| sourceJSON.items.coveredProducts.attributes.date_removed | Objeto | Cadeia de caracteres de data ISO 8601 que indica quando o produto foi removido da cobertura. Nulo ou vazio se ativo no momento. |
| sourceJSON.items.lineItems | Matriz de objetivos | Opcional. Matriz de JSONs da entidade de item de linha secundária. Cada secundário segue a mesma estrutura (sys_id, tabela, atributos e secundários aninhados). |
| sourceJSON.items.lineItems.attributes | Objeto | Pares de chave-valor que representam os atributos da entidade. Cada atributo é um objeto com uma propriedade de valor. Segue a mesma estrutura que sourceJSON.items.attributes. |
| sourceJSON.items.lineItems.characteristic | Objeto | Pares de chave-valor que representam a característica do item de linha. A característica é um objeto com uma propriedade de valor. Segue a mesma estrutura que sourceJSON.items.characteristics. |
| sourceJSON.items.lineItems.coveredProducts | Matriz de JSONs da entidade do produto coberto associados ao item de linha. Segue a mesma estrutura que sourceJSON.items.coveredProducts. |
|
| sourceJSON.items.lineItems.sys_id | Sys_id do item de linha JSONs da entidade. | |
| sourceJSON.items.lineItems.table | Local da tabela do item de linha JSONs da entidade. | |
| sourceJSON.items.sys_id | Cadeia de caracteres | Sys_id do registro da entidade de origem. |
| sourceJSON.items.table | Cadeia de caracteres | Nome da tabela da entidade de origem. Exemplo: sn_pss_core_service_contract_line . |
| TargetJSON | Objeto | Necessário. JSON da entidade de destino para consolidar o JSON de origem. Não deve ser nulo ou vazio. Segue a mesma estrutura de objeto que a entidade de origem ( sourceJSONparâmetro). |
| TargetJSON.attributes | Objeto | Pares de chave-valor que representam os atributos da entidade de destino. Cada atributo é um objeto com uma propriedade de valor. Segue a mesma estrutura de objeto que os atributos de origem ( sourceJSON.items.attributesparâmetro).Exemplo: |
| TargetJSON.lineItems | Matriz de objetivos | Opcional. Matriz de JSONs da entidade de item de linha secundária no destino. Segue a mesma estrutura de objeto que sourceJSON.items.lineItems. |
| TargetJSON.lineItems.attributes | Objeto | Pares de chave-valor que representam os atributos da entidade. Cada atributo é um objeto com uma propriedade de valor. Segue a mesma estrutura que sourceJSON.items.attributes. |
| targetJSON.lineItems.characteristics | Objeto | Pares de chave-valor que representam a característica do item de linha. A característica é um objeto com uma propriedade de valor. Segue a mesma estrutura que sourceJSON.items.characteristics. |
| TargetJSON.lineItems.coveredProducts | Matriz de JSONs da entidade do produto coberto associados ao item de linha. Segue a mesma estrutura que sourceJSON.items.coveredProducts. |
|
| TargetJSON.lineItems.sys_id | Sys_id do item de linha JSONs da entidade. | |
| TargetJSON.lineItems.table | Local da tabela do item de linha JSONs da entidade. | |
| TargetJSON.sys_id | Cadeia de caracteres | Sys_id do registro da entidade de destino. |
| Targetjson.table | Cadeia de caracteres | Nome da tabela da entidade de destino. Exemplo: sn_pss_core_service_contract |
| Tipo | Descrição |
|---|---|
| Objeto | Resultado JSON consolidado. O JSON da entidade mesclada e consolidada contém todos os atributos das matrizes secundárias de destino e mescladas/consolidadas. Retorna targetJSON se a consolidação estiver desabilitada ou sourceJSON for inválido. Retorna nulo se targetJSON for nulo ou vazio. |
O exemplo a seguir mostra como invocar o método de consolidação via LeadToCashService. Ele consolida uma entidade JSON de origem que contém itens de linha em uma entidade JSON de destino. Os itens de linha com a mesma oferta de produto são consolidados.
LeadToCashService Diretamente para simplificar, mas em uso em produção, sua subclasse personalizada deve ser registrada por meio do ponto de extensão e invocada por meio do 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));
Saída:
{
"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": []
}
]
}
O exemplo a seguir mostra como invocar o método de consolidação com sourceJSON nulo. Nesse caso, somente as entidades secundárias no targetJSON são consolidadas. Isso é útil quando o destino já contém itens de linha duplicados que precisam ser mesclados.
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));
Saída:
{
"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()
Método substituível que controla se a consolidação está habilitada para esta instância de serviço. A implementação de base retorna falso se não for substituída. As classes de implementação devem substituir este método para retornar verdadeiro para habilitar a consolidação.
| Nome | Tipo | Descrição |
|---|---|---|
| Nenhum |
| Tipo | Descrição |
|---|---|
| Booliano | Sinalizador que indica se o serviço habilitou a consolidação com sucesso. Valores válidos:
Padrão: falso |
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()
Método substituível que retorna a configuração de hash para agrupar entidades antes da consolidação. A configuração especifica quais atributos e tipos de contexto secundários geram um hash MD5 para cada entidade. As entidades com o mesmo hash são agrupadas para consolidação pareada. A implementação base retorna um objeto vazio quando não é substituída.
| Nome | Tipo | Descrição |
|---|---|---|
| Nenhum |
| Tipo | Descrição |
|---|---|
| Objeto | Um objeto JSON mapeando nomes de tabela para sua configuração de hash. Cada entrada da tabela contém:
Formato de retorno esperado: Quando a configuração de hash de uma tabela é um objeto vazio Quando a configuração de hash de uma tabela não é encontrada (indefinida ou nula), um erro é registrado e as entidades são retornadas inalteradas. A implementação base retorna um objeto vazio quando não é substituída. |
O exemplo a seguir mostra como substituir GetHashConfig() para definir atributos de hash para linhas de contrato e características de direito.
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(Objeto json1, Objeto json2)
Método substituível para determinar o JSON primário quando dois JSONs estão sendo consolidados. Para atributos não substituídos, os valores de atributo do JSON primário são usados no resultado consolidado. A implementação base retorna json1 se não for substituída.
| Nome | Tipo | Descrição |
|---|---|---|
| json1 | Objeto | JSON da primeira entidade a consolidar. Contém sys_id, tabela, atributos e matrizes secundárias. |
| json2 | Objeto | JSON da segunda entidade para consolidar. Contém sys_id, tabela, atributos e matrizes secundárias. |
| Tipo | Descrição |
|---|---|
| Objeto | O JSON primário selecionado. Os atributos deste JSON se tornam os valores padrão no resultado consolidado. Deve ser json1 ou json2. A implementação base retorna json1 se não for substituída. |
O exemplo a seguir mostra como substituir GetPrimary() para selecionar a entidade com a data de início anterior como primária.
// 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);
Saída:
// 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(Objeto json1, Objeto json2, Objeto consolidadedJSON)
Método substituível, chamado depois que dois JSONs são consolidados, para atualizar atributos no JSON consolidado. A implementação de base é não operacional se não for substituída.
Os casos de uso comuns incluem soma de quantidade, cálculo de intervalo de datas (início mais antigo/término mais recente), recálculo de termo e acompanhamento consolidado_de.
| Nome | Tipo | Descrição |
|---|---|---|
| json1 | Objeto | JSON da primeira entidade que foi consolidada. Este é o JSON primário (conforme determinado por GetPrimary() ). Contém atributos originais antes da consolidação. |
| json2 | Objeto | JSON da segunda entidade que foi consolidada. Este é o JSON secundário. Contém atributos originais antes da consolidação. |
| JSON consolidado | Objeto | O JSON do resultado após a mesclagem. Modifique os atributos deste objeto diretamente para aplicar a lógica personalizada. Inicialmente contém uma cópia detalhada dos atributos do JSON primário com matrizes secundárias mescladas. |
| Tipo | Descrição |
|---|---|
| vazio | Este método não retorna um valor. Modifique o. consolidatedJSONobjeto diretamente. |
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(Object consolidatedJSON)
Método substituível que aplica modificações finais ao JSON consolidado após a conclusão da consolidação da hierarquia. A implementação de base é não operacional se não for substituída.
O sistema chama este método no resultado consolidado final no consolidar() e também em cada entidade de resultado em ProcessHashGroup() .
| Nome | Tipo | Descrição |
|---|---|---|
| JSON consolidado | Objeto | Objeto JSON consolidado totalmente processado após a conclusão de toda a mesclagem e consolidação. Modifique este objeto diretamente para aplicar transformações finais. |
| Tipo | Descrição |
|---|---|
| vazio | Este método não retorna um valor. Modifique o. consolidatedJSONobjeto diretamente. |
O exemplo a seguir mostra como substituir PostHierarchyConsolidation() para definir um sinalizador na entidade consolidada.
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 - Pré-processo (Object sourceJSON, Object targetJSON, Object additionalParams)
Método substituível chamado antes da mesclagem e consolidação para executar tarefas de pré-processamento personalizadas, como criação de mapas em massa ou armazenamento em cache de dados de pesquisa.
Armazene resultados calculados no isso objeto (por exemplo, TargetHeaderId: "Sample_sys_id" ). Este método não retorna nenhum valor.
| Nome | Tipo | Descrição |
|---|---|---|
| Origem-destino | Objeto | Saída de sourceJSON para consolidar. Aceita a saída JSON do LeadtoCashCore - Com escopo CreateInstance() ou efeito () método. Pode ser um objeto JSON de entidade única ou um objeto JSON que contém uma matriz de itens de JSONs de várias entidades. Pode ser nulo ou vazio. |
| TargetJSON | Objeto | Necessário. JSON da entidade de destino para consolidação. |
| additionalParams | Objeto | Opcional. Dados adicionais passados do chamador. |
| Tipo | Descrição |
|---|---|
| vazio | Este método não retorna nenhum valor. Armazene resultados calculados no isso objeto para uso em etapas de consolidação subsequentes. |
O exemplo a seguir mostra como substituir Pré-processamento () Para armazenar em cache um ID de cabeçalho de destino para uso durante a consolidação.
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'
});