Вы находитесь здесь:
InsQuoteService:createUpdateQuote
Используйте эту службу для создания сметы для нового предприятия, обновления существующей сметы новыми сведениями или создания сметы подтверждения. Для обновлений quoteId обновляемой сметы должен быть добавлен в параметры удаленного доступа.
Перед выполнением этой службы система выполняет проверку пользователя-гостя.
Данная служба может использоваться пользователями-гостями. Пользователь-гость, выполняющий задачу OmniScript, процедуры интеграции или пользовательского интерфейса, сможет продолжить работу; эта служба будет запущена. Однако, в этих случаях quoteId и opportunityId зашифрованы, поэтому пользователи-гости не могут видеть эти коды.
Используйте службу InsQuoteService:createUpdateQuote для обновления элементов сметы и строки сметы вместо использования Omnistudio Data Mapper.
Принцип работы
-
Служба ищет вводные данные JSON для
inputKey. УзелinputKeyсодержит сведения, необходимые службе для создания или обновления сметы. Информация, необходимая для данной услуги, включает:-
opportunityId -
endDate(дополнительно) -
effectiveDate -
productConfigurationDetailзаписи -
instanceKeyОбязательно для идентификации нескольких экземпляров одного спецификации
-
insuredItemsузелВ этом узле служба ожидает список спецификаций застрахованных элементов и спецификаций застрахованной стороны, используя
productCodeкаждого спецификации в качестве ключа. Term__cИспользуется для обновления поля Term__c сметы.
-
-
Использует сведения из ввода JSON для создания сметы.
-
Возвращает код сметы в выводном JSON.
-
Создание объекта «Смета», содержащего следующие элементы строки:
-
Использует корневые продукты, определенные в
productConfigurationDetail, для создания или обновления элементов корневой строки сметы. -
При обновлении существующей сметы будут добавлены записи в
productConfigurationDetail, которые еще не добавлены в смету, а также записи, которые уже добавлены в смету. -
Использует характеристики застрахованного элемента, характеристики застрахованной стороны и характеристики покрытия в качестве элементов строки сметы:
ParentItemId__c = rootItem.Id. -
Элемент строки сметы основного застрахованного элемента и строки сметы дочерней застрахованной стороны имеют взаимосвязь «многие:многие». Эти взаимосвязи сохраняются в объекте «Взаимосвязь элементов сметы». Если строка сметы застрахованного элемента содержит взаимосвязи с несколькими строками сметы застрахованной стороны, поле
PrimaryChildLineitemId__cиспользуется для определения, какая из этих взаимосвязей является основной.Например, Джоан Смит и Джон Смит являются водителями Lexus 250; Джоан Смит установлена в качестве основного водителя. Элемент строки сметы Lexus 250 содержит
PrimaryChildLineItemId__c, указывающие на элемент строки сметы Джоан Смит.ParentItemId2__cвсех элементов строки сметы указывает наSubParentItemId__crootItem.Id.дочерних покрытий на основной застрахованный элемент. ПоляItemName__cэлемента строки сметы застрахованного элемента и элемента строки сметы застрахованной стороны сохраняются сinstanceKeyэтого элемента. -
Элемент строки сметы основного застрахованного элемента содержит цену.
-
-
Для новых смет, если
createOpportunityявляетсяtrueи не предоставленоopportunityId, создает запись возможности посредством узлаOpportunityDetailsJSON изinputKey. -
Если
calculateCommissionявляетсяtrue, вызываетInsCommissionService.processQuoteCommission, которая подготавливает ввод для службыInsCommissionService.calculate. После обработки ввода службой вычисления сохраняется значение вычисленной комиссии вQuote.CommissionAmount__c.
Все пользователи, вызывающие InsQuoteService:createUpdateQuote, должны иметь полномочие «Чтение» для всех полей в наборе полей «Сведения о смете», если набор полей добавлен в объект «Элемент строки сметы».
Если набор полей «Сведения о смете» не добавлен в объект «Элемент строки сметы», все поля, включая настраиваемые, доступны для чтения пользователями.
Дополнительные платежи
Вот как работает данная услуга с доплатами (налогами и сборами):
-
Если поле
taxesAndFeesуказано в записи JSON, соответствующая записьQuotePricingAdjustment__cсохраняется для каждого элемента в спискеtaxesAndFees. -
Если поле
taxAmountуказано в записи JSON, полеTaxAmount__cустанавливается на значение поляtaxAmountв созданномQuoteLineItem. -
Если поле
feeAmountуказано в записи JSON, полеFeeAmount__cустанавливается на значение поляfeeAmountв созданномQuoteLineItem.
Добавление дополнительных полей к элементам строки сметы
Если вам нужны дополнительные поля, записанные в элемент строки сметы этой службой, вам нужно сначала вызвать службу InsProductJSONService:trimOffAttributeCategory.
Поток для выполнения этой работы в OmniScript или процедуре интеграции выглядит следующим образом:
-
Этапы конфигурации продукта
-
InsProductJSONService:trimOffAttributeCategory сервисный вызов с selectedValueAsObject, установленным на true
-
Трансформация DataRaptor, которая может содержать соотнесение между атрибутами и дополнительными полями в объекте элемента строки сметы
-
InsQuoteService:создайте вызов службыUpdateQuote
Удаленные параметры
Параметр |
Описание |
|---|---|
|
Если этот параметр установлен на Этот параметр поддерживает взаимосвязи «родитель > ребенок и родитель > ребенок > застрахованный элемент внука». |
|
Обязательно. Ключ JSON, используемый службой для извлечения необходимых сведений с целью создания или обновления сметы. Не используйте % для окружения значения этого ключа. Этот ключ представляет узел JSON, а не переменную. Поскольку этот ключ представляет узел JSON, а не путь, не используйте запись пути parent:childnode:childnode. Чтобы перейти к правильному пути данных, введите его в поле «Путь JSON» в разделе «Трансформация отправки/ответа» при добавлении этой пары ключ/значение к этапу OmniScript. |
|
При установке значения « Используйте этот параметр для создания большой многоэкземплярной сметы посредством нескольких вызовов сервера, где новый набор элементов строки сметы экземпляров вставляется в существующую смету в каждом вызове. |
|
Дополнительно. Код текущей сметы, обновляемой службой на основе новой или обновленной информации. Используется, когда службе нужно обновить существующую смету. |
|
Дополнительно. Логический флаг, обозначающий, является ли смета многокорневой. По умолчанию: |
|
При установке значения « |
|
При установке значения |
|
Обязательно. Имя прайс-листа, связанного со спецификой продукта. Salesforce требует, чтобы продукты, используемые в элементах строки сметы, имели запись прайс-листа. |
|
При установке значения « При установке значения « Примечание
Если вы установите этот параметр на false, вам также нужно добавить строку к шаблону пользовательского интерфейса Кроме |
|
При установке значения « |
|
При установке значения |
|
При установке значения « При установке значения Примечание
Чтобы задать данному параметру значение true, введите как минимум одно значение кода производителя или производства: |
|
Дополнительно. Код поставщика обработки, то есть производителя, используемого для извлечения |
|
Дополнительно. Код производственного кода. |
|
Дополнительно. Имя производственного кода, переданное в службу InsCommissionService.calculate. Если вы не введете |
runEligibilityRequiredDefaultSelectedRules
|
Дополнительно. Значения по умолчанию - Определяет выполнение правил «Право на участие» и «Выбрано по умолчанию». |
runRelationshipRules
|
Дополнительно. Значения по умолчанию - Данный параметр определяет выполнение правил взаимосвязи. |
runSelectedValivationRules
|
Дополнительно. Значения по умолчанию - Определяет, выполняются ли правила выбора проверки. |
JSON ввода
Данная служба ищет значение inputKey. Перейдите во вкладку API спецификации продукта, чтобы найти JSON ввода, необходимый для этой службы.
В данном примере 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 в inputKey содержит несколько пар ключ/значение, нужных службе для создания или обновления сметы.
Клавиша |
Значение |
|---|---|
|
Созданный код возможности. |
|
Созданный код организации. |
|
Дополнительно. Дата истечения срока действия полиса. |
|
Дата вступления политики в силу. |
|
Массив записей, которые следуют модели структуры JSON продукта. Корневая позиция строки сметы будет создана или изменена для каждой записи продукта в массиве. Чтобы узнать о структуре и содержимом продукта, см. Модель структуры JSON продукта. |
|
Дополнительно. Ключ |
|
Пары ключ/значение застрахованных элементов, используемые службой для создания элементов строки сметы для застрахованных элементов. |
Независимо от того, содержит ли смета один экземпляр застрахованного элемента или несколько застрахованных элементов, форматируйте узел insuredItems с массивом записей.
"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": ""
}]
}Для отдельного экземпляра застрахованной позиции, находящейся непосредственно под корневым продуктом в иерархии продуктов, можно использовать формат в данном примере. Записи insuredItems здесь содержат застрахованные элементы и значения, выбранные пользователем для каждого из них. Мы поддерживаем этот ввод JSON, но он из более раннего выпуска и не рекомендуем его.
"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"Для новых смет, если createOpportunity является true и не предоставлено opportunityId, служба создает новую запись возможности посредством узла OpportunityDetails JSON из inputKey. Используйте OpportunityDetails:FieldName формата ввода. Ниже указан пример узла OpportunityDetails.
"OpportunityDetails": {
"AccountId": "0015f00000DSFgqAAH",
"Name": "Auto Quote: Rachel Adams (2022-01-03)",
"StageName": "Qualification",
"CloseDate": "2022-01-03"
},preTransformBundle Alternative
Или можно определить трансформацию DataRaptor, которая соотносит данные, переданные во ввод JSON, с нужной службой формой. JSON вывода этого DataRaptor является userInputs JSON, определенным во вкладке API представления продукта. Задайте параметр preTransformBundle имени DataRaptor, чтобы служба использовала DataRaptor.
Вывод JSON
Служба возвращает код сметы новой созданной сметы. Он также возвращает сведения о смете, если вводом returnQuote является true, и код возможности, если createOpportunity является true и opportunityId не предоставляется.
{
"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"
}