Vous êtes ici :
InsQuoteService:createUpdateQuote
Utilisez ce service pour créer un devis pour de nouvelles affaires, mettre à jour un devis existant avec de nouvelles informations ou créer un devis de recommandation. Pour les mises à jour, la quoteId du devis à mettre à jour doit être incluse dans les options distantes.
Avant l'exécution de ce service, le système exécute une vérification de l'utilisateur invité.
Ce service peut être utilisé par des utilisateurs invités. Un utilisateur invité qui exécute une tâche OmniScript, Procédure d'intégration ou Interface utilisateur peut continuer. Ce service est exécuté. Cependant, les quoteId et les opportunityId sont cryptés dans ces cas. Par conséquent, les utilisateurs invités ne peuvent pas afficher ces ID.
Utilisez le service InsQuoteService:createUpdateQuote pour mettre à jour le devis et les éléments de ligne de devis, au lieu d'utiliser le mappeur de données Omnistudio.
Fonctionnement
-
Le service recherche le
inputKeydans le JSON d'entrée. Le nœudinputKeycontient les informations dont le service a besoin pour créer ou mettre à jour un devis. Les informations requises pour ce service comprennent :-
opportunityId -
endDate(facultatif) -
effectiveDate -
Enregistrements
productConfigurationDetail -
instanceKeyRequis pour identifier plusieurs instances de la même spécification
-
insuredItemsnœudDans ce nœud, le service attend une liste de spécifications d'articles assurés et de spécifications de partie assurée, en utilisant les
productCodede chaque spécification comme clé. Term__cUtilisez-le pour mettre à jour le champ Term__c du Devis.
-
-
Utilise les informations du JSON d'entrée pour créer le devis.
-
Renvoie un ID de devis dans le JSON de sortie.
-
Crée un objet Devis qui inclut les éléments de ligne suivants :
-
Utilise les produits racine définis dans
productConfigurationDetailpour créer ou mettre à jour les éléments de ligne de devis racine. -
Lors de la mise à jour d'un devis existant, les enregistrements du
productConfigurationDetailqui ne figurent pas encore dans le devis sont ajoutés et ceux qui figurent déjà dans le devis sont mis à jour. -
Utilise les spécifications d'articles assurés, les spécifications de partie assurée et les spécifications de couverture en tant qu'éléments de ligne de devis :
ParentItemId__c = rootItem.Id. -
L'élément de ligne de devis de l'élément assuré principal et les lignes de devis de la partie assurée enfant ont une relation plusieurs:plusieurs. Ces relations sont stockées dans l'objet Relation d'élément de devis. Si une ligne de devis d'élément assuré a des relations avec plusieurs lignes de devis de partie assurée, le champ
PrimaryChildLineitemId__cest utilisé pour 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 étant le conducteur principal. L'élément de ligne de devis Lexus 250 a des
PrimaryChildLineItemId__cpointant vers l'élément de ligne de devis de Joan Smith. Tous lesParentItemId2__cdes éléments de ligne de devis pointent vers lesSubParentItemId__cdes couvertures enfantsrootItem.Id.pointent vers l'élément principal assuré. Les champs Élément de ligne de devis de l'élément assuré et Élément deItemName__cde ligne de devis de la partie assurée sont stockés avec leinstanceKeyde cet élément. -
L'élément de ligne de devis de l'élément principal assuré inclut le prix.
-
-
Pour les nouveaux devis, si
createOpportunityesttrueet qu'aucunopportunityIdn'est fourni, crée un enregistrement Opportunité en utilisant le nœud JSONOpportunityDetailsde lainputKey. -
Si
calculateCommissionesttrue, appelleInsCommissionService.processQuoteCommission, qui prépare l'entrée pour le serviceInsCommissionService.calculate. Lorsque le service de calcul a traité l'entrée, il stocke la valeur de commission calculée dansQuote.CommissionAmount__c.
Tous les utilisateurs qui appellent InsQuoteService:createUpdateQuote doivent disposer de l'autorisation Lire sur tous les champs de l'ensemble de champs Détails du devis si l'ensemble de champs est ajouté à l'objet Élément de ligne de devis.
Si l'ensemble de champs Détails du devis n'est pas ajouté à l'objet Élément de ligne de devis, tous les champs, y compris les champs personnalisés, sont lisibles pour les utilisateurs.
Suppléments
Voici comment ce service fonctionne avec les suppléments (taxes et frais) :
-
Si le champ
taxesAndFeesest spécifié dans un enregistrement JSON, un enregistrementQuotePricingAdjustment__ccorrespondant est conservé pour chaque élément de la listetaxesAndFees. -
Si le champ
taxAmountest spécifié dans un enregistrement JSON, le champTaxAmount__cest défini sur la valeur du champtaxAmountdans leQuoteLineItemcréé. -
Si le champ
feeAmountest spécifié dans un enregistrement JSON, le champFeeAmount__cest défini sur la valeur du champfeeAmountdans leQuoteLineItemcréé.
Ajout de champs supplémentaires aux éléments de ligne de devis
Si vous avez besoin de champs supplémentaires écrits dans Élément de ligne de devis par ce service, vous devez d'abord appeler le service InsProductJSONService:trimOffAttributeCategory.
Le flux qui permet ce fonctionnement dans un OmniScript ou une procédure d'intégration est le suivant :
-
Étapes de configuration du produit
-
Appel de service InsProductJSONService:trimOffAttributeCategory avec selectedValueAsObject défini sur true
-
Transformation DataRaptor qui peut inclure un mappage entre des attributs et vos champs supplémentaires dans l'objet Élément de ligne de devis
-
Appel de service InsQuoteService:createUpdateQuote
Options distantes
Option |
Description |
|---|---|
|
Si cette option est définie sur Cette option prend en charge les relations parent > enfant et parent > enfant > élément assuré petit-enfant. |
|
Obligatoire. Une clé JSON à partir de laquelle ce service extrait les informations nécessaires pour créer ou mettre à jour un devis. N'utilisez pas % pour entourer la valeur de cette clé. Cette clé représente un nœud JSON, pas une variable. Comme cette clé représente un nœud JSON et non un chemin, n'utilisez pas la notation parent:childnode:childnode path. Pour accéder au chemin de données droit, saisissez-le dans le champ Chemin JSON Envoyer de la section Transformation Envoyer/Réponser lorsque vous ajoutez cette paire clé/valeur à une étape OmniScript. |
|
Lorsqu'il est défini sur Utilisez cette option pour créer un devis multi-instances volumineux via plusieurs appels de serveur, où le nouvel ensemble d'éléments de ligne de devis des instances est inséré dans le devis existant de chaque appel. |
|
Facultatif. L'ID d'un devis existant que ce service met à jour, basé sur des informations nouvelles ou mises à jour. Utilisé lorsque le service doit mettre à jour un devis existant. |
|
Facultatif. Un indicateur booléen pour indiquer si le devis est un devis multiracine. La valeur par défaut est |
|
Lorsqu'il est défini sur |
|
Lorsqu'il est défini sur |
|
Obligatoire. Le nom du catalogue de prix associé à la spécification du produit. Salesforce exige que les produits utilisés dans les éléments de ligne de devis contiennent une entrée au catalogue de prix. |
|
Lorsqu'il est défini sur Lorsqu'il est défini sur Remarque
Si vous définissez cette option sur false, vous devez également ajouter une ligne au modèle d'interface utilisateur En |
|
Lorsqu'il est défini sur |
|
Lorsqu'il est défini sur |
|
Lorsqu'il est défini sur Lorsqu'il est défini sur Remarque
Si vous définissez cette option sur true, vous devez également saisir au moins l'une des valeurs de code producteur ou production : |
|
Facultatif. L'ID de producteur de transformation, c'est-à-dire le producteur utilisé pour récupérer le |
|
Facultatif. L'ID de code de production. |
|
Facultatif. Le nom de code de production a été transmis au service InsCommissionService.calculate. Si vous ne saisissez pas de |
runEligibilityRequiredDefaultSelectedRules
|
Facultatif. Les valeurs par défaut sont Détermine si les règles Éligibilité et Sélectionné par défaut sont exécutées. |
runRelationshipRules
|
Facultatif. Les valeurs par défaut sont Détermine si les règles de relation sont exécutées. |
runSelectedValivationRules
|
Facultatif. Les valeurs par défaut sont Détermine si les règles Sélectionner la validation sont exécutées. |
JSON d'entrée
Ce service recherche la valeur du inputKey. Accédez à l'onglet API de la spécification produit pour trouver le JSON d'entrée dont vous avez besoin pour ce service.
Dans cet exemple, 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"
}Le JSON dans le inputKey inclut plusieurs paires clé/valeur dont le service a besoin pour créer ou mettre à jour un devis.
Clé |
Valeur |
|---|---|
|
L'ID d'opportunité généré. |
|
L'ID de compte généré. |
|
Facultatif. La date à laquelle la police expire. |
|
La date à laquelle la police entre en vigueur. |
|
Un groupe d'enregistrements qui suivent le modèle de structure JSON du produit. Un élément de ligne de devis racine est créé ou modifié pour chaque enregistrement de produit du tableau. Pour plus d'informations sur la structure et le contenu d'un produit, consultez Modèle de structure JSON produit. |
|
Facultatif. La clé de |
|
Les paires clé/valeur des éléments assurés que le service utilise pour créer les éléments de ligne de devis des éléments assurés. |
Que votre devis contienne une seule instance d'un élément assuré ou plusieurs éléments assurés, mettez en forme le nœud insuredItems avec un tableau d'enregistrements.
"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": ""
}]
}Pour une instance unique d'un article assuré directement sous le produit racine dans la hiérarchie des produits, vous pouvez utiliser le format de cet exemple. Les enregistrements de insuredItems ici incluent les articles assurés et les valeurs que l'utilisateur a sélectionnées pour chacun d'eux. Nous prenons en charge ce JSON d'entrée, mais il provient d'une version antérieure et nous ne le recommandons pas.
"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"Pour les nouveaux devis, si createOpportunity est true et qu'aucun opportunityId n'est fourni, le service crée un enregistrement Opportunité en utilisant le nœud JSON OpportunityDetails du inputKey. Utilisez le OpportunityDetails:FieldName de format d'entrée. Voici un exemple de nœud OpportunityDetails.
"OpportunityDetails": {
"AccountId": "0015f00000DSFgqAAH",
"Name": "Auto Quote: Rachel Adams (2022-01-03)",
"StageName": "Qualification",
"CloseDate": "2022-01-03"
},Alternative preTransformBundle
Alternativement, vous pouvez définir une transformation DataRaptor qui mappe les données transmises dans le JSON d'entrée sous le format dont le service a besoin. Le JSON de sortie de ce DataRaptor est le JSON userInputs défini sous l'onglet API de la vue du produit. Définissez l'option preTransformBundle sur le nom du DataRaptor pour permettre au service d'utiliser le DataRaptor.
JSON de sortie
Le service renvoie l'ID du devis créé. Il renvoie également les détails du devis si l'entrée returnQuote est true, et l'ID d'opportunité si createOpportunity est true et si aucune opportunityId n'est fournie.
{
"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"
}