Вы находитесь здесь:
InsQuoteService:createUpdateQuoteFromExternal
Создает смету или обновляет существующую смету новыми сведениями посредством входящего вызова API из внешней системы.
Класс:InsQuoteService
Метод: createUpdateQuoteFromExternal
Принцип работы
-
Получает объект JSON.
-
Использует
sourceSystemIdentifierдля определения создания или обновления существующей сметы. -
Использует
PricebookId, являющийся прайс-листом под именем Standard. -
Если служба находит смету с указанным
sourceSystemIdentifier, она обновляет объект сметы:-
Использует корневые продукты, определенные в
quoteLines, для добавления, обновления или удаления элементов корневой строки сметы. Служба используетsourceSystemIdentifierдля определения корня.Добавление записей в
quoteLines, отсутствующих в смете. Обновление записей вquoteLines, существующих в смете. Удаляет записи вquoteLines, которые находятся в смете, но не находятся в строках сметы. -
Служба использует покрытия, застрахованные элементы и стороны, определенные в
childLines, для добавления, обновления или удаления корневых покрытий, застрахованных элементов и сторон. Служба используетsourceSystemIdentifierдля определения строки для обновления.Добавление записей в
childLines, отсутствующих в смете. Обновление записей вchildLines, существующих в смете. Удаление записей вchildLines, содержащихся в смете, но неchildLines. -
Для каждого корневого покрытия, застрахованных элементов и сторон служба использует покрытия, застрахованные элементы и стороны в
childLinesдобавления, обновления или удаления соответствующих покрытий, застрахованных элементов и сторон. Служба используетsourceSystemIdentifierдля определения строки для обновления.Добавление записей в
childLines, отсутствующих в смете. Обновление записей вchildLines, существующих в смете. Удаление записей вchildLines, содержащихся в смете, но неchildLines. -
Записи
QuoteLineItemиQuoteLineItemдочерней застрахованной стороны основного застрахованного элемента имеют взаимосвязь «многие:многие». Эти взаимосвязи сохраняются в объекте «Взаимосвязь элементов сметы (QuoteItemRelationship__c)». ЕслиQuoteLineItemзастрахованного элемента имеет взаимосвязи с записямиQuoteLineItemнескольких застрахованных сторон, служба использует полеPrimaryChildLineItemId__cдля определения, какая из этих взаимосвязей является основной.Например, Джоан Смит и Джон Смит являются водителями Lexus 250; Джоан Смит установлена в качестве основного водителя. Lexus 250
QuoteLineItemPrimaryChildLineItemId__cуказывает на .QuoteLineItem -
Если два застрахованных элемента имеют одну дочернюю застрахованную сторону, каждый застрахованный элемент должен иметь запись в соответствующем
childLinesдля дочерней застрахованной стороны. Для обеих записей они должны иметь одинаковыеsourceSystemIdentifier.Например, и в Lexus 250, и в Honda Odyssey водителем является Боб Джонс. В
childLinesLexus 250 есть Боб Джонс сsourceSystemIdentifierBobJones. ВchildLines"Хонда Одиссей" есть Боб Джонс сsourceSystemIdentifierБобом Джонсом. -
ParentItemId__c и ParentItemId2__c
childLinesуказывают на корневой код. -
SubParentItemId__cдочерних покрытий указывает на основной застрахованный элемент.
-
-
Если служба не находит смету с указанным
sourceSystemIdentifier, она создает объект сметы, содержащий элементы строки, как указано ниже:-
Использует корневые продукты, определенные в
quoteLines, для создания элементов корневой строки сметы. -
Использует покрытия, застрахованные элементы и стороны, определенные в
childLinesдля создания корневых покрытий, застрахованных элементов и сторон. -
Для каждого корневого покрытия застрахованные элементы и стороны используют покрытия, застрахованные элементы и стороны, определенные в их
childLinesдля создания покрытий, застрахованных элементов и сторон. -
Записи
QuoteLineItemиQuoteLineItemдочерней застрахованной стороны основного застрахованного элемента имеют взаимосвязь «многие:многие». Эти взаимосвязи сохраняются в объекте «Взаимосвязь элементов сметы (QuoteItemRelationship__c)». ЕслиQuoteLineItemзастрахованного элемента имеет взаимосвязи с записямиQuoteLineItemнескольких застрахованных сторон, служба использует полеPrimaryChildLineItemId__cдля определения, какая из этих взаимосвязей является основной.Например, Джоан Смит и Джон Смит являются водителями Lexus 250; Джоан Смит установлена в качестве основного водителя. Lexus 250
QuoteLineItemPrimaryChildLineItemId__cуказывает на .QuoteLineItem -
Если два застрахованных элемента имеют одинаковую дочернюю застрахованную сторону, каждый застрахованный элемент должен иметь запись в соответствующем
childLinesдля дочерней застрахованной стороны. Для обеих записей они должны иметь одинаковыеsourceSystemIdentifier.Например, и в Lexus 250, и в Honda Odyssey водителем является Боб Джонс. У Лексуса 250 есть Боб Джонс с
sourceSystemIdentifierкак Боб Джонс вchildLine. ВchildLines"Хонда Одиссей" есть Боб Джонс сsourceSystemIdentifierкак БобДжонс. -
ParentItemId__cиParentItemId2__cchildLinesуказывают на корневой код. -
SubParentItemId__cдочерних покрытий указывает на основной застрахованный элемент.
-
-
Возвращает
Quote.Idи список ошибок, обнаруженных в выводе JSON.
Вводные данные
Ввод |
Описание |
|---|---|
|
Содержит всю информацию для создания сметы. Дополнительные сведения о парах ключ-значение см. в описании узлов JSON. |
Описание узлов JSON |
|
|
Список записей. Служба обрабатывает только одну смету одновременно. |
узлы сметы |
|
|
Обязательно. Код возможности. |
|
Обязательно. Уникальный идентификатор записи из системы за пределами Salesforce для определения сметы для обновления. |
|
API-имя типа записи сметы. |
|
Пара ключ-значение других полей |
|
Список корневых продуктов. |
Узлы quoteLines |
|
|
Обязательно. Уникальный идентификатор записи из системы за пределами Salesforce для определения корневого QuoteLineItems для добавления, обновления или удаления в Salesforce. |
|
Ключ экземпляра в |
|
Обязательно. Корневой код продукта. |
|
Обязательно. Тип записи продукта или характеристики. |
|
Выбранные атрибуты продукта. |
|
Пара ключ-значение других полей |
|
Покрытия корневых продуктов, застрахованные элементы и застрахованные стороны. |
childLines |
|
|
Обязательно. Уникальный идентификатор записи из системы за пределами Salesforce для определения корневых покрытий, застрахованных элементов и застрахованных сторон для добавления, обновления или удаления в Salesforce. |
|
Определяет несколько экземпляров одной спецификации. Ключ экземпляра в |
|
Обязательно. Код продукта корневых покрытий, застрахованных элементов и застрахованных сторон. |
|
Обязательно. Тип записи продукта или характеристики. |
|
Выбранные атрибуты продукта. |
|
Пара ключ-значение других полей |
|
Дочерние покрытия, застрахованные элементы и застрахованные стороны. |
childLines |
|
|
Обязательно. Уникальный идентификатор записи из системы за пределами Salesforce для определения дочерних покрытий, застрахованных элементов и застрахованных сторон для добавления, обновления или удаления в Salesforce. Если два застрахованных элемента имеют одинаковую дочернюю застрахованную сторону, каждый застрахованный элемент должен иметь запись в соответствующем |
|
Определяет несколько экземпляров одной спецификации. Ключ экземпляра в |
|
Обязательно. Код продукта дочерних покрытий, застрахованных элементов и продукта застрахованных сторон. |
|
Обязательно. Тип записи продукта или характеристики. |
|
Выбранные атрибуты продукта. |
|
Пара ключ-значение других полей |
JSON ввода
Ниже указан формат ввода JSON:
{
"quote":{
"records":[
{
"opportunityId":"Opportunity.Id",
"sourceSystemIdentifier":"Id",
"sourceSystem":"Name of system quote was created",
"Name":"Quote Name",
"type":"Quote.RecordType.DeveloperName",
"effectiveDate":"Quote.EffectiveDate__c",
"endDate":"Quote.EndDate__c",
"price":Quote.StandardPremium__c,
"term":"Quote.Term__c",
"status":"Quote.Status",
"additionalFields":{
"Quote.fieldAPIName":"value"
},
"quoteLines":{
"records":[
{
"sourceSystemIdentifier":"Id",
"lineRecordType":"Product2",
"instanceKey":"name",
"productCode":"Product2.ProductCode",
"productName":"Product2.Name",
"attributeCategories":{
"records":[
{
"productAttributes":{
"records":[
{
"code":"attribute code",
"userValues":"selected value"
}
]
}
}
]
},
"additionalFields":{
"QuoteLineItem.fieldAPIName":"value"
},
"childLines":{
"records":[
{
"sourceSystemIdentifier":"Id",
"lineRecordType":"Product2.RecordType.DeveloperName",
"productCode":"Product2.ProductCode",
"productName":"Product2.Name",
"instanceKey":"instance name",
"price":QuoteLineItem.UnitPrice,
"taxAmount":QuoteLineItem.TaxAmount__c,
"feeAmount":QuoteLineItem.FeeAmount__c,
"additionalFields":{
"QuoteLineItem.fieldAPIName":"value"
},
"attributeCategories":{
"records":[
{
"productAttributes":{
"records":[
{
"code":"attribute code",
"userValues":"selected value"
}
]
}
}
]
},
"childLines":{
"records":[
{
"sourceSystemIdentifier":"Id",7e54f959544f",
"lineRecordType":"InsuredPartySpec",
"productCode":"Product2.ProductCode",
"productName":"Product2.Name",
"instanceKey":"instance name",
"price":QuoteLineItem.UnitPrice,
"taxAmount":QuoteLineItem.TaxAmount__c,
"feeAmount":QuoteLineItem.FeeAmount__c,
"isPrimaryChild":true,
"additionalFields":{
"QuoteLineItem.fieldAPIName":"value"
},
"attributeCategories":{
"records":[
{
"productAttributes":{
"records":[
{
"code":"attribute code",
"userValues":"selected value"
}
]
}
}
]
}
}
]
}
}
]
}
}
]
}
}
]
}
}Ниже указан пример ввода JSON:
{
"quote": {
"records": [
{
"opportunityId": "0065w0000286hhNAAQ",
"sourceSystemIdentifier": "af3c0072-9018-43df-83d3-3a5f254d5b1e",
"sourceSystem": "Salesforce",
"Name": "Auto Root (External)",
"type": "LargeGroupQuote",
"effectiveDate": "06/01/2021",
"endDate": "12/01/2021",
"price": 10000,
"term": "Semi-Annual",
"status": "Submitted",
"quoteLines": {
"records": [
{
"sourceSystemIdentifier": "49553393-120a-4777-b65a-8167c386a0fb",
"instanceKey": "Auto Root",
"productCode": "AUTOROOT",
"productName": "Auto Root",
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "atLimitUM",
"userValues": 200
}
]
}
}
]
},
"additionalFields": {
"instest12__AdjustmentComments__c": "test comment"
},
"childLines": {
"records": [
{
"sourceSystemIdentifier": "5a8d1b04-c34c-6a48-42c8-ab08be9868e1",
"lineRecordType": "InsuredItemSpec",
"Name": "Auto",
"productName": "Auto",
"productCode": "AUTO",
"instanceKey": "2010 Honda Odyssey",
"price": 111,
"taxAmount": 5,
"feeAmount": 21,
"additionalFields": {
"instest12__AdjustmentComments__c": "test comment"
},
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "autoYear",
"userValues": 2010
},
{
"code": "carValue",
"userValues": 55000
},
{
"code": "est_annual_mileage",
"userValues": 2000
},
{
"code": "autoMake",
"userValues": "Honda"
},
{
"code": "autoModel",
"userValues": "Odyssey"
}
]
}
}
]
},
"childLines": {
"records": [
{
"sourceSystemIdentifier": "6400140b-3e97-32c4-bdfd-7e54f959544f",
"lineRecordType": "InsuredPartySpec",
"Name": "Driver",
"productName": "Driver",
"productCode": "DRIVER",
"instanceKey": "Bob Jones",
"price": 112,
"taxAmount": 6,
"feeAmount": 22,
"isPrimaryChild": true,
"additionalFields": {
"instest12__AdjustmentComments__c": "test comment"
},
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "AGE",
"userValues": 24
},
{
"code": "FN",
"userValues": "Bob"
},
{
"code": "LN",
"userValues": "Jones"
},
{
"code": "GENDER",
"userValues": "Male"
}
]
}
}
]
}
},
{
"sourceSystemIdentifier": "38c4fe27-7b85-77ce-c9e2-1f7f22889982",
"lineRecordType": "InsuredPartySpec",
"Name": "Driver",
"productName": "Driver",
"productCode": "DRIVER",
"instanceKey": "Joan Smith",
"price": 113,
"taxAmount": 7,
"feeAmount": 23,
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "AGE",
"userValues": 25
},
{
"code": "FN",
"userValues": "Joan"
},
{
"code": "LN",
"userValues": "Smith"
},
{
"code": "GENDER",
"userValues": "Female"
}
]
}
}
]
}
},
{
"sourceSystemIdentifier": "33b74fa2-fba5-44b4-317f-021dae689a9f",
"lineRecordType": "CoverageSpec",
"Name": "Collision Deductible Waiver",
"productName": "Collision Deductible Waiver",
"productCode": "COL_WAIVER",
"instanceKey": "2010 Honda Odyssey_COL_WAIVER",
"price": 114,
"taxAmount": 8,
"feeAmount": 24
},
{
"sourceSystemIdentifier": "c4d5ac35-99b1-047d-cebe-05b74861463e",
"lineRecordType": "CoverageSpec",
"Name": "Uninsured/Underinsured Motorist BI",
"productName": "Uninsured/Underinsured Motorist BI",
"productCode": "UNINSURED_COVERAGE",
"instanceKey": "2010 Honda Odyssey_UNINSURED_COVERAGE",
"price": 115,
"taxAmount": 9,
"feeAmount": 25,
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "AbaThrpyOutptInst_covered_inn",
"userValues": 1.3
},
{
"code": "UNINSURED",
"userValues": "No coverage"
}
]
}
}
]
}
}
]
}
},
{
"sourceSystemIdentifier": "60699eaf-956a-4381-8ef2-5a704c85517f",
"lineRecordType": "InsuredItemSpec",
"Name": "Auto",
"productName": "Auto",
"productCode": "AUTO",
"instanceKey": "2011 Toyota Camry",
"price": 116,
"taxAmount": 10,
"feeAmount": 26,
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "autoYear",
"userValues": 2011
},
{
"code": "carValue",
"userValues": 55500
},
{
"code": "est_annual_mileage",
"userValues": 2200
},
{
"code": "autoMake",
"userValues": "Toyota"
},
{
"code": "autoModel",
"userValues": "Camry"
}
]
}
}
]
},
"childLines": {
"records": [
{
"sourceSystemIdentifier": "6400140b-3e97-32c4-bdfd-7e54f959544f",
"lineRecordType": "InsuredPartySpec",
"Name": "Driver",
"productName": "Driver",
"productCode": "DRIVER",
"instanceKey": "Bob Jones",
"price": 112,
"taxAmount": 6,
"feeAmount": 22,
"isPrimaryChild": true,
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "AGE",
"userValues": 24
},
{
"code": "FN",
"userValues": "Bob"
},
{
"code": "LN",
"userValues": "Jones"
},
{
"code": "GENDER",
"userValues": "Male"
}
]
}
}
]
}
},
{
"sourceSystemIdentifier": "8c450354-2053-444c-9c9e-36a66e6f5582",
"lineRecordType": "CoverageSpec",
"Name": "Collision Deductible Waiver",
"productName": "Collision Deductible Waiver",
"productCode": "COL_WAIVER",
"instanceKey": "2011 Toyota Camry_COL_WAIVER",
"price": 117,
"taxAmount": 11,
"feeAmount": 27
},
{
"sourceSystemIdentifier": "7aaeee37-05ce-4926-accb-dff2ee85587f",
"lineRecordType": "CoverageSpec",
"Name": "Roadside",
"productName": "Roadside",
"productCode": "ROADSIDE_COVERAGE",
"instanceKey": "2011 Toyota Camry_ROADSIDE_COVERAGE",
"price": 118,
"taxAmount": 12,
"feeAmount": 28,
"attributeCategories": {
"records": [
{
"productAttributes": {
"records": [
{
"code": "ROADSIDE",
"userValues": 1
}
]
}
}
]
}
}
]
}
}
]
}
}
]
},
"additionalFields": {
"instest12__MonthlyPremium__c": 222
}
}
]
}
}Вывод JSON
Возвращает Quote.Id созданной или обновленной сметы в выводном JSON и список возникших ошибок.
Ниже указан формат вывода JSON:
{
"errors":[
"error1",
"error2",
"error3"
],
"quoteId":"Quote.Id"
}Ниже указан пример вывода JSON:
{
"errors":[
"Failed to create/update QuoteLineItem Honda Odyssey.Required fields are missing: [PricebookEntryId, Product2Id]; ",
"Failed to create/update QuoteLineItem Toyota Camry.Required fields are missing: [PricebookEntryId, Product2Id]; ",
"Failed to create/update QuoteLineItem Patty Desc.Required fields are missing: [PricebookEntryId, Product2Id]; "
],
"quoteId":"0Q05w0000027aH5CAI"
}