Loading
Försäkring
InsQuoteService:createUpdateQuote

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.

Anteckning
Anteckning

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.

Viktig
Viktig

Använd tjänsten InsQuoteService:createUpdateQuote för att uppdatera offert- och offertradartiklar istället för att använda Omnistudio Data Mapper.

Klass: InsQuoteService

Metod: createUpdateQuote

Så här fungerar det

  1. Tjänsten söker JSON för indata efter inputKey. inputKey innehå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

    • productConfigurationDetail poster

    • instanceKey

      Krävs för att identifiera flera instanser av samma specifikation

    • insuredItems

      I 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 productCode som nyckel.

    • Term__c

      Använd för att uppdatera fältet Term__c i Offerten.

  2. Använder informationen från indata-JSON för att skapa offerten.

  3. Returnerar ett offert-ID i utdata-JSON.

  4. Skapar ett offertobjekt som innehåller dessa radartiklar:

    1. Använder rotprodukterna som definieras i productConfigurationDetail för att skapa eller uppdatera rotcitatradartiklarna.

    2. Vid uppdatering av en befintlig offert läggs poster i productConfigurationDetail till som inte finns i offerten ännu och de som redan finns i offerten uppdateras.

    3. 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.

    4. 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__c fö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__c som pekar till Joan Smiths offertradartikel. Alla offertradartiklars ParentItemId2__c pekar mot rootItem.Id. Underordnade täckningars SubParentItemId__c pekar mot det primära försäkrade objektet. Fälten offertradartikel för försäkrade objekt och ItemName__c för offertradartikel för försäkrad part lagras med detta objekts instanceKey.

    5. Det primära försäkrade objektets offertradartikel inkluderar priset.

  5. För nya offerter, om createOpportunity är true och ingen opportunityId anges, skapas en säljprojektpost med JSON-noden OpportunityDetails från inputKey.

  6. Om calculateCommission är true anropar det InsCommissionService.processQuoteCommission, vilket förbereder indata för InsCommissionService.calculate. Efter att tjänsten beräkna bearbetar indata lagrar den det beräknade provisionsvärdet i Quote.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 taxesAndFees anges i en JSON-post kvarstår en motsvarande QuotePricingAdjustment__c för varje objekt i taxesAndFees.

  • Om fältet taxAmount är angivet i en JSON-post sätts fältet TaxAmount__c till värdet för fältet taxAmount i den skapade QuoteLineItem.

  • Om fältet feeAmount är angivet i en JSON-post sätts fältet FeeAmount__c till värdet för fältet feeAmount i den skapade QuoteLineItem.

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:

  1. Steg för produktkonfiguration

  2. InsProductJSONService:trimOffAttributeCategory-serviceanrop med selectedValueAsObject inställt till sant

  3. DataRaptor-transformation som kan inkludera mappning mellan attribut och dina ytterligare fält i objektet Offertradartikel

  4. InsQuoteService:createUpdateQuote-serviceanrop

Fjärralternativ

Alternativ

Beskrivning

createInsuredItemsRelationships

true eller false

Om detta alternativ är inställt till true kan du specificera en lista över instanceKey > parentInstanceKey mellan försäkrade objekt.

Detta alternativ har stöd för överordnad > underordnad och överordnad > underordnad > barnbarnsförsäkrade objektrelationer.

inputKey

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.

insertInstance

true eller false

När satt till true infogar tjänsten ytterligare offertradartiklar i en befintlig offert. Den uppdaterar inte offertens sidhuvud, rotradartikel eller någon överordnad offertradartikel.

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.

quoteId

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.

isMultiRoot

Valfritt.

En boolesk flagga för att indikera om offerten är ett citattecken med flera rötter.

Standard är false.

minimizeQliQuerySize

true eller false

När satt till true frågar tjänsten endast de offertradartiklar som påverkas. Specifikt de offertradartiklar som refererar produkten i JSON-noden för indataprodukt eller i JSON-noden för försäkrade objekt.

populateCalcResults

true eller false

När satt till false fyller tjänsten inte i både rootItem.CalculatedPriceJSON_c och Quote.CalculatedPriceJSON_c.

pricebook

Obligatoriskt.

Namnet på prisboken som är associerad med produktspecifikationen.

Salesforce kräver att produkterna som används i offertradartiklar har en prisbokpost.

recalculateTaxesAndFees

true eller false

När satt till true räknar tjänsten om skatter och avgifter.

När satt till false räknar tjänsten inte om skatter och avgifter.

Anteckning
Anteckning

Om du ställer in detta alternativ till falskt måste du även lägga till en rad i mallen för ins-coverage-quote-runtime-container.

ins-coverage-quote-runtime-container.js, på rad 115, ange : optionsMap.recalculateTaxesAndFees = false

createOpportunity

true eller false

När satt till true, om ingen opportunityId anges, skapar tjänsten en ny säljprojektpost med OpportunityDetails JSON-noden från inputKey. Denna nod mappar till fält i säljprojektets sObject.

returnQuote

true eller false

När satt till true inkluderar tjänstens utdata offertdetaljer i quoteDetail JSON-noden.

calculateCommission

true eller false

När satt till true beräknar tjänsten provisioner för rotobjekten och sparar det totala beloppet till Quote.CommissionAmount.

När satt till false (standard) beräknar inte tjänsten provisioner.

Anteckning
Anteckning

Om du ställer in detta alternativ till sant måste du även ange minst ett av producent- eller produktionskodvärdena: primaryProducerId , productionCodeId eller productionCodeName.

primaryProducerId

Valfritt.

ID för bearbetningsproducent, det vill säga den producent som används för att hämta commissionScheduleId och beräkna provisionsbeloppet.

productionCodeId

Valfritt.

ID för produktionskod.

productionCodeName

Valfritt.

Namnet på produktionskoden som skickas till tjänsten InsCommissionService.calculate.

Om du inte anger productionCodeId använder tjänsten productionCodeName för att söka efter productionCodeId. Om du anger båda värdena men de inte matchar har productionCodeId företräde.

runEligibilityRequiredDefaultSelectedRules

Valfritt.

Standardvärden är true.

Avgör om regler för Kvalificering och Valda standardregler körs.

runRelationshipRules

Valfritt.

Standardvärden är true.

Avgör om relationsregler körs.

runSelectedValivationRules

Valfritt.

Standardvärden är true.

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

opportunityId

ID för skapat säljprojekt.

accountId

ID för skapat konto.

endDate

Valfritt.

Datum då policyn går ut.

effectiveDate

Datum då policyn börjar gälla.

productConfigurationDetail

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.

additionalFields

Valfritt.

additionalFields gäller endast för nyckel-/värdepar för rotcitattecken, inte offertradartiklar. För offertradartiklar, lägg till additionalFields med productConfigurationDetail JSON.

insuredItems

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"
    },
Anteckning
Anteckning

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"
}
 
Laddar
Salesforce Help | Article