Usted está aquí:
InsQuoteService:createUpdateQuoteFromExternal
Crea un presupuesto o actualiza un presupuesto existente con nueva información a través de una llamada de API entrante desde un sistema externo.
Clase:InsQuoteService
Método: createUpdateQuoteFromExternal
Funcionamiento
-
Recibe el objeto JSON.
-
Utiliza el
sourceSystemIdentifierpara determinar si crear o actualizar un presupuesto existente. -
Utiliza la
PricebookId, que es una lista de precios denominada Estándar. -
Si el servicio encuentra un presupuesto con el
sourceSystemIdentifierespecificado, actualiza el objeto de presupuesto:-
Utiliza los productos raíz definidos en
quoteLinespara agregar, actualizar o eliminar las partidas de presupuesto raíz. El servicio utiliza elsourceSystemIdentifierpara identificar la raíz.Agrega los registros en
quoteLinesque no están en el presupuesto. Actualiza los registros enquoteLinesexistentes en el Presupuesto. Elimina los registros enquoteLinesque están en Presupuesto pero no en las líneas de presupuesto. -
Para cada raíz, el servicio utiliza las coberturas, los elementos asegurados y las partes definidas con el
childLinesde agregar, actualizar o eliminar las coberturas raíz, los elementos asegurados y las partes. El servicio utiliza elsourceSystemIdentifierpara identificar la línea que actualizar.Agrega los registros en
childLinesque no están en el presupuesto. Actualiza los registros enchildLinesexistentes en el Presupuesto. Elimina los registros enchildLinesque están en el Presupuesto pero no enchildLines. -
Para cada cobertura raíz, elementos asegurados y partes, el servicio utiliza las coberturas, elementos asegurados y partes en el
childLinespara agregar, actualizar o eliminar las coberturas, elementos asegurados y partes respectivas. El servicio utilizasourceSystemIdentifierpara identificar la línea que actualizar.Agrega los registros en
childLinesque no están en el presupuesto. Actualiza los registros enchildLinesexistentes en el Presupuesto. Elimina los registros enchildLinesque están en el Presupuesto pero no enchildLines. -
Los registros de
QuoteLineItemyQuoteLineItemde parte asegurada secundaria del elemento asegurado principal tienen una relación muchos:muchos. Estas relaciones se almacenan en el objeto Relación de elemento de presupuesto (QuoteItemRelationship__c). Si unQuoteLineItemde artículo asegurado tiene relaciones con múltiples registros deQuoteLineItemde parte asegurada, el servicio utiliza el campoPrimaryChildLineItemId__cpara determinar cuál de esas relaciones es la principal.Por ejemplo, tanto Joan Smith como John Smith son controladores de Lexus 250; Joan Smith está establecido como el controlador principal. El Lexus 250
QuoteLineItemtienePrimaryChildLineItemId__cque apuntan a laQuoteLineItemde Joan Smith. -
Si dos elementos asegurados tienen la misma parte asegurada secundaria, cada elemento asegurado debe tener una anotación en el
childLinescorrespondiente para la parte asegurada secundaria. Para ambas entradas, deben tener el mismosourceSystemIdentifier.Por ejemplo, tanto Lexus 250 como Honda Odyssey tienen a Bob Jones como conductor. Lexus 250 tiene Bob Jones con
sourceSystemIdentifiercomo BobJones en suchildLines. Honda Odyssey tiene un Bob Jones consourceSystemIdentifiercomo BobJones en suchildLines. -
ParentItemId__c y ParentItemId2__c de
childLinesapuntan al Id. de la raíz. -
La
SubParentItemId__cde coberturas secundarias apunta al elemento asegurado principal.
-
-
Si el servicio no encuentra un presupuesto con el
sourceSystemIdentifierespecificado, crea el objeto de presupuesto que incluye partidas como se explica aquí:-
Utiliza los productos raíz definidos en
quoteLinespara crear las partidas de presupuesto raíz. -
Para cada raíz, utiliza las coberturas, los elementos asegurados y las partes definidas con el
childLinesde crear las coberturas raíz, los elementos asegurados y las partes. -
Para cada cobertura raíz, los elementos asegurados y las partes utilizan las coberturas, los elementos asegurados y las partes definidas en sus
childLinespara crear sus coberturas, elementos asegurados y partes. -
Los registros de
QuoteLineItemyQuoteLineItemde parte asegurada secundaria del elemento asegurado principal tienen una relación muchos:muchos. Estas relaciones se almacenan en el objeto Relación de elemento de presupuesto (QuoteItemRelationship__c). Si unQuoteLineItemde artículo asegurado tiene relaciones con múltiples registros deQuoteLineItemde parte asegurada, el servicio utiliza el campoPrimaryChildLineItemId__cpara determinar cuál de esas relaciones es la principal.Por ejemplo, tanto Joan Smith como John Smith son controladores de Lexus 250; Joan Smith está establecido como el controlador principal. El Lexus 250
QuoteLineItemtienePrimaryChildLineItemId__cque apuntan a laQuoteLineItemde Joan Smith. -
Si dos elementos asegurados tienen la misma parte asegurada secundaria, cada elemento asegurado debe tener entrada en la
childLinesrespectiva para la parte asegurada secundaria. Para ambas entradas, deben tener el mismosourceSystemIdentifier.Por ejemplo, tanto Lexus 250 como Honda Odyssey tienen a Bob Jones como conductor. Lexus 250 tiene Bob Jones con
sourceSystemIdentifiercomo BobJones en suchildLines. Honda Odyssey tiene a Bob Jones consourceSystemIdentifiercomo BobJones en suchildLines. -
Los
ParentItemId__cyParentItemId2__cdechildLinesapuntan al Id. de la raíz. -
Los
SubParentItemId__cde coberturas secundarias apuntan al elemento asegurado principal.
-
-
Devuelve un
Quote.Idy la lista de errores encontrados en el JSON de salida.
Entradas
Entrada |
Descripción |
|---|---|
|
Contiene toda la información para la creación del presupuesto. Para obtener más información sobre los pares clave-valor, consulte Descripción de nodos JSON. |
Descripción de nodos JSON |
|
|
Una lista de registros. El servicio procesa solo un presupuesto en un momento dado. |
nodos de presupuesto |
|
|
Obligatorio. El Id. de la oportunidad. |
|
Obligatorio. Identificador de registro exclusivo de un sistema externo a Salesforce para identificar qué presupuesto actualizar. |
|
El nombre de API del tipo de registro de presupuesto. |
|
El par clave-valor de otros campos de |
|
La lista de productos raíz. |
quoteLines nodes |
|
|
Obligatorio. Identificador de registro exclusivo de un sistema externo a Salesforce para identificar qué QuoteLineItems raíz agregar, actualizar o eliminar en Salesforce. |
|
Clave de instancia en |
|
Obligatorio. Código de producto raíz. |
|
Obligatorio. Tipo de registro de producto o especificación. |
|
Los atributos de producto seleccionados. |
|
El par clave-valor de otros campos de |
|
Coberturas de productos raíz, artículos asegurados y partes aseguradas. |
childLines nodes |
|
|
Obligatorio. Identificador de registro exclusivo de un sistema externo a Salesforce para identificar qué coberturas raíz, elementos asegurados y partes aseguradas agregar, actualizar o eliminar en Salesforce. |
|
Identifica múltiples instancias de la misma especificación. Clave de instancia en |
|
Obligatorio. El código de producto de coberturas raíz, elementos asegurados y partes aseguradas. |
|
Obligatorio. Tipo de registro de producto o especificación. |
|
Los atributos de producto seleccionados. |
|
El par clave-valor de otros campos de |
|
Coberturas secundarias, artículos asegurados y partes aseguradas. |
childLines nodes |
|
|
Obligatorio. Identificador de registro exclusivo de un sistema externo a Salesforce para identificar qué coberturas secundarias, elementos asegurados y partes aseguradas agregar, actualizar o eliminar en Salesforce. Si dos elementos asegurados tienen la misma parte asegurada secundaria, cada elemento asegurado debe tener entrada en la |
|
Identifica múltiples instancias de la misma especificación. Clave de instancia en |
|
Obligatorio. El código de producto de coberturas secundarias, artículos asegurados y producto de partes aseguradas. |
|
Obligatorio. Tipo de registro de producto o especificación. |
|
Los atributos de producto seleccionados. |
|
El par clave-valor de otros campos de |
JSON de entrada
Este es el formato del 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"
}
]
}
}
]
}
}
]
}
}
]
}
}
]
}
}
]
}
}Este es un ejemplo del 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 salida
Devuelve el Quote.Id del presupuesto creado o actualizado en el JSON de salida y la lista de errores encontrados.
Este es el formato del JSON de salida:
{
"errors":[
"error1",
"error2",
"error3"
],
"quoteId":"Quote.Id"
}Este es un ejemplo del JSON de salida:
{
"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"
}