Usted está aquí:
InsQuoteService:createUpdateQuote
Utilice este servicio para crear un presupuesto para nuevos negocios, actualizar un presupuesto existente con nueva información o crear un presupuesto de aprobación. Para actualizaciones, el quoteId del presupuesto que se va a actualizar debe incluirse en las opciones remotas.
Antes de que se ejecute este servicio, el sistema ejecuta una comprobación de usuario invitado.
Este servicio puede ser utilizado por usuarios invitados. Un usuario invitado que esté ejecutando una tarea de OmniScript, Procedimiento de integración o interfaz de usuario podrá continuar; este servicio se ejecutará. Sin embargo, el quoteId y el opportunityId están cifrados en estos casos, de modo que los usuarios invitados no pueden ver estos Id.
Utilice el servicio InsQuoteService:createUpdateQuote para actualizar el presupuesto y las partidas de presupuesto, en vez de utilizar el Asignador de datos de OmniStudio.
Funcionamiento
-
El servicio busca el JSON de entrada para el
inputKey. El nodoinputKeycontiene la información que el servicio necesita para crear o actualizar un presupuesto. La información que requiere este servicio incluye:-
opportunityId -
endDate(opcional) -
effectiveDate -
Registros de
productConfigurationDetail -
instanceKeyRequerido para identificar múltiples instancias de la misma especificación
-
insuredItemsnodoDentro de este nodo, el servicio espera una lista de especificaciones de elementos asegurados y especificaciones de partes aseguradas, utilizando la
productCodede cada especificación como una clave. Term__cUtilice esta opción para actualizar el campo Term__c del presupuesto.
-
-
Utiliza la información del JSON de entrada para crear el presupuesto.
-
Devuelve un Id. de presupuesto en el JSON de salida.
-
Crea un objeto Presupuesto que incluye estas partidas:
-
Utiliza los productos raíz definidos en
productConfigurationDetailpara crear o actualizar las partidas de presupuesto raíz. -
Al actualizar un presupuesto existente, se agregarán los registros del
productConfigurationDetailque aún no están en el presupuesto y se actualizarán los que ya están en el presupuesto. -
Utiliza especificaciones de elementos asegurados, especificaciones de parte asegurada y especificaciones de cobertura como partidas de presupuesto:
ParentItemId__c = rootItem.Id. -
La partida de presupuesto de la partida asegurada principal y las partidas de presupuesto de la parte asegurada secundaria tienen una relación muchos:muchos. Estas relaciones se almacenan en el objeto Relación de partida de presupuesto. Si una partida de presupuesto de elemento asegurado tiene relaciones con múltiples partidas de presupuesto de parte asegurada, el campo
PrimaryChildLineitemId__cse utiliza para determinar cuál de esas relaciones es la principal.Por ejemplo, Joan Smith y John Smith son controladores de Lexus 250; Joan Smith está establecido como el controlador Principal. La partida de presupuesto Lexus 250 tiene
PrimaryChildLineItemId__cque apuntan a la partida de presupuesto de Joan Smith. LaParentItemId2__cde todas las partidas de presupuesto apunta a laSubParentItemId__cde coberturasrootItem.Id.secundarias apunta al elemento asegurado principal. Los campos deItemName__cde partidas de presupuesto de partidas de presupuesto de partidas aseguradas y partidas de presupuesto de partes aseguradas se almacenan con lainstanceKeyde este elemento. -
La partida de presupuesto del elemento asegurado principal incluye el precio.
-
-
Para nuevos presupuestos, si
createOpportunityestruey no se proporciona ningunaopportunityId, crea un registro Oportunidad utilizando el nodo JSONOpportunityDetailsdesde elinputKey. -
Si
calculateCommissionestrue, llama aInsCommissionService.processQuoteCommission, que prepara la entrada para el servicio deInsCommissionService.calculate. Después de que el servicio calcular procese la entrada, almacena el valor de comisión calculado enQuote.CommissionAmount__c.
Todos los usuarios que llaman a InsQuoteService:createUpdateQuote deben tener el permiso Leer para todos los campos en el conjunto de campos Detalle de presupuesto si el conjunto de campos se agrega al objeto Partida de presupuesto.
Si el conjunto de campos Detalle de presupuesto no se agrega al objeto Partida de presupuesto, todos los campos, incluyendo los campos personalizados, son legibles para los usuarios.
Recargos
A continuación le mostramos cómo funciona este servicio con recargos (impuestos y comisiones):
-
Si el campo
taxesAndFeesse especifica en un registro JSON, persiste un registroQuotePricingAdjustment__ccorrespondiente para cada elemento en la lista detaxesAndFees. -
Si el campo
taxAmountse especifica en un registro JSON, el campoTaxAmount__cse establece en el valor del campotaxAmounten elQuoteLineItemcreado. -
Si el campo
feeAmountse especifica en un registro JSON, el campoFeeAmount__cse establece en el valor del campofeeAmounten elQuoteLineItemcreado.
Adición de campos adicionales a partidas de presupuesto
Si necesita campos adicionales escritos en la partida de presupuesto por este servicio, deberá llamar al servicio InsProductJSONService:trimOffAttributeCategory primero.
El flujo para hacer que esto funcione en un procedimiento de integración o OmniScript es:
-
Pasos de configuración de productos
-
Llamada de servicio InsProductJSONService:trimOffAttributeCategory con selectedValueAsObject establecido como true
-
Transformación DataRaptor que puede incluir la asignación entre atributos y sus campos adicionales en el objeto Partida de presupuesto
-
Llamada de servicio InsQuoteService:createUpdateQuote
Opciones remotas
Opción |
Descripción |
|---|---|
|
Si esta opción está establecida como Esta opción admite relaciones de elemento asegurado principal > secundario y principal > secundario > nieto. |
|
Obligatorio. Una clave JSON de la que este servicio extrae la información necesaria para crear o actualizar un presupuesto. No utilice % para rodear el valor de esta clave. Esta clave representa un nodo JSON, no una variable. Como esta clave representa un nodo JSON y no una ruta, no utilice la notación de ruta parent:childnode:childnode. Para llegar a la ruta de datos correcta, inscríbala en el campo Enviar ruta JSON en la sección Transformación Enviar/Respuesta cuando agregue este par de clave/valor a un paso de OmniScript. |
|
Cuando se establece en Utilice esta opción para crear presupuestos de múltiples instancias de gran tamaño a través de múltiples llamadas de servidor, donde el nuevo conjunto de partidas de presupuesto de las instancias se inserta en el presupuesto existente en cada llamada. |
|
Opcional. El Id. de un presupuesto existente que este servicio actualiza, basándose en información nueva o actualizada. Se utiliza cuando el servicio necesita actualizar un presupuesto existente. |
|
Opcional. Un indicador booleano para indicar si el presupuesto es un presupuesto de múltiples raíces. El valor predeterminado es |
|
Cuando se establece en |
|
Cuando se establece en |
|
Obligatorio. El nombre de la lista de precios asociada con la especificación del producto. Salesforce requiere que los productos utilizados en partidas de presupuesto tengan una entrada de lista de precios. |
|
Cuando se establece en Cuando se establece en Nota
Si establece esta opción como falsa, también debe agregar una partida a la plantilla de la interfaz de usuario de
|
|
Cuando se establece en |
|
Cuando se establece en |
|
Cuando se establece en Cuando se establece en Nota
Si establece esta opción en true, también necesita ingresar al menos uno de los valores de código de producción o productor: |
|
Opcional. El Id. del productor de procesamiento, es decir, el productor utilizado para recuperar el |
|
Opcional. El Id. de código de producción. |
|
Opcional. El nombre del código de producción pasó al servicio InsCommissionService.calculate. Si no ingresa |
runEligibilityRequiredDefaultSelectedRules
|
Opcional. Los valores predeterminados son Determina si se ejecutan las reglas Aptitud y Valor predeterminado seleccionado. |
runRelationshipRules
|
Opcional. Los valores predeterminados son Determina si se ejecutan reglas de relaciones. |
runSelectedValivationRules
|
Opcional. Los valores predeterminados son Determina si se ejecutan las reglas Seleccionar validación. |
JSON de entrada
Este servicio busca el valor del inputKey. Vaya a la ficha API en la especificación del producto para encontrar el JSON de entrada que necesita para este servicio.
Para este ejemplo, inputKey = quotePolicyJSON.
"quotepolicyJson": {
"productConfigurationDetail": {
"records": [{
"rootProductId": "01t1I000002fuBoQAI",
"rootProductCode": "AUTOROOT",
"timestamp": 1534288040769,
"hasInstanceKeys": true,
"childProductsCount": 4,
"instanceKeyChildren": 2,
"pathFromChild": "[0]",
"pathFromRoot": "[0]",
"attributeCategories": {
"records": [{
"productAttributes": {
"records": [{
"parentProductId": "01t1I000002fuBoQAI",
"parentProductCode": "AUTOROOT",
"pathFromChild": "attributeCategories.records[0].productAttributes.records[0]",
"pathFromRoot": "attributeCategories.records[0].productAttributes.records[0]",
"userValues": "test",
"values": [{
"disabled": false,
"readonly": false
}]
"totalSize": 1
},
"id": "a1V1I0000007xJSUAY",
"Name": "Alan Health Attributes",
"Code__c": "AHA",
"displaySequence": 5
}
],
"totalSize": 1
},
"childProducts": {
"records": [{
"rootProductId": "a2f1I000000BI6JQAW",
"rootProductCode": "stolenProperty",
"customizeSectionsOpen": null,
"numberAttributes": 1,
"numberCategories": 1,
"originalIndex": 0,
"parentProductName": "Auto Root",
"pathFromRoot": "[0].childProducts.records[0]",
"attributeCategories": {
"records": [{
"productAttributes": {
"records": [{
"parentProductId": "a2f1I000000BI6JQAW",
"parentProductCode": "stolenProperty",
"originalAttributeIndex": 0,
"originalCategoryIndex": 0,
"originalProductIndex": 0,
"pathFromChild": "attributeCategories.records[0].productAttributes.records[0]",
"pathFromRoot": "childProducts.records[0].attributeCategories.records[0].productAttributes.records[0]",
"userValues": false,
"values": [...]
...
}]
"totalSize": 1
},
"id": "a1V1I0000007xJSUAY",
"Name": "Alan Health Attributes",
"Code__c": "AHA",
"displaySequence": 5
}],
"totalSize": 1
},
"childProducts": {
...
}
"Price": 80,
"productId": "01t1I000002fuBoQAI",
"Term__c": "Semi-Annual",
"PricingFormula__c": "SUM(AutoPremium__autoPremium + rentalTotal + medicalTotal + roadsideTotal + dedWaiverTotal + uninsuredMotoristPDTotal + uninsuredMotoristBITotal)",
"IsConfigurable__c": true,
"RecordTypeName__c": "Product",
"IsRecommended__c": false,
"ProductCode": "AUTOROOT",
"Name": "Auto Root",
"Id": "01t1I000002fuBoQAI",
"RawPriceData": [{
"aggregationResults": {},
"calculationResults": [{
"ID": "0",
"comprehensiveTotal": 500,
"rentalTotal": 40,
"medicalTotal": 10,
"roadsideTotal": 10,
"dedWaiverTotal": 10,
"uninsuredMotoristPDTotal": 0,
"uninsuredMotoristBITotal": 100,
"AUTO.instanceKey": "2015 Lexus LX250",
"DRIVER.FN": "Joan",
"DRIVER.LN": "Smith"
},
"ID": "1",
"comprehensiveTotal": 500,
"rentalTotal": 40,
"medicalTotal": 10,
"roadsideTotal": 10,
"dedWaiverTotal": 10,
"uninsuredMotoristPDTotal": 0,
"uninsuredMotoristBITotal": 100,
"AUTO.instanceKey": "2015 Lexus LX250",
"DRIVER.FN": "John",
"DRIVER.LN": "Smith"
},
...
]
},
{
"aggregationResults": {},
"calculationResults": [{
"ID": "4",
"comprehensiveTotal": 500,
"rentalTotal": 40,
"medicalTotal": 10,
"roadsideTotal": 10,
"dedWaiverTotal": 10,
"uninsuredMotoristPDTotal": 0,
"uninsuredMotoristBITotal": 100,
"AUTO.instanceKey": "2006 Honda Odyssey",
"DRIVER.FN": "Joan",
"DRIVER.LN": "Smith"
},
{
"ID": "5",
"comprehensiveTotal": 500,
"rentalTotal": 40,
"medicalTotal": 10,
"roadsideTotal": 10,
"dedWaiverTotal": 10,
"uninsuredMotoristPDTotal": 0,
"uninsuredMotoristBITotal": 100,
"AUTO.instanceKey": "2006 Honda Odyssey",
"DRIVER.FN": "John",
"DRIVER.LN": "Smith"
},
...
]
}
],
"CalculatedPriceData": {
"2006 Honda Odyssey": {
"ID": "4",
"comprehensiveTotal": 500,
"rentalTotal": 40,
"medicalTotal": 10,
"roadsideTotal": 10,
"dedWaiverTotal": 10,
"uninsuredMotoristPDTotal": 0,
"uninsuredMotoristBITotal": 100,
"AUTO.instanceKey": "2006 Honda Odyssey",
"DRIVER.FN": "Joan",
"DRIVER.LN": "Smith"
},
"2015 Lexus LX250": {
"ID": "0",
"comprehensiveTotal": 500,
"rentalTotal": 40,
"medicalTotal": 10,
"roadsideTotal": 10,
"dedWaiverTotal": 10,
"uninsuredMotoristPDTotal": 0,
"uninsuredMotoristBITotal": 100,
"AUTO.instanceKey": "2015 Lexus LX250",
"DRIVER.FN": "Joan",
"DRIVER.LN": "Smith"
}
},
"displaySequence": -1
}
]
},
"insuredItems": {
"DRIVER": [{
"isPrimary": false,
"instanceKey": "Joan Smith",
"LN": "Smith",
"AGE": 20,
"FN": "Joan",
"GENDER": "Female",
"FirstName": "Joan",
"LastName": "Smith",
"partyId": "a0q1I000001emNeQAI"
},
{
"isPrimary": false,
"instanceKey": "John Smith",
"LN": "Smith",
"AGE": 30,
"FN": "John",
"GENDER": "Male",
"FirstName": "John",
"LastName": "Smith",
"partyId": "a0q1I000001emNfQAI"
},
],
"AUTO": [{
"autoLicNum": "Lexus",
"autoModel": "LX250",
"autoYear": 2015,
"instanceKey": "2015 Lexus LX250",
"BodyClass": "Sedan/Saloon",
"VehicleType": "PASSENGER CAR",
"isPrimary": true
},
{
"autoLicNum": "Honda",
"autoModel": "Odyssey",
"autoYear": 2006,
"instanceKey": "2006 Honda Odyssey",
"BodyClass": "Minivan",
"VehicleType": "MULTIPURPOSE PASSENGER VEHICLE (MPV)",
"isPrimary": true
}
]
},
"accountId": "0011I00000QknfjQAB",
"opportunityId": "0061I00000AV8gBQAT"
}El JSON dentro del inputKey incluye varios pares clave/valor que el servicio necesita para crear o actualizar un presupuesto.
Clave |
Valor |
|---|---|
|
El Id. de oportunidad generado. |
|
El Id. de cuenta generado. |
|
Opcional. La fecha en la que caduca la política. |
|
La fecha en la que la política entra en vigor. |
|
Una matriz de registros que siguen el modelo de estructura JSON del producto. Se creará o modificará una partida de presupuesto raíz para cada registro de producto en la matriz. Para obtener información acerca de la estructura y el contenido de un producto, consulte el Modelo de estructura JSON de producto. |
|
Opcional. La clave de |
|
Pares clave/valor de los elementos asegurados que el servicio utiliza para crear las partidas de presupuesto para elementos asegurados. |
Independientemente de que su presupuesto incluya una única instancia de un elemento asegurado o múltiples elementos asegurados, aplique formato al nodo insuredItems con una matriz de registros.
"insuredItems": {
"DRIVER": [{
"isPrimary": false,
"instanceKey": null,
"additionalFields": {},
"productCode": "DRIVER",
"productId": "01t1I000002fuByQAI",
"FN": null,
"GENDER": null,
"LN": null,
"partyId": null
}],
"AUTO": [{
"isPrimary": true,
"instanceKey": null,
"additionalFields": {},
"productCode": "AUTO",
"productId": "01t1I000002fuBtQAI",
"autoBrakes": false,
"est_annual_mileage": "10001-20000",
"autoLicNum": null,
"autoModel": null,
"autoStyle": null,
"autoVIN": null,
"autoYear": ""
}]
}Para una única instancia de un elemento asegurado que está directamente bajo el producto raíz en la jerarquía de productos, puede utilizar el formato en este ejemplo. Los registros de insuredItems aquí incluyen los elementos asegurados y los valores que el usuario seleccionó para cada uno. Admitimos este JSON de entrada pero es de una versión anterior y no lo recomendamos.
"insuredItems": {
"smallBusiness": {
"protectionClass": 3,
"yearBuilding": 2000,
"yearWiring": 2000,
"yearRoof": 2003,
"yearPlumbing": 2000,
"yearBusiness": 2002,
"businessParkingLot": "no",
"legalForm": "sole",
"busLocation": "standalone",
"busHours": 8,
"busEmployees": 24,
"bldgSprinker": "Y",
"bldgFrame": "frame",
"bldgAlarm": "none",
"ageWiring": 18,
"ageRoof": 15,
"agePlumbing": 18,
"ageBusiness": 16,
"ageBuilding": 18,
"SIC": "5451",
"SICCategory": "Food Stores"Para nuevos presupuestos, si createOpportunity es true y no se proporciona ninguna opportunityId, el servicio crea un nuevo registro Oportunidad utilizando el nodo JSON OpportunityDetails desde el inputKey. Utilice el OpportunityDetails:FieldName de formato de entrada. Este es un ejemplo de un nodo de OpportunityDetails.
"OpportunityDetails": {
"AccountId": "0015f00000DSFgqAAH",
"Name": "Auto Quote: Rachel Adams (2022-01-03)",
"StageName": "Qualification",
"CloseDate": "2022-01-03"
},preTransformBundle Alternative
De manera alternativa, puede definir una transformación DataRaptor que asigne los datos que se pasan al JSON de entrada al formato que necesita el servicio. Este JSON de salida de DataRaptor es el JSON de userInputs definido en la ficha API de la vista de producto. Establezca la opción preTransformBundle en el nombre del DataRaptor para que el servicio utilice el DataRaptor.
JSON de salida
El servicio devuelve el Id. de presupuesto del presupuesto recién creado. También devuelve detalles de presupuesto si la entrada de returnQuote es true y el Id. de oportunidad si createOpportunity es true y no se proporciona opportunityId.
{
"quoteDetail": {
"stmpbhins04__PrimaryRootItemId__c": "0QLR00000000e3NOAQ",
"stmpbhins04__TotalPremiumforTerm__c": 2000,
"stmpbhins04__MonthlyPremium__c": 166.66666666666666,
"stmpbhins04__StandardPremium__c": 2000,
"Id": "0Q0R00000000WplKAE",
"stmpbhins04__EndDate__c": "2022-05-04",
"stmpbhins04__EffectiveDate__c": "2021-05-05",
"stmpbhins04__Term__c": "Annual",
"Name": "Auto Root",
"OpportunityId": "006R0000002xk8QIAQ",
"Pricebook2Id": "01sR0000001GULqIAO"
},
"quoteId": "0Q0R00000000WplKAE",
"opportunityId": "006R0000002xk8QIAQ",
"error": "OK"
}