AllOrNoneHeader
AllOrNoneHeader ヘッダーでは、正常に処理されないレコードがあった場合に、コールによるすべての変更のロールバックを許可することができます。デフォルトの動作では、コールの部分的な成功を許可します。つまり、エラーのないレコードはコミットされますが、エラーのあったレコードはコールの結果では失敗とマークされます。このヘッダーは、API バージョン 20.0 以降で使用できます。
ヘッダーが有効な場合でも、エラーのあるレコードを特定するには、レコードごとにコールの結果の success 項目を確認する必要があります。すべての success 項目は true または false とマークされ、コールが正常に処理されたかどうかを示します。少なくとも 1 つのレコードに関連するエラーがある場合、レコードのコールの結果の errors 項目でエラーの詳細情報が提供されます。同じコールのその他のレコードにエラーがない場合、errors 項目は同じコールの他のレコードの失敗によりレコードがロールバックされたことを示します。
API コール
項目
| 要素名 | 型 | 説明 |
|---|---|---|
| allOrNone | boolean |
true の場合、コールに失敗したレコードが存在すると、コールに対するすべての変更がロールバックされます。すべてのレコードが正常に処理されない限りレコードの変更はコミットされません。 デフォルトは、false です。一部のレコードは正常に処理されますが、その他のレコードはコールの結果で失敗とマークされます。 |
サンプルコード —Java
このサンプルでは、AllOrNoneHeader の使用方法を示します。2 つの取引先責任者の作成を試みますが、2 番目の取引先責任者について必須項目の一部が設定されていないため、作成に失敗します。次に、このサンプルでは AllOrNoneHeader を true に設定し、取引先責任者を作成するコールを実行します。2 番目の取引先責任者の作成でエラーが発生します。そのため、トランザクション全体がロールバックされ、取引先責任者は作成されません。これは、AllOrNoneHeader が true に設定されていたためです。
1swfobject.registerObject("clippy.codeblock-0", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 public void allOrNoneHeaderSample() {
18 try {
19 // Create the first contact.
20 SObject[] sObjects = new SObject[2];
21 Contact contact1 = new Contact();
22 contact1.setFirstName("Robin");
23 contact1.setLastName("Van Persie");
24
25 // Create the second contact. This contact doesn't
26 // have a value for the required
27 // LastName field so the create will fail.
28 Contact contact2 = new Contact();
29 contact2.setFirstName("Ashley");
30 sObjects[0] = contact1;
31 sObjects[1] = contact2;
32
33 // Set the SOAP header to roll back the create unless
34 // all contacts are successfully created.
35 connection.setAllOrNoneHeader(true);
36 // Attempt to create the two contacts.
37 SaveResult[] sr = connection.create(sObjects);
38 for (int i = 0; i < sr.length; i++) {
39 if (sr[i].isSuccess()) {
40 System.out.println("Successfully created contact with id: " +
41 sr[i].getId() + ".");
42 }
43 else {
44 // Note the error messages as the operation was rolled back
45 // due to the all or none header.
46 System.out.println("Error creating contact: " +
47 sr[i].getErrors()[0].getMessage());
48 System.out.println("Error status code: " +
49 sr[i].getErrors()[0].getStatusCode());
50 }
51 }
52 } catch (ConnectionException ce) {
53 ce.printStackTrace();
54 }
55 }
56}
57