Loading
Страхование
InsQuoteService:createUpdateQuote

InsQuoteService:createUpdateQuote

Используйте эту службу для создания сметы для нового предприятия, обновления существующей сметы новыми сведениями или создания сметы подтверждения. Для обновлений quoteId обновляемой сметы должен быть добавлен в параметры удаленного доступа.

Примечание
Примечание

Перед выполнением этой службы система выполняет проверку пользователя-гостя.

Данная служба может использоваться пользователями-гостями. Пользователь-гость, выполняющий задачу OmniScript, процедуры интеграции или пользовательского интерфейса, сможет продолжить работу; эта служба будет запущена. Однако, в этих случаях quoteId и opportunityId зашифрованы, поэтому пользователи-гости не могут видеть эти коды.

Важно!
Важно!

Используйте службу InsQuoteService:createUpdateQuote для обновления элементов сметы и строки сметы вместо использования Omnistudio Data Mapper.

Класс: InsQuoteService

Метод: createUpdateQuote

Принцип работы

  1. Служба ищет вводные данные JSON для inputKey. Узел inputKey содержит сведения, необходимые службе для создания или обновления сметы. Информация, необходимая для данной услуги, включает:

    • opportunityId

    • endDate (дополнительно)

    • effectiveDate

    • productConfigurationDetail записи

    • instanceKey

      Обязательно для идентификации нескольких экземпляров одного спецификации

    • insuredItems узел

      В этом узле служба ожидает список спецификаций застрахованных элементов и спецификаций застрахованной стороны, используя productCode каждого спецификации в качестве ключа.

    • Term__c

      Используется для обновления поля Term__c сметы.

  2. Использует сведения из ввода JSON для создания сметы.

  3. Возвращает код сметы в выводном JSON.

  4. Создание объекта «Смета», содержащего следующие элементы строки:

    1. Использует корневые продукты, определенные в productConfigurationDetail, для создания или обновления элементов корневой строки сметы.

    2. При обновлении существующей сметы будут добавлены записи в productConfigurationDetail, которые еще не добавлены в смету, а также записи, которые уже добавлены в смету.

    3. Использует характеристики застрахованного элемента, характеристики застрахованной стороны и характеристики покрытия в качестве элементов строки сметы: ParentItemId__c = rootItem.Id.

    4. Элемент строки сметы основного застрахованного элемента и строки сметы дочерней застрахованной стороны имеют взаимосвязь «многие:многие». Эти взаимосвязи сохраняются в объекте «Взаимосвязь элементов сметы». Если строка сметы застрахованного элемента содержит взаимосвязи с несколькими строками сметы застрахованной стороны, поле PrimaryChildLineitemId__c используется для определения, какая из этих взаимосвязей является основной.

      Например, Джоан Смит и Джон Смит являются водителями Lexus 250; Джоан Смит установлена в качестве основного водителя. Элемент строки сметы Lexus 250 содержит PrimaryChildLineItemId__c, указывающие на элемент строки сметы Джоан Смит. ParentItemId2__c всех элементов строки сметы указывает на SubParentItemId__c rootItem.Id. дочерних покрытий на основной застрахованный элемент. Поля ItemName__c элемента строки сметы застрахованного элемента и элемента строки сметы застрахованной стороны сохраняются с instanceKey этого элемента.

    5. Элемент строки сметы основного застрахованного элемента содержит цену.

  5. Для новых смет, если createOpportunity является true и не предоставлено opportunityId, создает запись возможности посредством узла OpportunityDetails JSON из inputKey.

  6. Если 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 или процедуре интеграции выглядит следующим образом:

  1. Этапы конфигурации продукта

  2. InsProductJSONService:trimOffAttributeCategory сервисный вызов с selectedValueAsObject, установленным на true

  3. Трансформация DataRaptor, которая может содержать соотнесение между атрибутами и дополнительными полями в объекте элемента строки сметы

  4. InsQuoteService:создайте вызов службыUpdateQuote

Удаленные параметры

Параметр

Описание

createInsuredItemsRelationships

true или false

Если этот параметр установлен на true, можно указать список взаимосвязей instanceKey > parentInstanceKey между застрахованными элементами.

Этот параметр поддерживает взаимосвязи «родитель > ребенок и родитель > ребенок > застрахованный элемент внука».

inputKey

Обязательно.

Ключ JSON, используемый службой для извлечения необходимых сведений с целью создания или обновления сметы.

Не используйте % для окружения значения этого ключа. Этот ключ представляет узел JSON, а не переменную.

Поскольку этот ключ представляет узел JSON, а не путь, не используйте запись пути parent:childnode:childnode.

