Você está aqui:
InsQuoteService:createUpdateQuoteFromExternal
Cria uma cotação ou atualiza uma cotação existente com novas informações por meio de uma chamada de API de entrada de um sistema externo.
Classe:InsQuoteService
Método: createUpdateQuoteFromExternal
Como funciona
-
Recebe o objeto JSON.
-
Usa o
sourceSystemIdentifierpara determinar se uma cotação existente deve ser criada ou atualizada. -
Usa o
PricebookId, que é um catálogo de preços chamado Padrão. -
Se o serviço encontrar uma Cotação com a
sourceSystemIdentifierfornecida, ele atualizará o objeto de cotação:-
Usa os produtos raiz definidos em
quoteLinespara adicionar, atualizar ou excluir os itens de linha de cotação raiz. O serviço usa osourceSystemIdentifierpara identificar a raiz.Adiciona os registros em
quoteLinesque não estão na cotação. Atualiza os registros emquoteLinesexistentes na cotação. Exclui os registros emquoteLinesque estão na Cotação, mas não na quoteLines. -
Para cada raiz, o serviço usa as coberturas, os itens segurados e as partes definidas em
childLinespara adicionar, atualizar ou excluir as coberturas raiz, os itens segurados e as partes. O serviço usa osourceSystemIdentifierpara identificar a linha a ser atualizada.Adiciona os registros em
childLinesque não estão na cotação. Atualiza os registros emchildLinesexistentes na cotação. Exclui os registros emchildLinesque estão na Cotação, mas não emchildLines. -
Para cada cobertura raiz, itens segurados e partes, o serviço usa coberturas, itens segurados e partes na
childLinespara adicionar, atualizar ou excluir as respectivas coberturas, itens segurados e partes. O serviço usasourceSystemIdentifierpara identificar a linha a ser atualizada.Adiciona os registros em
childLinesque não estão na cotação. Atualiza os registros emchildLinesexistentes na cotação. Exclui os registros emchildLinesque estão na Cotação, mas não emchildLines. -
Os registros de
QuoteLineItemdo item segurado principal e deQuoteLineItemda parte segurada criança têm um relacionamento many:many. Esses relacionamentos são armazenados no objeto Relacionamento de item de cotação (QuoteItemRelationship__c). Se umQuoteLineItemde item segurado tiver relacionamentos com vários registros deQuoteLineItemda parte segurada, o serviço usará o campoPrimaryChildLineItemId__cpara determinar qual desses relacionamentos é o principal.Por exemplo, Joan Smith e John Smith são condutores do Lexus 250; Joan Smith é definido como o condutor principal. O Lexus 250
QuoteLineItemtemPrimaryChildLineItemId__capontando para aQuoteLineItemde Joan Smith. -
Se dois itens segurados tiverem a mesma criança segurada, cada item segurado deve ter uma entrada na respectiva
childLinespara a criança segurada. Para ambas as entradas, elas devem ter a mesmasourceSystemIdentifier.Por exemplo, tanto o Lexus 250 quanto o Honda Odyssey têm Bob Jones como motorista. Lexus 250 tem Bob Jones com
sourceSystemIdentifiercomo BobJones em seuchildLines. Honda Odyssey tem um Bob Jones comsourceSystemIdentifiercomo BobJones em seuchildLines. -
ParentItemId__c e ParentItemId2__c de
childLinesapontam para o ID da raiz. -
A
SubParentItemId__cdas coberturas infantis aponta para o item segurado principal.
-
-
Se o serviço não encontrar uma cotação com a
sourceSystemIdentifierfornecida, ele criará o objeto de cotação que inclui itens de linha, conforme explicado aqui:-
Usa os produtos raiz definidos em
quoteLinespara criar os itens de linha de cotação raiz. -
Para cada raiz, use as coberturas, os itens segurados e as partes definidas em
childLinespara criar as coberturas raiz, os itens segurados e as partes. -
Para cada cobertura raiz, os itens segurados e as partes usam as coberturas, os itens segurados e as partes definidas em suas
childLinespara criar suas coberturas, os itens segurados e as partes. -
Os registros de
QuoteLineItemdo item segurado principal e deQuoteLineItemda parte segurada criança têm um relacionamento many:many. Esses relacionamentos são armazenados no objeto Relacionamento de item de cotação (QuoteItemRelationship__c). Se umQuoteLineItemde item segurado tiver relacionamentos com vários registros deQuoteLineItemda parte segurada, o serviço usará o campoPrimaryChildLineItemId__cpara determinar qual desses relacionamentos é o principal.Por exemplo, Joan Smith e John Smith são condutores do Lexus 250; Joan Smith é definido como o condutor principal. O Lexus 250
QuoteLineItemtemPrimaryChildLineItemId__capontando para aQuoteLineItemde Joan Smith. -
Se dois itens segurados tiverem a mesma criança segurada, cada item segurado deve ter uma entrada na respectiva
childLinespara a criança segurada. Para ambas as entradas, elas devem ter a mesmasourceSystemIdentifier.Por exemplo, tanto o Lexus 250 quanto o Honda Odyssey têm Bob Jones como motorista. Lexus 250 tem Bob Jones com
sourceSystemIdentifiercomo BobJones em seuschildLines. Honda Odyssey tem Bob Jones comsourceSystemIdentifiercomo BobJones em seuchildLines. -
ParentItemId__ceParentItemId2__cdechildLinesapontam para o ID da raiz. -
As
SubParentItemId__cdas coberturas infantis apontam para o item segurado principal.
-
-
Retorna uma
Quote.Ide a lista de erros encontrados no JSON de saída.
Contribuições
Entrada |
Descrição |
|---|---|
|
Contém todas as informações para a criação da cotação. Para obter mais informações sobre os pares de chave e valor, consulte a descrição de nós JSON. |
Descrição de nós JSON |
|
|
Uma lista de registros. O serviço processa apenas uma cotação por vez. |
nós de cotação |
|
|
Obrigatório. O ID da oportunidade. |
|
Obrigatório. Identificador de registro exclusivo de um sistema fora do Salesforce para identificar qual cotação atualizar. |
|
O nome da API do tipo de registro de cotação. |
|
O par de chave e valor de outros campos de |
|
A lista de produtos raiz. |
Nós quoteLines |
|
|
Obrigatório. Identificador de registro exclusivo de um sistema fora do Salesforce para identificar quais QuoteLineItems raiz adicionar, atualizar ou excluir no Salesforce. |
|
Chave de instância em |
|
Obrigatório. Código-raiz do produto. |
|
Obrigatório. Tipo de registro de produto ou especificação. |
|
Os atributos do produto selecionados. |
|
O par de chave e valor de outros campos de |
|
Coberturas de produto raiz, itens segurados e partes seguradas. |
Nós childLines |
|
|
Obrigatório. Identificador de registro exclusivo de um sistema fora do Salesforce para identificar quais coberturas-raiz, itens segurados e segurados adicionar, atualizar ou excluir no Salesforce. |
|
Identifica várias instâncias da mesma especificação. Chave de instância em |
|
Obrigatório. O código do produto de coberturas raiz, itens segurados e partes seguradas. |
|
Obrigatório. Tipo de registro de produto ou especificação. |
|
Os atributos do produto selecionados. |
|
O par de chave e valor de outros campos de |
|
Coberturas filho, itens segurados e partes seguradas. |
Nós childLines |
|
|
Obrigatório. Identificador de registro exclusivo de um sistema fora do Salesforce para identificar quais coberturas filho, itens segurados e segurados adicionar, atualizar ou excluir no Salesforce. Se dois itens segurados tiverem a mesma criança segurada, cada item segurado deve ter uma entrada na respectiva |
|
Identifica várias instâncias da mesma especificação. Chave de instância em |
|
Obrigatório. O código do produto de coberturas filho, itens segurados e produto das partes seguradas. |
|
Obrigatório. Tipo de registro de produto ou especificação. |
|
Os atributos do produto selecionados. |
|
O par de chave e valor de outros campos de |
JSON de entrada
Aqui está o formato do JSON de entrada:
{
"quote":{
"records":[
{
"opportunityId":"Opportunity.Id",
"sourceSystemIdentifier":"Id",
"sourceSystem":"Name of system quote was created",
"Name":"Quote Name",
"type":"Quote.RecordType.DeveloperName",
"effectiveDate":"Quote.EffectiveDate__c",
"endDate":"Quote.EndDate__c",
"price":Quote.StandardPremium__c,
"term":"Quote.Term__c",
"status":"Quote.Status",
"additionalFields":{
"Quote.fieldAPIName":"value"
},
"quoteLines":{
"records":[
{
"sourceSystemIdentifier":"Id",
"lineRecordType":"Product2",
"instanceKey":"name",
"productCode":"Product2.ProductCode",
"productName":"Product2.Name",
"attributeCategories":{
"records":[
{
"productAttributes":{
"records":[
{
"code":"attribute code",
"userValues":"selected value"
}
]
}
}
]
},
"additionalFields":{
"QuoteLineItem.fieldAPIName":"value"
},
"childLines":{
"records":[
{
"sourceSystemIdentifier":"Id",
"lineRecordType":"Product2.RecordType.DeveloperName",
"productCode":"Product2.ProductCode",
"productName":"Product2.Name",
"instanceKey":"instance name",
"price":QuoteLineItem.UnitPrice,
"taxAmount":QuoteLineItem.TaxAmount__c,
"feeAmount":QuoteLineItem.FeeAmount__c,
"additionalFields":{
"QuoteLineItem.fieldAPIName":"value"
},
"attributeCategories":{
"records":[
{
"productAttributes":{
"records":[
{
"code":"attribute code",
"userValues":"selected value"
}
]
}
}
]
},
"childLines":{
"records":[
{
"sourceSystemIdentifier":"Id",7e54f959544f",
"lineRecordType":"InsuredPartySpec",
"productCode":"Product2.ProductCode",
"productName":"Product2.Name",
"instanceKey":"instance name",
"price":QuoteLineItem.UnitPrice,
"taxAmount":QuoteLineItem.TaxAmount__c,
"feeAmount":QuoteLineItem.FeeAmount__c,
"isPrimaryChild":true,
"additionalFields":{
"QuoteLineItem.fieldAPIName":"value"
},
"attributeCategories":{
"records":[
{
"productAttributes":{
"records":[
{
"code":"attribute code",
"userValues":"selected value"
}
]
}
}
]
}
}
]
}
}
]
}
}
]
}
}
]
}
}Aqui está um exemplo do JSON de entrada:
{
"quote": {
"records": [
{
"opportunityId": "0065w0000286hhNAAQ",
"sourceSystemIdentifier": "af3c0072-9018-43df-83d3-3a5f254d5b1e",
"sourceSystem": "Salesforce",
"Name": "Auto Root (External)",
"type": "LargeGroupQuote",
"effectiveDate": "06/01/2021",
"endDate": "12/01/2021",
"price": 10000,
"term": "Semi-Annual",
"status": "Submitted",
"quoteLines": {
"records": [
{
"sourceSystemIdentifier": "49553393-120a-4777-b65a-8167c386a0fb",
"instanceKey": "Auto Root",
"productCode": "AUTOROOT",
"productName": "Auto Root",
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "atLimitUM",
"userValues": 200
}
]
}
}
]
},
"additionalFields": {
"instest12__AdjustmentComments__c": "test comment"
},
"childLines": {
"records": [
{
"sourceSystemIdentifier": "5a8d1b04-c34c-6a48-42c8-ab08be9868e1",
"lineRecordType": "InsuredItemSpec",
"Name": "Auto",
"productName": "Auto",
"productCode": "AUTO",
"instanceKey": "2010 Honda Odyssey",
"price": 111,
"taxAmount": 5,
"feeAmount": 21,
"additionalFields": {
"instest12__AdjustmentComments__c": "test comment"
},
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "autoYear",
"userValues": 2010
},
{
"code": "carValue",
"userValues": 55000
},
{
"code": "est_annual_mileage",
"userValues": 2000
},
{
"code": "autoMake",
"userValues": "Honda"
},
{
"code": "autoModel",
"userValues": "Odyssey"
}
]
}
}
]
},
"childLines": {
"records": [
{
"sourceSystemIdentifier": "6400140b-3e97-32c4-bdfd-7e54f959544f",
"lineRecordType": "InsuredPartySpec",
"Name": "Driver",
"productName": "Driver",
"productCode": "DRIVER",
"instanceKey": "Bob Jones",
"price": 112,
"taxAmount": 6,
"feeAmount": 22,
"isPrimaryChild": true,
"additionalFields": {
"instest12__AdjustmentComments__c": "test comment"
},
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "AGE",
"userValues": 24
},
{
"code": "FN",
"userValues": "Bob"
},
{
"code": "LN",
"userValues": "Jones"
},
{
"code": "GENDER",
"userValues": "Male"
}
]
}
}
]
}
},
{
"sourceSystemIdentifier": "38c4fe27-7b85-77ce-c9e2-1f7f22889982",
"lineRecordType": "InsuredPartySpec",
"Name": "Driver",
"productName": "Driver",
"productCode": "DRIVER",
"instanceKey": "Joan Smith",
"price": 113,
"taxAmount": 7,
"feeAmount": 23,
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "AGE",
"userValues": 25
},
{
"code": "FN",
"userValues": "Joan"
},
{
"code": "LN",
"userValues": "Smith"
},
{
"code": "GENDER",
"userValues": "Female"
}
]
}
}
]
}
},
{
"sourceSystemIdentifier": "33b74fa2-fba5-44b4-317f-021dae689a9f",
"lineRecordType": "CoverageSpec",
"Name": "Collision Deductible Waiver",
"productName": "Collision Deductible Waiver",
"productCode": "COL_WAIVER",
"instanceKey": "2010 Honda Odyssey_COL_WAIVER",
"price": 114,
"taxAmount": 8,
"feeAmount": 24
},
{
"sourceSystemIdentifier": "c4d5ac35-99b1-047d-cebe-05b74861463e",
"lineRecordType": "CoverageSpec",
"Name": "Uninsured/Underinsured Motorist BI",
"productName": "Uninsured/Underinsured Motorist BI",
"productCode": "UNINSURED_COVERAGE",
"instanceKey": "2010 Honda Odyssey_UNINSURED_COVERAGE",
"price": 115,
"taxAmount": 9,
"feeAmount": 25,
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "AbaThrpyOutptInst_covered_inn",
"userValues": 1.3
},
{
"code": "UNINSURED",
"userValues": "No coverage"
}
]
}
}
]
}
}
]
}
},
{
"sourceSystemIdentifier": "60699eaf-956a-4381-8ef2-5a704c85517f",
"lineRecordType": "InsuredItemSpec",
"Name": "Auto",
"productName": "Auto",
"productCode": "AUTO",
"instanceKey": "2011 Toyota Camry",
"price": 116,
"taxAmount": 10,
"feeAmount": 26,
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "autoYear",
"userValues": 2011
},
{
"code": "carValue",
"userValues": 55500
},
{
"code": "est_annual_mileage",
"userValues": 2200
},
{
"code": "autoMake",
"userValues": "Toyota"
},
{
"code": "autoModel",
"userValues": "Camry"
}
]
}
}
]
},
"childLines": {
"records": [
{
"sourceSystemIdentifier": "6400140b-3e97-32c4-bdfd-7e54f959544f",
"lineRecordType": "InsuredPartySpec",
"Name": "Driver",
"productName": "Driver",
"productCode": "DRIVER",
"instanceKey": "Bob Jones",
"price": 112,
"taxAmount": 6,
"feeAmount": 22,
"isPrimaryChild": true,
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "AGE",
"userValues": 24
},
{
"code": "FN",
"userValues": "Bob"
},
{
"code": "LN",
"userValues": "Jones"
},
{
"code": "GENDER",
"userValues": "Male"
}
]
}
}
]
}
},
{
"sourceSystemIdentifier": "8c450354-2053-444c-9c9e-36a66e6f5582",
"lineRecordType": "CoverageSpec",
"Name": "Collision Deductible Waiver",
"productName": "Collision Deductible Waiver",
"productCode": "COL_WAIVER",
"instanceKey": "2011 Toyota Camry_COL_WAIVER",
"price": 117,
"taxAmount": 11,
"feeAmount": 27
},
{
"sourceSystemIdentifier": "7aaeee37-05ce-4926-accb-dff2ee85587f",
"lineRecordType": "CoverageSpec",
"Name": "Roadside",
"productName": "Roadside",
"productCode": "ROADSIDE_COVERAGE",
"instanceKey": "2011 Toyota Camry_ROADSIDE_COVERAGE",
"price": 118,
"taxAmount": 12,
"feeAmount": 28,
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "ROADSIDE",
"userValues": 1
}
]
}
}
]
}
}
]
}
}
]
}
}
]
},
"additionalFields": {
"instest12__MonthlyPremium__c": 222
}
}
]
}
}JSON de saída
Retorna a Quote.Id da cotação criada ou atualizada no JSON de saída e a lista de erros encontrados.
Aqui está o formato do JSON de saída:
{
"errors":[
"error1",
"error2",
"error3"
],
"quoteId":"Quote.Id"
}Aqui está um exemplo do JSON de saída:
{
"errors":[
"Failed to create/update QuoteLineItem Honda Odyssey.Required fields are missing: [PricebookEntryId, Product2Id]; ",
"Failed to create/update QuoteLineItem Toyota Camry.Required fields are missing: [PricebookEntryId, Product2Id]; ",
"Failed to create/update QuoteLineItem Patty Desc.Required fields are missing: [PricebookEntryId, Product2Id]; "
],
"quoteId":"0Q05w0000027aH5CAI"
}
