Мне нужно создать несколько контактов в одном вызове REST с внешним идентификатором учетной записи, используя стандартный REST API

Я могу создать контакт с внешним идентификатором учетной записи, используя приведенный ниже URL-адрес остальных, но он не поддерживает несколько контактов (это единственное число)

/services/data/v47.0/sobjects/Контакты

Пример JSON

{

"FirstName":"Michael",  
"LastName":"Jordan",  
"email" : "sample12@salesforce.com",  
"Account": {  
     "External_Id__c":"x165"  
}  

}

Когда я пробую композитный отдых, я не могу создавать контакты с внешним идентификатором учетной записи.

/services/data/v47.0/composite/tree/contact/

Есть ли возможность создать несколько контактов с внешним идентификатором учетной записи, используя стандартный REST API?

1
Nishad kallingal 24 Мар 2020 в 11:40
Вы отправляли список записей? Пожалуйста, отправьте запрос в списке JSON, как предлагается в документе, см. Документ
 – 
Sarvesh
24 Мар 2020 в 11:47
Это не работает с внешним идентификатором учетной записи
 – 
Nishad kallingal
24 Мар 2020 в 12:20

1 ответ

Лучший ответ

Ресурс составного дерева всегда создает новые записи, поэтому он дает вам такое поведение. Вместо этого вы должны использовать составной запрос. Этот пример дает вам наиболее близкий доступное вам поведение. Вы должны начать с использования GET /services/data/v48.0/sobjects/Account/External_Id__c/x165, который возвращает учетную запись, а затем использовать эту ссылку в дальнейших обновлениях.

Вот ваш пример, помещенный в форму, которую вы можете использовать.

URL-адрес: POST /services/data/v47.0/composite/

Тело :

{
    "allOrNone": true,
    "compositeRequest": 
    [
        {
            "method": "GET",
            "url": "/services/data/v47.0/sobjects/Account/External_Id__c/x165",
            "referenceId": "x165"
        },
        {
            "method": "POST",
            "url": "/services/data/v47.0/composite/sobjects",
            "referenceId": "contacts",
            "body": 
            {
                "allOrNone": true,
                "records": 
                [
                    {
                        "attributes": { "type": "Contact", "referenceId": "johnDoe" },
                        "FirstName": "John",
                        "LastName": "Doe",
                        "AccountId": "@{x165.Id}"
                    },
                    {
                        "attributes": { "type": "Contact", "referenceId": "janeDoe" },
                        "FirstName": "Jane",
                        "LastName": "Doe",
                        "AccountId": "@{x165.Id}"
                    }
                ]
            }
        }
    ]
}

Сначала мы извлекаем учетную запись по идентификатору и назначаем ей «ссылку». Затем мы используем ссылку через @{x165.id} в последующих записях. В запрос можно включить до 25 подзапросов, пять из которых могут быть запросами. Это был бы идеальный способ загрузить множество записей, имеющих одинаковые связанные записи.

К сожалению, нет возможности напрямую ссылаться на внешний идентификатор, как в SOAP (насколько мне известно), так что это, вероятно, лучшее решение. Это ограничение существует, потому что можно создавать вложенные записи, и нет способа отличить, имели ли вы в виду ссылку на существующую запись или создать новую.

3
sfdcfox 24 Мар 2020 в 13:08
Я очень ценю вашу помощь, позвольте мне попробовать этот метод
 – 
Nishad kallingal
24 Мар 2020 в 16:44
@sfdcfox Сколько записей мы можем обработать в вызове композитного запроса?
 – 
Nishad kallingal
27 Мар 2020 в 12:55
У вас может быть 25 подзапросов (с ограничением в 5 разных запросов), каждый /composite/sobjects может обрабатывать 200 записей. Это устанавливает верхний предел в 5000 записей без запросов, меньше в зависимости от того, сколько запросов вам нужно.
 – 
sfdcfox
27 Мар 2020 в 13:05