Чтобы перейти к правильному пути данных, введите его в поле «Путь JSON» в разделе «Трансформация отправки/ответа» при добавлении этой пары ключ/значение к этапу OmniScript.

insertInstance

true или false

При установке значения «true» служба вставляет дополнительные элементы строки сметы в существующую смету. Он не обновляет заголовок сметы, элемент корневой строки или любой родительский элемент строки сметы.

Используйте этот параметр для создания большой многоэкземплярной сметы посредством нескольких вызовов сервера, где новый набор элементов строки сметы экземпляров вставляется в существующую смету в каждом вызове.

quoteId

Дополнительно.

Код текущей сметы, обновляемой службой на основе новой или обновленной информации. Используется, когда службе нужно обновить существующую смету.

isMultiRoot

Дополнительно.

Логический флаг, обозначающий, является ли смета многокорневой.

По умолчанию: false.

minimizeQliQuerySize

true или false

При установке значения «true» служба запрашивает только соответствующие элементы строки сметы. В частности, элементы строки сметы, ссылающиеся на продукт в узле JSON продукта ввода или в узле JSON застрахованных элементов.

populateCalcResults

true или false

При установке значения false служба не заполняет поле rootItem.CalculatedPriceJSON_c и поле Quote.CalculatedPriceJSON_c.

pricebook

Обязательно.

Имя прайс-листа, связанного со спецификой продукта.

Salesforce требует, чтобы продукты, используемые в элементах строки сметы, имели запись прайс-листа.

recalculateTaxesAndFees

true или false

При установке значения «true» служба пересчитывает налоги и платежи.

При установке значения «false» служба не пересчитывает налоги и платежи.

Примечание
Примечание

Если вы установите этот параметр на false, вам также нужно добавить строку к шаблону пользовательского интерфейса ins-coverage-quote-runtime-container.

Кроме ins-coverage-quote-runtime-container.js, в строке 115 введите : optionsMap.recalculateTaxesAndFees = false

createOpportunity

true или false

При установке значения «true», если opportunityId не предоставляется, служба создает новую запись возможности посредством узла OpportunityDetails JSON из inputKey. Этот узел соотносится с полями в sObject возможности.

returnQuote

true или false

При установке значения true, вывод службы содержит сведения о сметах в узле quoteDetail JSON.

calculateCommission

true или false

При установке значения «true» служба рассчитывает комиссии для корневых элементов и сохраняет общую сумму в Quote.CommissionAmount.

При установке значения false (по умолчанию) служба не рассчитывает комиссии.

Примечание
Примечание

Чтобы задать данному параметру значение true, введите как минимум одно значение кода производителя или производства: primaryProducerId, productionCodeId или productionCodeName.

primaryProducerId

Дополнительно.

Код поставщика обработки, то есть производителя, используемого для извлечения commissionScheduleId и вычисления суммы комиссии.

productionCodeId

Дополнительно.

Код производственного кода.

productionCodeName

Дополнительно.

Имя производственного кода, переданное в службу InsCommissionService.calculate.

Если вы не введете productionCodeId, служба использует productionCodeName для поиска productionCodeId. Если вы введете оба значения, но они не совпадут, приоритет будет отдан productionCodeId.

runEligibilityRequiredDefaultSelectedRules

Дополнительно.

Значения по умолчанию - true.

Определяет выполнение правил «Право на участие» и «Выбрано по умолчанию».

runRelationshipRules

Дополнительно.

Значения по умолчанию - true.

Данный параметр определяет выполнение правил взаимосвязи.

runSelectedValivationRules

Дополнительно.

Значения по умолчанию - true.

Определяет, выполняются ли правила выбора проверки.

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 содержит несколько пар ключ/значение, нужных службе для создания или обновления сметы.

Клавиша

Значение

opportunityId

Созданный код возможности.

accountId

Созданный код организации.

endDate

Дополнительно.

Дата истечения срока действия полиса.

effectiveDate

Дата вступления политики в силу.

productConfigurationDetail

Массив записей, которые следуют модели структуры JSON продукта.

Корневая позиция строки сметы будет создана или изменена для каждой записи продукта в массиве.

Чтобы узнать о структуре и содержимом продукта, см. Модель структуры JSON продукта.

additionalFields

Дополнительно.

Ключ additionalFields применяется только к парам ключ/значение для корневых смет, а не элементов строки сметы. Для элементов строки сметы добавьте additionalFields посредством productConfigurationDetail JSON.

insuredItems

Пары ключ/значение застрахованных элементов, используемые службой для создания элементов строки сметы для застрахованных элементов.

Независимо от того, содержит ли смета один экземпляр застрахованного элемента или несколько застрахованных элементов, форматируйте узел 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"
}
 
Загрузка
Salesforce Help | Article