Vous êtes ici :
InsQuoteService:createUpdateQuoteFromExternal
Crée un devis ou met à jour un devis existant avec de nouvelles informations via un appel d'API entrant depuis un système externe.
Classe :InsQuoteService
Méthode : createUpdateQuoteFromExternal
Fonctionnement
-
Reçoit l'objet JSON.
-
Utilise le
sourceSystemIdentifierpour déterminer si un devis existant doit être créé ou mis à jour. -
Utilise le
PricebookId, qui est un catalogue de prix nommé Standard. -
Si le service trouve un Devis avec le
sourceSystemIdentifierdonné, il met à jour l'objet Devis :-
Utilise les produits racine définis dans
quoteLinespour ajouter, mettre à jour ou supprimer les éléments de ligne de devis racine. Le service utilise lesourceSystemIdentifierpour identifier la racine.Ajoute les enregistrements dans les
quoteLinesqui ne figurent pas dans le Devis. Met à jour les enregistrements dans lesquoteLinesexistants dans le Devis. Supprime les enregistrements enquoteLinesqui sont dans le Devis, mais pas dans les quoteLines. -
Pour chaque racine, le service utilise les couvertures, les éléments assurés et les parties définies dans
childLinespour ajouter, mettre à jour ou supprimer les couvertures racine, les éléments assurés et les parties. Le service utilise lesourceSystemIdentifierpour identifier la ligne à mettre à jour.Ajoute les enregistrements dans les
childLinesqui ne figurent pas dans le Devis. Met à jour les enregistrements dans leschildLinesexistants dans le Devis. Supprime les enregistrements danschildLinesqui figurent dans le Devis, mais pas danschildLines. -
Pour chaque couverture racine, élément assuré et partie, le service utilise les couvertures, éléments assurés et parties dans le
childLinespour ajouter, mettre à jour ou supprimer les couvertures, éléments assurés et parties respectives. Le service utilisesourceSystemIdentifierpour identifier la ligne à mettre à jour.Ajoute les enregistrements dans les
childLinesqui ne figurent pas dans le Devis. Met à jour les enregistrements dans leschildLinesexistants dans le Devis. Supprime les enregistrements danschildLinesqui figurent dans le Devis, mais pas danschildLines. -
Les enregistrements de
QuoteLineItemde l'élément assuré principal et deQuoteLineItemde partie assurée enfant ont une relation plusieurs-à-plusieurs. Ces relations sont stockées dans l'objet Relation d'élément de devis (QuoteItemRelationship__c). Si unQuoteLineItemd'article assuré a des relations avec plusieurs enregistrements deQuoteLineItemde partie assurée, le service utilise le champPrimaryChildLineItemId__cpour déterminer laquelle de ces relations est la principale.Par exemple, Joan Smith et John Smith sont conducteurs de Lexus 250 ; Joan Smith est définie comme le conducteur principal. La
QuoteLineItemLexus 250 a desPrimaryChildLineItemId__cpointant vers laQuoteLineItemde Joan Smith. -
Si deux articles assurés ont la même partie assurée enfant, chaque article assuré doit inclure une entrée dans le
childLinescorrespondant à l'enfant assuré. Pour les deux entrées, ils doivent avoir le mêmesourceSystemIdentifier.Par exemple, les Lexus 250 et Honda Odyssey ont Bob Jones comme pilote. La Lexus 250 a Bob Jones avec
sourceSystemIdentifiercomme BobJones dans sonchildLines. Honda Odyssey a un Bob Jones avecsourceSystemIdentifiercomme BobJones dans sonchildLines. -
ParentItemId__c et ParentItemId2__c de
childLinespointent vers l'ID de la racine. -
La
SubParentItemId__cdes couvertures enfants pointe vers l'élément principal assuré.
-
-
Si le service ne trouve pas de devis avec le
sourceSystemIdentifierdonné, il crée l'objet devis qui inclut des éléments de ligne comme expliqué ici :-
Utilise les produits racine définis dans
quoteLinespour créer les éléments de ligne de devis racine. -
Pour chaque racine, utilise les couvertures, les éléments assurés et les parties définies dans
childLinespour créer les couvertures racine, les éléments assurés et les parties. -
Pour chaque couverture racine, éléments assurés et parties, utilise les couvertures, éléments assurés et parties définies dans leur
childLinespour créer leurs couvertures, éléments assurés et parties. -
Les enregistrements de
QuoteLineItemde l'élément assuré principal et deQuoteLineItemde partie assurée enfant ont une relation plusieurs-à-plusieurs. Ces relations sont stockées dans l'objet Relation d'élément de devis (QuoteItemRelationship__c). Si unQuoteLineItemd'article assuré a des relations avec plusieurs enregistrements deQuoteLineItemde partie assurée, le service utilise le champPrimaryChildLineItemId__cpour déterminer laquelle de ces relations est la principale.Par exemple, Joan Smith et John Smith sont conducteurs de Lexus 250 ; Joan Smith est définie comme le conducteur principal. La
QuoteLineItemLexus 250 a desPrimaryChildLineItemId__cpointant vers laQuoteLineItemde Joan Smith. -
Si deux articles assurés ont la même partie assurée enfant, chaque article assuré doit être inscrit dans le
childLinescorrespondant à la partie assurée enfant. Pour les deux entrées, ils doivent avoir le mêmesourceSystemIdentifier.Par exemple, les Lexus 250 et Honda Odyssey ont Bob Jones comme pilote. La Lexus 250 a Bob Jones avec
sourceSystemIdentifiercomme BobJones dans seschildLines. Honda Odyssey a Bob Jones avecsourceSystemIdentifiercomme BobJones dans sonchildLines. -
ParentItemId__cetParentItemId2__cdechildLinespointent vers l'ID de la racine. -
Les
SubParentItemId__cdes couvertures enfants pointent vers l'élément principal assuré.
-
-
Renvoie un
Quote.Idet la liste des erreurs rencontrées dans le JSON de sortie.
Entrées
Entrée |
Description |
|---|---|
|
Contient toutes les informations pour la création du devis. Pour plus d'informations sur les paires clé-valeur, consultez Description des nœuds JSON. |
Description des nœuds JSON |
|
|
Une liste d'enregistrements. Le service traite un seul devis à la fois. |
nœuds de devis |
|
|
Obligatoire. L'ID de l'opportunité. |
|
Obligatoire. Identificateur d'enregistrement unique d'un système extérieur à Salesforce pour identifier le devis à mettre à jour. |
|
Le nom d'API du type d'enregistrement de devis. |
|
La paire clé-valeur des autres champs de |
|
La liste des produits racine. |
Nœuds quoteLines |
|
|
Obligatoire. Identificateur d'enregistrement unique d'un système extérieur à Salesforce pour identifier les QuoteLineItems racine à ajouter, mettre à jour ou supprimer dans Salesforce. |
|
Clé d'instance en |
|
Obligatoire. Code produit racine. |
|
Obligatoire. Type d'enregistrement Produit ou Spécification. |
|
Les attributs de produit sélectionnés. |
|
La paire clé-valeur des autres champs de |
|
Couvertures de produits racine, articles assurés et parties assurées. |
nœuds childLines |
|
|
Obligatoire. Identificateur d'enregistrement unique provenant d'un système extérieur à Salesforce pour identifier les couvertures racine, les éléments assurés et les parties assurées à ajouter, mettre à jour ou supprimer dans Salesforce. |
|
Identifie plusieurs instances de la même spécification. Clé d'instance en |
|
Obligatoire. Le code produit des couvertures racine, des articles assurés et des parties assurées. |
|
Obligatoire. Type d'enregistrement Produit ou Spécification. |
|
Les attributs de produit sélectionnés. |
|
La paire clé-valeur des autres champs de |
|
Couvertures enfants, articles assurés et parties assurées. |
nœuds childLines |
|
|
Obligatoire. Identificateur d'enregistrement unique provenant d'un système extérieur à Salesforce pour identifier les couvertures enfants, les éléments assurés et les parties assurées à ajouter, mettre à jour ou supprimer dans Salesforce. Si deux articles assurés ont la même partie assurée enfant, chaque article assuré doit être inscrit dans le |
|
Identifie plusieurs instances de la même spécification. Clé d'instance en |
|
Obligatoire. Le code produit des couvertures enfants, des articles assurés et du produit des parties assurées. |
|
Obligatoire. Type d'enregistrement Produit ou Spécification. |
|
Les attributs de produit sélectionnés. |
|
La paire clé-valeur des autres champs de |
JSON d'entrée
Voici le format du JSON d'entrée :
{
"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"
}
]
}
}
]
}
}
]
}
}
]
}
}
]
}
}
]
}
}Voici un exemple de JSON d'entrée :
{
"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 sortie
Renvoie la Quote.Id du devis créé ou mis à jour dans le JSON de sortie et la liste des erreurs rencontrées.
Voici le format du JSON de sortie :
{
"errors":[
"error1",
"error2",
"error3"
],
"quoteId":"Quote.Id"
}Voici un exemple de JSON de sortie :
{
"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"
}