この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Composite 要求および Collections 要求の allOrNone パラメータ

Composite 要求で sObject Collections を使用している場合、相互にやりとりできる 2 つ以上の allOrNone パラメータが存在する場合があります。このパラメータは Composite 要求と各 sObject Collections サブ要求に 1 つずつあります。
  • Composite 要求で allOrNonetrue に設定されている場合、オールオアナッシングの動作は各 sObject Collections サブ要求にも適用され、サブ要求の allOrNone の値が上書きされます。
  • Composite 要求で allOrNonefalse に設定されている場合、各 sObject Collections サブ要求はその allOrNone の値に従って動作します。

たとえば、Composite 要求に sObject Collections 要求と取引先責任者を作成するための要求の 2 つの項目が含まれているジョブで何が起こるかを考えてみましょう。sObject Collections 要求では 2 つの取引先を作成しようとしますが、そのうちの 1 つはすでに同じ情報の既存の取引先があるため失敗します。

1POST https://instance.salesforce.com/services/data/v52.0/composite
2
3{
4   "allOrNone" : outerFlag,
5   "collateSubrequests" : false,
6   "compositeRequest" : [
7      {
8         "method" : "POST",
9         "url" : "/services/data/v52.0/composite/sobjects",
10         "body" : {
11            "allOrNone" : innerFlag,
12            "records" : [
13               {
14                  "attributes" : { "type" : "Account" },
15                  "Name" : "Northern Trail Outfitters",
16                  "BillingCity" : "San Francisco"
17               },
18               {
19                  "attributes" : { "type" : "Account" },
20                  "Name" : "Easy Spaces",
21                  "BillingCity" : "Calgary"
22               }
23            ]
24         },
25         "referenceId" : "newAccounts"
26      },
27      {
28         "method" : "POST",
29         "url" : "/services/data/v52.0/sObject/Contact",
30         "body" : {
31                "FirstName" : "John",
32                "LastName" : "Smith"
33         },
34         "referenceId" : "newContact"
35      }
36   ]
37}

outerFlag パラメータおよび innerFlag パラメータは true または false であり、これによって 4 つのケースが考えられます。

ケース 1: outerFlag = falseinnerFlag = false

この場合、どちらの要求でも allOrNonetrue に設定されていないため、どちらの要求もロールバックされません。1 つの取引先が作成され、1 つは失敗します。

このケースの結果の図

ケース 2: outerFlag = falseinnerFlag = true

この場合、内側の sObject Collections 要求では allOrNonetrue に設定されているため、ロールバックされます。外側の Composite 要求はロールバックされません。

このケースの結果の図

ケース 3: outerFlag = trueinnerFlag = true

この場合、両方の要求で allOrNonetrue に設定されているため、両方の要求がロールバックされます。

このケースの結果の図

ケース 4: outerFlag = trueinnerFlag = false

このケースのレスポンスボディは次のようになります。
1{
2   "compositeResponse" : [
3      {
4         "body" : [
5            {
6               "id" : "001R00000066cndIAA",
7               "success" : true,
8               "errors" : [ ]
9            },
10            {
11               "success" : false,
12               "errors" : [
13                  {
14                     "statusCode" : "DUPLICATES_DETECTED",
15                     "message" : "Use one of these records?",
16                     "fields" : [ ]
17                  }
18               ]
19            }
20         ],
21         "httpHeaders" : { },
22         "httpStatusCode" : 200,
23         "referenceId" : "collection1"
24      },
25      {
26         "body" : [
27            {
28               "errorCode" : "PROCESSING_HALTED",
29               "message" : "The transaction was rolled back since another operation in the same transaction failed."
30            }
31         ],
32         "httpHeaders" : { },
33         "httpStatusCode" : 400,
34         "referenceId" : "newContact"
35      }
36   ]
37}

この場合、内側の sObject Collections 要求では allOrNonefalse に設定されているため、すぐにはロールバックされません。ただし、外側の Composite 要求では allOrNonetrue に設定されているため、ロールバックされ、これによって内側の sObject Collections 要求もロールバックされます。

このケースの結果の図

sObject Collections 要求のレスポンスボディで最初の取引先の作成で "success" : true と示されている場合であっても、Composite 要求がロールバックされるため、取引先の作成がロールバックされることになります。最終的な結果として、新規の取引先は作成されません

メモ