ConsolidationService - Escopo, gobal

  • Versão de lançamento: Australia
  • Atualizado 1 de abr. de 2026
  • 22 min. de leitura
  • . 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.

    Use o. ConsolidationService API quando você precisa de controle preciso sobre como os registros são combinados. Esta API fornece funcionalidade complexa não disponível na IU, como:
    • 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

    Antes de implementar o ConsolidationService, certifique-se de ter:
    • O plug-in Lead para núcleo de dinheiro ( .snc.l2c_core ) instalados e o. administrador função.
    • Uma inclusão de script personalizado que se estende sn_l2c_core.LeadToCashService e retorna seu ConsolidationService implementação de GetConsolidationService() . 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.

    Para estender e usar o. ServiçoSNC de consolidação API:
    1. Necessário. Crie uma inclusão de script personalizado que estenda sn_l2c_core.ConsolidationService.
    2. 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'
      });
    3. 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.
    4. 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'
      });
    5. 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.

    Tabela 1. Parâmetros
    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" .
    Tabela 2. Retornos
    Tipo Descrição
    Booliano Sinalizador que indica se a consolidação é possível no tipo de entidade selecionado.
    Valores válidos:
    • Verdadeiro: Agrupa entidades deste tipo por hash e as consolida.
    • Falso: Não consolida entidades deste tipo.

    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"));
    Saída:
    Can consolidate lineItems = true
    Can consolidate characteristics = false

    ConsolidationService - 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.

    Tabela 3. Parâmetros
    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.
    Tabela 4. Retornos
    Tipo Descrição
    Booliano Sinalizador que indica se os dois JSONs podem ser consolidados em um.
    Valores válidos:
    • Verdadeiro: Ambos os JSONs podem ser mesclados via ConsolidateJSONs() .
    • Falso: Ambos os JSONs permanecem separados.

    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'
    
    });
    Saída:
    false

    ConsolidationService - 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.

    Tabela 5. Parâmetros
    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" .
    Tabela 6. Retornos
    Tipo Descrição
    Booliano Sinalizador que indica se entidades deste tipo podem ser mescladas da origem para o destino.
    Valores válidos:
    • Verdadeiro: O sistema concatena matrizes de origem deste tipo na matriz correspondente do destino.
    • Falso: O sistema não mescla matrizes de origem deste tipo no destino.

    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"));
    Saída:
    Can merge lineItems = true
    Can merge characteristics = false

    ConsolidationService - 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.

    Tabela 7. Parâmetros
    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": [Array]
    }
    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.
    "items": [
      {
      "attributes": {Object},
      "characteristics": [Array],
      "coveredProducts": [Array],
      "sys_id": "String",
      "table": "String"
      }
    ]
    sourceJSON.items.attributes Objeto Pares de chave-valor que representam os atributos da entidade. Cada atributo é um objeto com uma propriedade de valor.
    "attributes": {
      "end_date": {"value": "String"},
      "product_offering": {"value": "String"},
      "quantity": {"value": "String"},
      "start_date": {"value": "String"}
    }

    Exemplo: "product_offering": "valor": "xr48..." "value": "5"]

    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.
    "characteristics": [
      {
        "attributes": {Object},
        "sys_id": "String",
        "table": "String"
       }
    ]
    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.
    "attributes": {
       "characteristic": {Object},
       "value": {Object}
    }
    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.
    "characteristic": {
        "value": "String"
    }
    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.
    "value": {
       "value": "String"
    }
    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.
    coveredProducts: [
     {
      "sys_id": {Object},
      "table": "String",
      "attributes": {Object}
     }
    ]
    sourceJSON.items.coveredProducts.sys_id Objeto Sys_id do registro do produto coberto.
    sys_id: { 
      value: "String"
    }
    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.
    attributes: {
                sold_product: { value: "String" },
                contract: { value: "String" },
                service_contract_line: { value: "String" },
                entitlement: { value: "String" },
                install_base: { value: "String" },
                covering_sold_product: { value: "String" },
                date_added: { value: "String" },
                date_removed: { value: "String" }
      }
    sourceJSON.items.coveredProducts.attributes.sold_product Objeto Registro de produto vendido associado a este produto coberto.
    "sold_product": {
      "value": "String"
    }
    sourceJSON.items.coveredProducts.attributes.contract Objeto Registro do contrato primário sob o qual a cobertura está definida.
    "contract": {
      "value": "String"
    }
    sourceJSON.items.coveredProducts.attributes.service_contract_line Objeto Item de linha do contrato de serviço específico vinculado a este produto coberto.
    "service_contract_line": {
      "value": "String"
    }
    sourceJSON.items.coveredProducts.attributes.entitlement Objeto Registro de direito que rege os termos de cobertura.
    "entitlement": {
      "value": "String"
    }
    sourceJSON.items.coveredProducts.attributes.install_base Objeto Registro da base de instalação que representa o ativo implantado.
    "install_base": {
      "value": "String"
    }
    sourceJSON.items.coveredProducts.attributes.covering_sold_product Objeto Produto vendido que fornece cobertura para esta entrada.
    "covering_sold_product": {
      "value": "String"
    }
    sourceJSON.items.coveredProducts.attributes.date_added Objeto Cadeia de caracteres de data ISO 8601 que indica quando o produto foi adicionado à cobertura.
    "date_added": {
      "value": "String"
    }
    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.
    "date_removed": {
      "value": "String"
    }
    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).
    "lineItems": [
     {
       "attributes": {Object},
       "characteristics": [Array],
       "coveredProducts": [Array],
       "sys_id": "String",
       "table": "String"
      }
    ]
    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.
    "attributes": {
      "characteristic": {Object},
      "value": {Object}
    }
    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.
    "characteristics": [{
       "attributes": {Object},
       "sys_id": "String",
       "table": "String"
    }]
    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.
    coveredProducts: [
     {
      "sys_id": {Object},
      "table": "String",
      "attributes": {Object}
     }
    ]
    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": {Object},
      "entitlement_characteristic": {Object},
      "sys_id": "String",
      "table": "String,
      "line_item": {Object}
      }
    }
    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).
    "attributes": {
      "end_date": {"value": "String"},
      "product_offering": {"value": "String"},
      "quantity": {"value": "String"},
      "start_date": {"value": "String"}
    }

    Exemplo: "product_offering": "valor": "xr48..." "value": "5"]

    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.
    "lineItems": {
        "sys_id": "String",
        "table": "String",
        "attributes": {Object},
        "characteristics": {Object}
      }
    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.
    "attributes": {
      "characteristic": {Object},
      "value": {Object}
    }
    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.
    "characteristic": {
      "value": "String"
    }
    TargetJSON.lineItems.coveredProducts Matriz de JSONs da entidade do produto coberto associados ao item de linha. Segue a mesma estrutura que sourceJSON.items.coveredProducts.
    "coveredProducts": [Array]
    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
    Tabela 8. Retornos
    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.

    Este exemplo instancia 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.
    Nota:
    MyConsolidationService é uma inclusão de script personalizado que precisa ser criada estendendo o ConsolidationService. A lógica dos métodos substituíveis ( EnableConsolidation(), getHashConfig(), canConsolidateEntity(), canMergeEntity(), canConsolidateJSONs(), Valores do atributo sobreridesobreride() ) Precisa ser adicionado em MyConsolidationService. MyLeadToCashService estende LeadToCashService e retorna MyConsolidationService de GetConsolidationService() .
    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.

    Tabela 9. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 10. Retorna
    Tipo Descrição
    Booliano Sinalizador que indica se o serviço habilitou a consolidação com sucesso.
    Valores válidos:
    • Verdadeiro: O serviço está habilitado para consolidação.
    • Falso: O serviço não está habilitado para consolidação.

    Padrão: falso

    O exemplo a seguir mostra como substituir EnableConsolidation() Em um ConsolidationService personalizado.
    Nota:
    MyConsolidationService é uma inclusão de script personalizado que deve ser criada estendendo o ConsolidationService.
    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);
    Saída:
    Consolidation enabled = true

    ConsolidationService - 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.

    Tabela 11. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 12. Retorna
    Tipo Descrição
    Objeto Um objeto JSON mapeando nomes de tabela para sua configuração de hash. Cada entrada da tabela contém:
    1. Atributos (matriz de cadeias de caracteres): Nomes de campos de atributos cujos valores estão incluídos no hash.
    2. Types (matriz de cadeias de caracteres): Opcional. Nomes de tabelas secundárias cujos valores de hash são recursivamente incluídos no hash primário.

    Formato de retorno esperado: Nome_tabela: ["1", "2"], "childContextTypes": ["child_table_name"]

    Quando a configuração de hash de uma tabela é um objeto vazio . , todas as entidades desse tipo são consolidadas em uma única entidade.

    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));
    Saída:
    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.

    Tabela 13. Parâmetros
    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.
    Tabela 14. Retornos
    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.

    Tabela 15. Parâmetros
    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.
    Tabela 16. Retornos
    Tipo Descrição
    vazio Este método não retorna um valor. Modifique o. consolidatedJSONobjeto diretamente.
    O exemplo a seguir mostra como substituir Valores do atributo sobreridesobreride() para somar quantidades e calcular intervalos de datas ao consolidar itens de linha.
    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() .

    Tabela 17. Parâmetros
    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.
    Tabela 18. Retornos
    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.

    Tabela 19. Parâmetros
    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.
    Tabela 20. Retornos
    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'
    });