Ti trovi qui:
InsQuoteService:createUpdateQuoteFromExternal
Crea un preventivo o aggiorna un preventivo esistente con nuove informazioni tramite una chiamata API in entrata da un sistema esterno.
Classe:InsQuoteService
Metodo: createUpdateQuoteFromExternal
Funzionamento
-
Riceve l'oggetto JSON.
-
Utilizza il
sourceSystemIdentifierper determinare se creare o aggiornare un preventivo esistente. -
Utilizza il
PricebookId, ovvero un listino prezzi denominato Standard. -
Se il servizio trova un preventivo con il
sourceSystemIdentifierspecificato, aggiorna l'oggetto preventivo:-
Utilizza i prodotti radice definiti in
quoteLinesper aggiungere, aggiornare o eliminare le voci del preventivo radice. Il servizio utilizza ilsourceSystemIdentifierper identificare la radice.Aggiunge i record in
quoteLinesche non sono nel preventivo. Aggiorna i record inquoteLinesesistenti nel preventivo. Elimina i record neiquoteLinespresenti nel preventivo ma non nelle quoteLines. -
Per ogni radice, il servizio utilizza le coperture, le voci assicurate e le parti definite al
childLinesdi aggiungere, aggiornare o eliminare le coperture radice, le voci assicurate e le parti. Il servizio utilizza ilsourceSystemIdentifierper identificare la riga da aggiornare.Aggiunge i record in
childLinesche non sono nel preventivo. Aggiorna i record inchildLinesesistenti nel preventivo. Elimina i record neichildLinespresenti nel Preventivo ma non inchildLines. -
Per ogni copertura radice, voce assicurata e parte, il servizio utilizza le coperture, voce assicurata e parte nel
childLinesper aggiungere, aggiornare o eliminare le rispettive coperture, voce assicurata e parte. Il servizio utilizzasourceSystemIdentifierper identificare la riga da aggiornare.Aggiunge i record in
childLinesche non sono nel preventivo. Aggiorna i record inchildLinesesistenti nel preventivo. Elimina i record neichildLinespresenti nel Preventivo ma non inchildLines. -
I record
QuoteLineItemdell'elemento assicurato principale eQuoteLineItemdell'assicurato controllato hanno una relazione molti:molti. Queste relazioni sono memorizzate nell'oggetto Relazione voce preventivo (QuoteItemRelationship__c). Se unQuoteLineItemvoce assicurato ha relazioni con più recordQuoteLineItemparte assicurata, il servizio utilizza il campoPrimaryChildLineItemId__cper determinare quale di queste relazioni è la principale.Ad esempio, sia Joan Smith che John Smith guidano la Lexus 250; Joan Smith è impostata come guida principale. La Lexus 250
QuoteLineItemhaPrimaryChildLineItemId__cche puntano allaQuoteLineItemdi Joan Smith. -
Se due voci assicurate hanno lo stesso assicurato figlio, ogni voce assicurata deve avere una voce nel rispettivo
childLinesper l'assicurato figlio. Per entrambe le voci, devono avere lo stessosourceSystemIdentifier.Ad esempio, sia la Lexus 250 che la Honda Odyssey hanno Bob Jones come pilota. La Lexus 250 ha Bob Jones con
sourceSystemIdentifiercome BobJones nel suochildLines. Honda Odyssey ha un Bob Jones consourceSystemIdentifiercome BobJones nel suochildLines. -
ParentItemId__c e ParentItemId2__c di
childLinespuntano all'ID della radice. -
Il
SubParentItemId__cdelle coperture figli punta alla voce principale assicurata.
-
-
Se il servizio non trova un preventivo con il
sourceSystemIdentifierspecificato, crea l'oggetto preventivo che include le voci come spiegato di seguito:-
Utilizza i prodotti radice definiti in
quoteLinesper creare le voci preventivo radice. -
Per ogni radice, utilizza le coperture, le voci assicurate e le parti definite al
childLinesdi creare le coperture radice, le voci assicurate e le parti. -
Per ogni copertura radice, voci e parti assicurate, utilizza le coperture, le voci assicurate e le parti definite nei rispettivi
childLinesper creare le coperture, le voci assicurate e le parti. -
I record
QuoteLineItemdell'elemento assicurato principale eQuoteLineItemdell'assicurato controllato hanno una relazione molti:molti. Queste relazioni sono memorizzate nell'oggetto Relazione voce preventivo (QuoteItemRelationship__c). Se unQuoteLineItemvoce assicurata ha relazioni con più recordQuoteLineItemparte assicurata, il servizio utilizza il campoPrimaryChildLineItemId__cper determinare quale di queste relazioni è la principale.Ad esempio, sia Joan Smith che John Smith guidano la Lexus 250; Joan Smith è impostata come guida principale. La Lexus 250
QuoteLineItemhaPrimaryChildLineItemId__cche puntano allaQuoteLineItemdi Joan Smith. -
Se due voci assicurate hanno lo stesso assicurato figlio, ogni voce assicurata deve essere iscritta nel rispettivo
childLinesper l'assicurato figlio. Per entrambe le voci, devono avere lo stessosourceSystemIdentifier.Ad esempio, sia la Lexus 250 che la Honda Odyssey hanno Bob Jones come pilota. La Lexus 250 ha Bob Jones con
sourceSystemIdentifiercome BobJones nelle suechildLine. Honda Odyssey ha Bob Jones consourceSystemIdentifiercome BobJones nel suochildLines. -
ParentItemId__ceParentItemId2__cdichildLinespuntano all'ID della radice. -
I
SubParentItemId__cdelle coperture figli puntano alla voce principale assicurata.
-
-
Restituisce un
Quote.Ide l'elenco degli errori riscontrati nel JSON di output.
Input
Input |
Descrizione |
|---|---|
|
Contiene tutte le informazioni per la creazione del preventivo. Per ulteriori informazioni sulle coppie chiave-valore, vedere la descrizione dei nodi JSON. |
Descrizione dei nodi JSON |
|
|
Un elenco di record. Il servizio elabora un solo preventivo alla volta. |
nodi preventivo |
|
|
Obbligatorio. ID dell'opportunità. |
|
Obbligatorio. Identificatore univoco del record di un sistema esterno a Salesforce per identificare il preventivo da aggiornare. |
|
Nome API del tipo di record preventivo. |
|
Coppia chiave-valore degli altri campi |
|
L'elenco dei prodotti radice. |
Nodi quoteLines |
|
|
Obbligatorio. Identificatore univoco del record di un sistema esterno a Salesforce per identificare quale QuoteLineItems radice aggiungere, aggiornare o eliminare in Salesforce. |
|
Chiave istanza in |
|
Obbligatorio. Codice prodotto radice. |
|
Obbligatorio. Tipo di record prodotto o specifica. |
|
Attributi del prodotto selezionati. |
|
Coppia chiave-valore degli altri campi |
|
Root delle coperture dei prodotti, degli articoli assicurati e degli assicurati. |
Nodi childLines |
|
|
Obbligatorio. Identificatore univoco del record di un sistema esterno a Salesforce per identificare le coperture principali, le voci assicurate e gli assicurati da aggiungere, aggiornare o eliminare in Salesforce. |
|
Identifica più istanze della stessa specifica. Chiave istanza in |
|
Obbligatorio. Codice prodotto delle coperture radice, degli articoli assicurati e degli assicurati. |
|
Obbligatorio. Tipo di record prodotto o specifica. |
|
Attributi del prodotto selezionati. |
|
Coppia chiave-valore degli altri campi |
|
Coperture minori, articoli assicurati e assicurati. |
Nodi childLines |
|
|
Obbligatorio. Identificatore univoco del record di un sistema esterno a Salesforce per identificare le coperture controllate, gli elementi assicurati e gli assicurati da aggiungere, aggiornare o eliminare in Salesforce. Se due voci assicurate hanno lo stesso assicurato figlio, ogni voce assicurata deve essere iscritta nel rispettivo |
|
Identifica più istanze della stessa specifica. Chiave istanza in |
|
Obbligatorio. Il codice prodotto delle coperture figlio, degli articoli assicurati e del prodotto assicurati. |
|
Obbligatorio. Tipo di record prodotto o specifica. |
|
Attributi del prodotto selezionati. |
|
Coppia chiave-valore degli altri campi |
Input JSON
Di seguito è riportato il formato del JSON di input:
{
"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"
}
]
}
}
]
}
}
]
}
}
]
}
}
]
}
}
]
}
}Di seguito è riportato un esempio di JSON di input:
{
"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 di output
Restituisce il Quote.Id del preventivo creato o aggiornato nel JSON di output e l'elenco degli errori riscontrati.
Di seguito è riportato il formato del JSON di output:
{
"errors":[
"error1",
"error2",
"error3"
],
"quoteId":"Quote.Id"
}Di seguito è riportato un esempio di JSON di output:
{
"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"
}