Du är här:
InsQuoteService:createUpdateQuote
Använd denna tjänst för att skapa en offert för nya affärer, uppdatera en befintlig offert med ny information eller skapa en stödoffert. För uppdateringar måste quoteId för offerten som ska uppdateras inkluderas i fjärralternativen.
Innan denna tjänst körs kör systemet en gästanvändarkontroll.
Denna tjänst kan användas av gästanvändare. En gästanvändare som kör en OmniScript-, integreringsprocess- eller användargränssnittsuppgift kommer att kunna fortsätta; denna tjänst kommer att köras. quoteId och opportunityId är dock krypterade i dessa fall, så gästanvändare kan inte se dessa ID:n.
Använd tjänsten InsQuoteService:createUpdateQuote för att uppdatera offert- och offertradartiklar istället för att använda Omnistudio Data Mapper.
Så här fungerar det
-
Tjänsten söker JSON för indata efter
inputKey.inputKeyinnehåller den information som tjänsten behöver för att skapa eller uppdatera en offert. Informationen som denna tjänst behöver inkluderar:-
opportunityId -
endDate(valfritt) -
effectiveDate -
productConfigurationDetailposter -
instanceKeyKrävs för att identifiera flera instanser av samma specifikation
-
insuredItemsI denna nod förväntar sig tjänsten en lista över specifikationer för försäkrade objekt och specifikationer för försäkrade parter, med varje specifikations
productCodesom nyckel. Term__cAnvänd för att uppdatera fältet Term__c i Offerten.
-
-
Använder informationen från indata-JSON för att skapa offerten.
-
Returnerar ett offert-ID i utdata-JSON.
-
Skapar ett offertobjekt som innehåller dessa radartiklar:
-
Använder rotprodukterna som definieras i
productConfigurationDetailför att skapa eller uppdatera rotcitatradartiklarna. -
Vid uppdatering av en befintlig offert läggs poster i
productConfigurationDetailtill som inte finns i offerten ännu och de som redan finns i offerten uppdateras. -
Använder specifikationer för försäkrade objekt, specifikationer för försäkrad part och täckningsspecifikationer som offertradartiklar:
ParentItemId__c = rootItem.Id. -
Det primära försäkrade objektets offertradartikel och underordnade försäkrade parters offertrader har många:många relationer. Dessa relationer lagras i objektet Offertobjektrelation. Om en offertrad för ett försäkrat objekt har relationer till flera offertrader för försäkrad part används fältet
PrimaryChildLineitemId__cför att avgöra vilken av dessa relationer som är den primära.Till exempel är både Joan Smith och John Smith förare av Lexus 250; Joan Smith anges som Primär förare. Lexus 250-offertradartikeln har
PrimaryChildLineItemId__csom pekar till Joan Smiths offertradartikel. Alla offertradartiklarsParentItemId2__cpekar motrootItem.Id.Underordnade täckningarsSubParentItemId__cpekar mot det primära försäkrade objektet. Fälten offertradartikel för försäkrade objekt ochItemName__cför offertradartikel för försäkrad part lagras med detta objektsinstanceKey. -
Det primära försäkrade objektets offertradartikel inkluderar priset.
-
-
För nya offerter, om
createOpportunityärtrueoch ingenopportunityIdanges, skapas en säljprojektpost med JSON-nodenOpportunityDetailsfråninputKey. -
Om
calculateCommissionärtrueanropar detInsCommissionService.processQuoteCommission, vilket förbereder indata förInsCommissionService.calculate. Efter att tjänsten beräkna bearbetar indata lagrar den det beräknade provisionsvärdet iQuote.CommissionAmount__c.
Alla användare som anropar InsQuoteService:createUpdateQuote måste ha behörigheten Läs för alla fält i fältuppsättningen Offertdetalj om fältuppsättningen läggs till i objektet Offertradartikel.
Om fältuppsättningen Offertdetalj inte läggs till i objektet Offertradartikel är alla fält, inklusive egna fält, läsbara för användare.
Tillägg
Så här fungerar denna tjänst med tilläggsavgifter (skatter och avgifter):
-
Om fältet
taxesAndFeesanges i en JSON-post kvarstår en motsvarandeQuotePricingAdjustment__cför varje objekt itaxesAndFees. -
Om fältet
taxAmountär angivet i en JSON-post sätts fältetTaxAmount__ctill värdet för fältettaxAmounti den skapadeQuoteLineItem. -
Om fältet
feeAmountär angivet i en JSON-post sätts fältetFeeAmount__ctill värdet för fältetfeeAmounti den skapadeQuoteLineItem.
Lägga till ytterligare fält i offertradartiklar
Om du behöver ytterligare fält som skrivits till offertradartikeln av denna tjänst måste du först anropa tjänsten InsProductJSONService:trimOffAttributeCategory.
Flödet för att få detta att fungera i ett OmniScript eller en integreringsprocess är:
-
Steg för produktkonfiguration
-
InsProductJSONService:trimOffAttributeCategory-serviceanrop med selectedValueAsObject inställt till sant
-
DataRaptor-transformation som kan inkludera mappning mellan attribut och dina ytterligare fält i objektet Offertradartikel
-
InsQuoteService:createUpdateQuote-serviceanrop
Fjärralternativ
Alternativ |
Beskrivning |
|---|---|
|
Om detta alternativ är inställt till Detta alternativ har stöd för överordnad > underordnad och överordnad > underordnad > barnbarnsförsäkrade objektrelationer. |
|
Obligatoriskt. En JSON-nyckel som denna tjänst hämtar nödvändig information från för att skapa eller uppdatera en offert. Använd inte % för att omge värdet på denna nyckel. Denna nyckel representerar en JSON-nod, inte en variabel. Eftersom denna nyckel representerar en JSON-nod och inte en sökväg, använd inte parent:childnode:childnode path. För att komma till rätt datasökväg, ange den i fältet Skicka JSON-sökväg i sektionen Skicka/svar-transformation när du lägger till denna nyckel/värdepar i ett OmniScript-steg. |
|
När satt till Använd detta alternativ för att skapa stora offerter med flera instanser genom flera serveranrop, där den nya uppsättningen offertradartiklar för instanserna infogas i den befintliga offerten i varje anrop. |
|
Valfritt. ID för en befintlig offert som denna tjänst uppdaterar, baserat på ny eller uppdaterad information. Används när tjänsten behöver uppdatera en befintlig offert. |
|
Valfritt. En boolesk flagga för att indikera om offerten är ett citattecken med flera rötter. Standard är |
|
När satt till |
|
När satt till |
|
Obligatoriskt. Namnet på prisboken som är associerad med produktspecifikationen. Salesforce kräver att produkterna som används i offertradartiklar har en prisbokpost. |
|
När satt till När satt till Anteckning
Om du ställer in detta alternativ till falskt måste du även lägga till en rad i mallen för
|
|
När satt till |
|
När satt till |
|
När satt till När satt till Anteckning
Om du ställer in detta alternativ till sant måste du även ange minst ett av producent- eller produktionskodvärdena: |
|
Valfritt. ID för bearbetningsproducent, det vill säga den producent som används för att hämta |
|
Valfritt. ID för produktionskod. |
|
Valfritt. Namnet på produktionskoden som skickas till tjänsten InsCommissionService.calculate. Om du inte anger |
runEligibilityRequiredDefaultSelectedRules
|
Valfritt. Standardvärden är Avgör om regler för Kvalificering och Valda standardregler körs. |
runRelationshipRules
|
Valfritt. Standardvärden är Avgör om relationsregler körs. |
runSelectedValivationRules
|
Valfritt. Standardvärden är Avgör om regler för Välj validering körs. |
Indata-JSON
Denna tjänst letar efter inputKey värde. Gå till fliken API i produktspecifikationen för att hitta den JSON för indata du behöver för denna tjänst.
I detta exempel är 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"
}JSON inuti inputKey innehåller flera nyckel-/värdepar som tjänsten behöver för att skapa eller uppdatera en offert.
Nyckel |
Värde |
|---|---|
|
ID för skapat säljprojekt. |
|
ID för skapat konto. |
|
Valfritt. Datum då policyn går ut. |
|
Datum då policyn börjar gälla. |
|
En matris av poster som följer JSON-strukturmodellen för produkter. En rotcitatradartikel kommer att skapas eller ändras för varje produktpost i matrisen. Mer information om en produkts struktur och innehåll finns i Strukturmodell för produkt-JSON. |
|
Valfritt.
|
|
Nyckel-/värdepar för de försäkrade objekt som tjänsten använder för att skapa offertradartiklar för försäkrade objekt. |
Oavsett om din offert innehåller en enskild instans av ett försäkrat objekt eller flera försäkrade objekt, formatera insuredItems med en matris av poster.
"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 en enskild instans av ett försäkrat objekt som är direkt under rotprodukten i produkthierarkin kan du använda formatet i detta exempel. insuredItems här inkluderar de försäkrade objekten och de värden användaren valt för vart och ett av dem. Vi har stöd för denna indata-JSON men den är från en tidigare utgåva och vi rekommenderar den inte.
"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"För nya offerter, om createOpportunity är true och ingen opportunityId tillhandahålls, skapar tjänsten en ny säljprojektpost med OpportunityDetails JSON-noden från inputKey. Använd OpportunityDetails:FieldName för inmatningsformat. Här är ett exempel på en OpportunityDetails.
"OpportunityDetails": {
"AccountId": "0015f00000DSFgqAAH",
"Name": "Auto Quote: Rachel Adams (2022-01-03)",
"StageName": "Qualification",
"CloseDate": "2022-01-03"
},förtransformpaketalternativ
Alternativt kan du definiera en DataRaptor-transformation som mappar de data som skickas till indata-JSON till den form tjänsten behöver. Denna DataRaptors JSON för utdata är den JSON för userInputs som definieras i produktvyns API-flik. Sätt alternativet preTransformBundle till namnet på DataRaptor för att låta tjänsten använda DataRaptor.
JSON för utdata
Tjänsten returnerar offert-ID för den nyligen skapade offerten. Den returnerar även offertdetaljer om returnQuote är true och säljprojekt-ID om createOpportunity är true och ingen opportunityId anges.
{
"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"
}