Sie befinden sich hier:
InsQuoteService:createUpdateQuote
Verwenden Sie diesen Service, um ein Angebot für neue Geschäfte zu erstellen, ein vorhandenes Angebot mit neuen Informationen zu aktualisieren oder ein Bestätigungsangebot zu erstellen. Bei Aktualisierungen muss die quoteId des zu aktualisierenden Angebots in den Remote-Optionen enthalten sein.
Bevor dieser Service ausgeführt wird, führt das System eine Gastbenutzerüberprüfung aus.
Dieser Service kann von Gastbenutzern verwendet werden. Gastbenutzer, die ein OmniScript, ein Integrationsverfahren oder eine Benutzeroberflächenaufgabe ausführen, können diesen Service fortsetzen. In diesen Fällen werden die quoteId und opportunityId jedoch verschlüsselt, sodass Gastbenutzer diese IDs nicht sehen können.
Verwenden Sie den Service "InsQuoteService:createUpdateQuote", um das Angebot und die Angebotsbelegposten zu aktualisieren, statt die OmniStudio-Datenzuordnung zu verwenden.
Funktionsweise
-
Der Service durchsucht die Eingabe-JSON nach dem
inputKey. DerinputKey-Knoten enthält die Informationen, die der Service zum Erstellen oder Aktualisieren eines Angebots benötigt. Zu den Informationen, die dieser Service benötigt, zählen:-
opportunityId -
endDate(optional) -
effectiveDate -
productConfigurationDetailDatensätze -
instanceKeyErforderlich, um mehrere Instanzen derselben Spezifikation zu identifizieren
-
Knoten
insuredItemsInnerhalb dieses Knotens erwartet der Service eine Liste der Spezifikationen des versicherten Artikels und der Spezifikationen des versicherten Beteiligten, wobei die
productCodeder einzelnen Spezifikationen als Schlüssel verwendet werden. Term__cWird verwendet, um das Feld Term__c des Angebots zu aktualisieren.
-
-
Verwendet die Informationen aus der Eingabe-JSON zum Erstellen des Angebots.
-
Gibt eine Angebots-ID in der Ausgabe-JSON zurück.
-
Erstellt ein Angebotsobjekt, das die folgenden Belegposten enthält:
-
Verwendet die in
productConfigurationDetaildefinierten Stammprodukte zum Erstellen oder Aktualisieren der Stamm-Angebotsbelegposten. -
Beim Aktualisieren eines vorhandenen Angebots werden Datensätze im
productConfigurationDetailhinzugefügt, die sich noch nicht im Angebot befinden, und die bereits im Angebot enthaltenen Datensätze werden aktualisiert. -
Verwendet Spezifikationen für Versicherte, Spezifikationen für Versicherte und Abdeckungsspezifikationen als Angebotsbelegposten:
ParentItemId__c = rootItem.Idhinzu. -
Der Angebotsbelegposten des primären Versicherten und die Angebotsbelegposten des untergeordneten Versicherten stehen in einer n:n-Beziehung. Diese Beziehungen werden im Objekt "Angebotspostenbeziehung" gespeichert. Wenn ein Versichertenartikel-Angebotsbelegposten Beziehungen zu mehreren Versicherten-Angebotsbelegposten aufweist, wird anhand des
PrimaryChildLineitemId__cbestimmt, welche dieser Beziehungen die primäre ist.Joan Smith und John Smith sind beispielsweise Treiber von Lexus 250. Joan Smith ist als primärer Treiber festgelegt. Der Angebotsbelegposten Lexus 250 weist
PrimaryChildLineItemId__cauf, die auf den Angebotsbelegposten von Joan Smith verweisen. AlleParentItemId2__cder Angebotsbelegposten verweisen auf dieSubParentItemId__cderrootItem.Id.untergeordneten Abdeckungen auf den primären versicherten Posten. Die Felder "Angebotsbelegposten des Versicherten" und "ItemName__cdes Angebotsbelegpostens des Versicherten" werden mit deminstanceKeydieses Postens gespeichert. -
Der Angebotsbelegposten des primären versicherten Postens enthält den Preis.
-
-
Wenn "
createOpportunity" für neue Angebotetrueist und keineopportunityIdangegeben wird, wird ein Opportunity-Datensatz mithilfe des JSON-Knotens "OpportunityDetails" aus deminputKeyerstellt. -
Wenn
calculateCommissiontrueist, wirdInsCommissionService.processQuoteCommissionaufgerufen, wodurch die Eingabe für denInsCommissionService.calculatevorbereitet wird. Nachdem der Berechnungsservice die Eingabe verarbeitet hat, wird der berechnete Provisionswert inQuote.CommissionAmount__cgespeichert.
Alle Benutzer, die InsQuoteService:createUpdateQuote aufrufen, müssen über die Berechtigung "Lesen" für alle Felder im Feldset "Angebotsdetails" verfügen, wenn das Feldset dem Objekt "Angebotsbelegposten" hinzugefügt wird.
Wenn das Feldset "Angebotsdetails" dem Objekt "Angebotsbelegposten" nicht hinzugefügt wird, sind alle Felder, einschließlich benutzerdefinierter Felder, für Benutzer lesbar.
Zuschläge
So funktioniert dieser Service mit Zuschlägen (Steuern und Gebühren):
-
Wenn das Feld
taxesAndFeesin einem JSON-Datensatz angegeben ist, wird für jedes Element in dertaxesAndFeesein entsprechenderQuotePricingAdjustment__cbeibehalten. -
Wenn das Feld
taxAmountin einem JSON-Datensatz angegeben ist, wird das FeldTaxAmount__cauf den Wert des FeldstaxAmountim erstelltenQuoteLineItemfestgelegt. -
Wenn das Feld
feeAmountin einem JSON-Datensatz angegeben ist, wird das FeldFeeAmount__cauf den Wert des FeldsfeeAmountim erstelltenQuoteLineItemfestgelegt.
Hinzufügen zusätzlicher Felder zu Angebotsbelegposten
Wenn Sie zusätzliche Felder benötigen, die von diesem Service in den Angebotsbelegposten geschrieben werden, müssen Sie zunächst den Service InsProductJSONService:trimOffAttributeCategory aufrufen.
Der Flow, damit dies in einem OmniScript oder Integrationsverfahren funktioniert, ist:
-
Produktkonfigurationsschritte
-
Serviceaufruf "InsProductJSONService:trimOffAttributeCategory" mit ausgewähltem Objekt "ValueAsObject" auf true festgelegt
-
DataRaptor-Transformation, die eine Zuordnung zwischen Attributen und Ihren zusätzlichen Feldern im Objekt "Angebotsbelegposten" enthalten kann
-
InsQuoteService:createUpdateQuote-Serviceaufruf
Remote-Optionen
Option |
Beschreibung |
|---|---|
|
Wenn diese Option auf Diese Option unterstützt Beziehungen zwischen übergeordneten > untergeordneten und übergeordneten > untergeordneten > untergeordneten versicherten Artikeln. |
|
Pflichtangabe. Ein JSON-Schlüssel, aus dem dieser Service die erforderlichen Informationen abruft, um ein Angebot zu erstellen oder zu aktualisieren. Verwenden Sie nicht %, um den Wert dieses Schlüssels zu umgeben. Dieser Schlüssel stellt einen JSON-Knoten und keine Variable dar. Da dieser Schlüssel einen JSON-Knoten und keinen Pfad darstellt, sollten Sie die Pfadnotation parent:childnode:childnode nicht verwenden. Wenn Sie zum richtigen Datenpfad gelangen möchten, geben Sie ihn in das Feld JSON-Pfad senden im Abschnitt "Senden/Antworttransformation" ein, wenn Sie einem OmniScript-Schritt dieses Schlüssel-Wert-Paar hinzufügen. |
|
Wenn er auf Verwenden Sie diese Option, um ein großes Angebot mit mehreren Instanzen über mehrere Serveraufrufe zu erstellen, wobei der neue Satz an Angebotsbelegposten der Instanzen bei jedem Aufruf in das vorhandene Angebot eingefügt wird. |
|
Optional. Die ID eines vorhandenen Angebots, das dieser Service auf der Grundlage neuer oder aktualisierter Informationen aktualisiert. Wird verwendet, wenn der Service ein vorhandenes Angebot aktualisieren muss. |
|
Optional. Eine boolesche Kennzeichnung, die angibt, ob es sich bei dem Angebot um ein mehrzeiliges Angebot handelt. Der Standardwert ist |
|
Wenn er auf |
|
Wenn er auf |
|
Pflichtangabe. Der Name des Preisbuchs, das der Produktspezifikation zugeordnet ist. Salesforce schreibt vor, dass die in Angebotsbelegposten verwendeten Produkte über einen Preisbucheintrag verfügen müssen. |
|
Wenn er auf Wenn er auf Hinweis
Wenn Sie diese Option auf false festlegen, müssen Sie der Geben Sie |
|
Wenn er auf |
|
Wenn der Wert auf |
|
Wenn er auf Wenn der Service auf Hinweis
Wenn Sie diese Option auf "true" festlegen, müssen Sie auch mindestens einen der Produzenten- oder Produktionscodewerte eingeben: |
|
Optional. Die Verarbeitungsproduzenten-ID, d. h. der Produzent, der zum Abrufen der |
|
Optional. Die Produktionscode-ID. |
|
Optional. Der an den Service InsCommissionService.calculate übergebene Name des Produktionscodes. Wenn Sie keine |
runEligibilityRequiredDefaultSelectedRules
|
Optional. Der Standardwert ist Legt fest, ob die Regeln "Anspruch" und "Standardmäßig ausgewählt" ausgeführt werden. |
runRelationshipRules
|
Optional. Der Standardwert ist Legt fest, ob Beziehungsregeln ausgeführt werden. |
runSelectedValivationRules
|
Optional. Der Standardwert ist Legt fest, ob Validierungsregeln auswählen ausgeführt werden. |
Input JSON
Dieser Service sucht nach dem Wert des inputKey. Navigieren Sie in der Produktspezifikation zur Registerkarte "API", um die Eingabe-JSON zu finden, die Sie für diesen Service benötigen.
In diesem Beispiel ist 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"
}Die JSON im inputKey enthält mehrere Schlüssel-Wert-Paare, die der Service zum Erstellen oder Aktualisieren eines Angebots benötigt.
Schlüssel |
Wert |
|---|---|
|
Die generierte Opportunity-ID. |
|
Die generierte Account-ID. |
|
Optional. Das Datum, an dem die Richtlinie abläuft. |
|
Das Datum, an dem die Richtlinie in Kraft tritt. |
|
Eine Reihe von Datensätzen, die dem JSON-Strukturmodell des Produkts folgen. Für jeden Produktdatensatz im Array wird ein Stamm-Angebotsbelegposten erstellt oder geändert. Informationen zur Struktur und zum Inhalt eines Produkts finden Sie im JSON-Strukturmodell für Produkte. |
|
Optional. Der |
|
Die Schlüssel-Wert-Paare der versicherten Posten, die der Service zum Erstellen der Angebotsbelegposten für versicherte Posten verwendet. |
Formatieren Sie den insuredItems-Knoten mit einem Array von Datensätzen, unabhängig davon, ob Ihr Angebot eine einzelne Instanz eines versicherten Artikels oder mehrere versicherte Elemente enthält.
"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": ""
}]
}Für eine einzelne Instanz eines versicherten Artikels, der in der Produkthierarchie direkt unter dem Stammprodukt steht, können Sie das Format in diesem Beispiel verwenden. Die insuredItems enthalten hier die versicherten Posten und die vom Benutzer für jeden ausgewählten Werte. Diese Eingabe-JSON wird unterstützt, sie stammt jedoch aus einer früheren Version und wird nicht empfohlen.
"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"Wenn es sich bei "createOpportunity" um "true" handelt und keine opportunityId bereitgestellt wird, erstellt der Service bei neuen Angeboten einen neuen Opportunity-Datensatz mithilfe des JSON-Knotens "OpportunityDetails" aus dem inputKey. Verwenden Sie das Eingabeformat OpportunityDetails:FieldName. Hier ein Beispiel für einen OpportunityDetails-Knoten.
"OpportunityDetails": {
"AccountId": "0015f00000DSFgqAAH",
"Name": "Auto Quote: Rachel Adams (2022-01-03)",
"StageName": "Qualification",
"CloseDate": "2022-01-03"
},preTransformBundle Alternative
Alternativ können Sie eine DataRaptor-Transformation definieren, die die an die Eingabe-JSON übergebenen Daten dem Formular zuordnet, das der Service benötigt. Die Ausgabe-JSON dieses DataRaptor ist die userInputs-JSON, die auf der API-Registerkarte der Produktansicht definiert ist. Legen Sie die Option "preTransformBundle" auf den Namen des DataRaptors fest, damit der Service den DataRaptor verwendet.
Ausgabe-JSON
Der Service gibt die Angebots-ID des neu erstellten Angebots zurück. Außerdem werden Angebotsdetails zurückgegeben, wenn die returnQuote true ist, und die Opportunity-ID, wenn createOpportunity true ist und keine opportunityId angegeben wurde.
{
"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"
}
