findDuplicates()
ルールに基づいて、重複レコードの検索を実行します。入力は sObject の配列で、それぞれが検索する値と重複ルールを示すオブジェクトの種別を指定します。重複ルールを示すオブジェクトごとに、検出された重複が出力で識別されます。findDuplicates() はルールを値に適用し、検索を実行します。sObject ごとに、検出された重複が出力で識別されます。
構文
1FindDuplicatesResult[] duplicateResults =
2 connection.findDuplicates(SObject[] inputSObjectArray);使用方法
オブジェクトに関連付けられた重複ルールを各 sObject で指定された値に適用するには、findDuplicates() を使用します。各 sObject には、オブジェクトに対応する種別もあります。
findDuplicates() では、sObject と同じ種別のオブジェクトの重複ルールを使用します。たとえば、sObject の種別が取引先の場合、findDuplicates() は Account オブジェクトに関連付けられた重複ルールを使用します。
照合は、sObject で指定された値によって制御されます。値にはレコード ID、項目の対応付け、またはその両方が含まれる可能性があります。指定された値によって、findDuplicates() の動作が決まります。
- レコード ID のみ
- findDuplicates() は、重複ルールで定義されたオブジェクトで同じ ID を持つ既存のレコードを検索します。次に、そのレコードから値を読み込み、それらの値に基づいて重複があるか検索します。
- 項目の対応付けのみ
- findDuplicates() は、対応付けから値を読み込み、それらの値に基づいて重複があるか検索します。
- レコード ID と項目の対応付け
- findDuplicates() は、重複ルールで定義されたオブジェクトで同じ ID を持つ既存のレコードを検索します���対応付けで指定されていないレコードから値を読み込み、次に対応付けから値を読み込みます。値の結合結果に基づいて、findDuplicates() は重複があるか検索します。
findDuplicates() の出力は、入力配列と要素数と順序が同じ FindDuplicatesResult オブジェクトの配列です。重複レコードがある場合、出力オブジェクトには、そのレコード ID がカプセル化されます。必要に応じて、出力オブジェクトには重複レコードからの値も含まれます。
各 FindDuplicatesResult 要素には、DuplicateResult オブジェクトが含まれます。findDuplicates() で sObject の重複が検出されなかった場合、DuplicateResult の duplicateRule 項目には、findDuplicates() が適用した重複ルールの名前が含まれますが、matchResults 配列は空です。
DuplicateRuleHeader の includeRecordDetails フラグが false に設定されている場合、findDuplicates() は一致レコードのレコード ID のみを返します。それ以外の場合、findDuplicates() は、対象オブジェクトに関連付けられた主 CompactLayout で指定されたすべての項目を返します。
ルールとガイドライン
入力配列の最大サイズは 50 です。
基本的な使用手順
- 使用する重複ルールを持つオブジェクトに対応する種別の sObject オブジェクトを 1 つ以上作成します。
- 重複レコードの照合値を指定するために、各 sObject のレコード ID または項目の対応付け (または両方) を設定します。
- 必要な出力を制御するために、DuplicateRuleHeader を設定します。
サンプル
次の Java サンプルは、標準のリード重複ルールを使用してリードの重複を検索する方法を示します。
1SObject[] inputSObjectArray = new SObject[1];
2// Instantiate an empty Java SObject
3SObject searchCriteria = new SObject();
4// Set its type to Lead. This tells findDuplicates() to use the duplicate rules
5// for Lead
6searchCriteria.setType("Lead");
7/*
8 * Set the necessary fields for matching, based on the standard matching rules
9 * for Lead (Search help.salesforce.com for "Standard Contact and Lead Matching
10 * Rule" to see the rules).
11
12 */
13searchCriteria.setField("FirstName", "Mark");
14searchCriteria.setField("LastName", "Benioff");
15searchCriteria.setField("Company", "Salesforce.com Inc");
16searchCriteria.setField("Title", "CEO");
17searchCriteria.setField("Email", "ceo@salesforce.com");
18// Add the sObject to the input array
19inputSObjectArray[0] = searchCriteria;
20/*
21 * By default, findDuplicates() returns only record IDs. To return
22 * additional values, set the second parameter to true.
23 */
24connection.setDuplicateRuleHeader( /* @param allowSave - Not Applicable
25 for this API call */ false,
26 /* @param includeRecordDetails */ false,
27 /* @param runAsCurrentUser - Not
28 Applicable for this API call */ false);
29
30// Invoke findDuplicates() to find duplicates based on the information in the
31// SObject array
32FindDuplicatesResult[] callResults =
33 connection.findDuplicates(inputSObjectArray);
34
35if (callResults == null || callResults.length == 0) {
36 System.out.println("Major error while calling findDuplicates(). Cannot proceed");
37 return;
38}
39
40// Iterate through the results
41// For each SObject in the input array, get the duplicate results
42for (FindDuplicatesResult findDupResult : callResults) {
43 // If errors were found for this SObject, print them out
44 if (!findDupResult.isSuccess()) {
45 for (Error findDupError : findDupResult.getErrors()) {
46 System.out.println("FindDuplicatesRule errors detected: " +
47 findDupError.getMessage());
48 }
49 } else {
50 /*
51 * Get the DuplicateResult object array for the result. Each element in
52 * the array represents the result of testing one duplicate rule for the
53 * SObject. Process each DuplicateResult.
54 * SObject. Process each DuplicateResult
55 */
56 for (DuplicateResult dupeResult : findDupResult.getDuplicateResults()) {
57 System.out.println("Duplicate rule: " +
58 dupeResult.getDuplicateRule());
59 // Print out the name of the object associated with the duplicate
60 // rule
61 System.out.println("Source of this duplicate rule is: " +
62 dupeResult.getDuplicateRuleEntityType());
63 for (MatchResult matchResult : dupeResult.getMatchResults()) {
64 if (!matchResult.isSuccess()) {
65 for (Error e : matchResult.getErrors()) {
66 System.out.println("Errors detected: " +
67 e.getMessage());
68 }
69 } else {
70 System.out.println("Matching rule is: " +
71 matchResult.getRule());
72 System.out.println("Object type for this matching rule is: " +
73 matchResult.getEntityType());
74 for (MatchRecord matchRecord : matchResult.getMatchRecords()) {
75 System.out.println("Duplicate record ID: " +
76 matchRecord.getRecord().getId());
77 }
78 }
79 }
80 }
81 }
82}引数
| 名前 | 型 | 説明 |
|---|---|---|
| sObjects | sObject の配列 | 必須。検索する値が含まれる sObject オブジェクトのリスト。 |
応答
FindDuplicatesResult オブジェクトの配列。
FindDuplicatesResult
入力配列内の 1 つの sObject の重複検索の結果を表します。sObject に関連付けられたオブジェクトには複数の重複ルールを設定できるため、FindDuplicatesResult には DuplicateResult オブジェクトの配列が含まれます。
項目
| 項目名 | データ型 | 説明 |
|---|---|---|
| duplicateResults | DuplicateResult オブジェクトの配列 | findDuplicates() によって 1 つの sObject に適用された各重複ルールの結果。 |
| errors | Error オブジェクトの配列 | findDuplicates() で発生したエラーの配列が含まれます。要素は、入力配列の要素に対応しません。たとえば、入力配列 sObjects に 10 エントリが含まれていても、findDuplicates() で発生したエラーが 1 つのみであれば、errors に含まれる要素は 1 つです。 |
| success | boolean | findDuplicates() でエラーが発生しなかった場合、この項目は true に設定されます。 |