レコード内のリレーション項目
Salesforce のオブジェクトの多くは、別のオブジェクトに関連付けられています。たとえば、取引先は取引先責任者の親オブジェクトです。別のオブジェクトではなく、同じオブジェクトに関連付けられるというケースもあります。たとえば、取引先責任者の [上司] 項目は、別の取引先責任者を参照します。
XML ファイルでは、次に示す構文を使用して、関連付けられたオブジェクトへの参照を追加できます。RelationshipName は項目のリレーション名、IndexedFieldName は親レコードを一意に識別するインデックス化された項目の名前を示します。
1<RelationshipName>
2 <sObject>
3 <IndexedFieldName>rwilliams@salesforcesample.com</IndexedFieldName>
4 </sObject>
5</RelationshipName>リレーション名を確認するには、SOAP ベースの SOAP API で、describeSObjects() コールを使用して項目の relationshipName プロパティの値を取得します。さらに、親レコードを一意に識別するために、インデックス化された項目を指定する必要があります。標準項目は、idLookup プロパティの値が true に設定されている場合、インデックス化されています。
次のサンプルには、[上司] 項目を含む取引先責任者レコードが記述されています。この項目は、別の取引先責任者レコードを参照します。ReportsTo は、[上司] 項目の relationshipName プロパティの値です。この例では、取引先責任者レコードの [上司] 項目が参照する親レコードも取引先責任者レコードであり、Email 項目の値に基づいて親レコードを識別します。Email 項目の idLookup プロパティの値は true であるため、この項目はインデックス化されています。項目に idLookup プロパティが存在するかどうかを確認するには、「標準オブジェクト」で、各オブジェクトの項目リストの「項目のプロパティ」列を参照してください。
1<?xml version="1.0" encoding="UTF-8"?>
2<sObjects xmlns="http://www.force.com/2009/06/asyncapi/dataload">
3 <sObject>
4 <FirstName>Ray</Name>
5 <LastName>Riordan</Description>
6 <ReportsTo>
7 <sObject>
8 <Email>rwilliams@salesforcesample.com</Email>
9 </sObject>
10 </ReportsTo>
11 </sObject>
12</sObjects>XML ファイルでリレーションを使用する場合は、次の点に注意します。
- 子から親へのリレーションを使用できます。親から子へのリレーションは使用できません。
- 子から親へのリレーションを拡張して使用することはできません。つまり、子から親へのリレーションを参照し、さらに親からその親へのリレーションを参照することはできません。
カスタムオブジェクトのリレーション項目
カスタムオブジェクトでは、カスタム項目を使用してオブジェクト間のリレーションを追跡します。2 つのカスタムオブジェクト間のリレーションを示すには、__r (アンダースコア 2 つと「r」) で終わるリレーション名を使用します。関連オブジェクトへの参照は、インデックス化された項目を使用して追加できますが、カスタム項目は、外部 ID 属性が選択されている [外部 ID] 項目である場合、インデックス化されています。
たとえば、子オブジェクトに、あるカスタムオブジェクトを親として参照する Mother_Of_Child__c という [API 参照名]を持つカスタム項目があり、親となるオブジェクトに External_ID__c という [API 参照名]を持つ項目がある場合は、項目のリレーション名である Mother_Of_Child__r の relationshipName プロパティによって、リレーションを参照していることを示します。さらに、親オブジェクトの [外部 ID] 項目を使用して、[子の母親] 項目を一意に識別します。リレーション名には、子オブジェクトのカスタム項目の__cを__rで置き換えた値を使用します。リレーションについての詳細は、www.salesforce.com/us/developer/docs/soql_sosl/index.htm にある『Salesforce SOQL および SOSL リファレンスガイド』の「リレーション名について」を参照してください。
リレーションを使用した XML ファイルの例を次に示します。
1<?xml version="1.0" encoding="UTF-8"?>
2<sObjects xmlns="http://www.force.com/2009/06/asyncapi/dataload">
3 <sObject>
4 <Name>CustomObject1</Name>
5 <Mother_Of_Child__r>
6 <sObject>
7 <External_ID__c>123456</External_ID__c>
8 </sObject>
9 </Mother_Of_Child__r>
10 </sObject>
11</sObjects>多態的な項目でのリレーション
多態的な項目では、2 種類以上のオブジェクトを親として参照できます。たとえば、取引先責任者またはリードを ToDo の親にすることができます。つまり、ToDo の WhoId 項目に取引先責任者またはリードの ID を含めることができます。多態的な項目は柔軟性が高く、リレーション項目の構文に、親オブジェクトの種別を定義する要素を追加できるようになっています。次に XML ファイルの例を示します。RelationshipName は項目のリレーション名、ObjectTypeName は親レコードのオブジェクトの種別、IndexedFieldName は親レコードを一意に識別するインデックス化された項目の名前を示します。
1<RelationshipName>
2 <sObject>
3 <type>ObjectTypeName</type>
4 <IndexedFieldName>rwilliams@salesforcesample.com</IndexedFieldName>
5 </sObject>
6</RelationshipName>後続のサンプルには、次の 2 つの参照項目が含まれています。
- WhoId: これは多態的な項目であり、Who という relationshipName が使用されています。ここでは、リードを参照し、インデックス化された [メール] 項目を使用して親レコードを一意に識別します。
- OwnerId: この項目は多態性を持たず、Owner という relationshipName が使用されています。ユーザを参照し、インデックス化された Id 項目を使用して親レコードを一意に識別します。
1<?xml version="1.0" encoding="UTF-8"?>
2<sObjects xmlns="http://www.force.com/2009/06/asyncapi/dataload">
3 <sObject>
4 <Subject>Test Bulk API polymorphic reference field</Subject>
5 <Priority>Normal</Priority>
6 <Status>Not Started</Status>
7 <Who>
8 <sObject>
9 <type>Lead</type>
10 <Email>lead@salesforcesample.com</Email>
11 </sObject>
12 </Who>
13 <Owner>
14 <sObject>
15 <Id>005D0000001AXYz</Id>
16 </sObject>
17 </Owner>
18 </sObject>
19</sObjects>