delete()
構文
1DeleteResult[] = connection.delete(ID[] ids);使用方法
delete() を使用して、個別の取引先や取引先責任者など、組織のデータ内にある 1 つ以上の既存レコードを削除します。delete() コールは SQL の DELETE ステートメントに類似しています。
ルールとガイドライン
オブジェクトを削除する際は、次のルールやガイドラインを考慮する必要があります。
- 指定したオブジェクト内の個別のオブジェクトを削除するには、クライアントアプリケーションは、実行に十分なアクセス権限でログインする必要があります。詳細は、「データアクセスに影響する要素」を参照してください。
- また、オブジェクトの親オブジェクトへのアクセス権限も必要となる場合があります。特別なアクセス要件については、「標準オブジェクト」のオブジェクトの説明を参照してください。
- 参照整合性を確実にするために、delete() コールは、カスケード削除をサポートします。親オブジェクトを削除すると、各子オブジェクトが削除可能な場合は自動的に削除されます。たとえば、Case を削除すると、API はケースに関連付けられたすべての CaseComment、CaseHistory および CaseSolution オブジェクトを自動的に削除します。ただし、CaseComment が削除可能でない場合、または現在使用中の場合、親 Case オブジェクトの delete() コールは失敗します。
- 特定のオブジェクトは、API からは削除できません。delete() コールを使用してオブジェクトを削除するには、オブジェクトを削除可能に設定する (deletable を true にする) 必要があります。指定されたオブジェクトが削除可能かどうかを確認するには、クライアントアプリケーションでオブジェクトに対する describeSObjects() コールを実行し、deletable プロパティを確認します。
- 複数のオブジェクト種別のレコードは、いずれかのオブジェクト種別が Salesforce の [設定] 領域の機能に関連していると、1 回のコールで削除することはできません。唯一の例外は次のオブジェクトです。
- カスタム設定のオブジェクト。カスタムオブジェクトに類似しています。詳細は、Salesforce オンラインヘルプの「カスタムデータセットの作成」を参照してください。
- GroupMember
- Group
- User
エラー時のロールバック
AllOrNoneHeader ヘッダーを使用すると、すべてのレコードが正常に処理されない限り、すべての変更をロールバックできます。このヘッダーは、API バージョン 20.0 以降で使用できます。正常に処理されないレコードがあった場合に、コールですべての変更をロールバックできます。
レコード削除の基本手順
レコードは、次の基本手順に従って削除します。
サンプルコード —Java
このサンプルでは、レコード ID に基づいてレコードを削除する方法を示します。このサンプルのメソッドは、ID の配列を受け取ります。この ID の配列を delete() コールに渡し、コールを実行します。次に、その結果を解析し、削除されたレコードの ID をコンソールに書き込むか、削除が失敗した場合は最初に返されるエラーを書き込みます。
1public void deleteRecords(String[] ids) {
2 try {
3 DeleteResult[] deleteResults = connection.delete(ids);
4 for (int i = 0; i < deleteResults.length; i++) {
5 DeleteResult deleteResult = deleteResults[i];
6 if (deleteResult.isSuccess()) {
7 System.out
8 .println("Deleted Record ID: " + deleteResult.getId());
9 } else {
10 // Handle the errors.
11 // We just print the first error out for sample purposes.
12 Error[] errors = deleteResult.getErrors();
13 if (errors.length > 0) {
14 System.out.println("Error: could not delete " + "Record ID "
15 + deleteResult.getId() + ".");
16 System.out.println(" The error reported was: ("
17 + errors[0].getStatusCode() + ") "
18 + errors[0].getMessage() + "\n");
19 }
20 }
21 }
22 } catch (ConnectionException ce) {
23 ce.printStackTrace();
24 }
25}サンプルコード —C#
このサンプルでは、レコード ID に基づいてレコードを削除する方法を示します。このサンプルのメソッドは、ID の配列を受け取ります。この ID の配列を delete() コールに渡し、コールを実行します。次に、その結果を解析し、削除されたレコードの ID をコンソールに書き込むか、削除が失敗した場合は最初に返されるエラーを書き込みます。
1public void deleteRecords(String[] ids)
2{
3 try
4 {
5 DeleteResult[] deleteResults = binding.delete(ids);
6 for (int i = 0; i < deleteResults.Length; i++)
7 {
8 DeleteResult deleteResult = deleteResults[i];
9 if (deleteResult.success)
10 {
11 Console.WriteLine("Deleted Record ID: " + deleteResult.id);
12 }
13 else
14 {
15 // Handle the errors.
16 // We just print the first error out for sample purposes.
17 Error[] errors = deleteResult.errors;
18 if (errors.Length > 0)
19 {
20 Console.WriteLine("Error: could not delete " + "Record ID "
21 + deleteResult.id + ".");
22 Console.WriteLine(" The error reported was: ("
23 + errors[0].statusCode + ") "
24 + errors[0].message + "\n");
25 }
26 }
27 }
28 }
29 catch (SoapException e)
30 {
31 Console.WriteLine("An unexpected error has occurred: " +
32 e.Message + "\n" + e.StackTrace);
33 }
34}