リレーションを使用した sObject 項目へのアクセス
sObject レコードは、ID と、関連付けられた sObject の表示を示すアドレスの 2 つの項目によって他のレコードとの関係を表します。たとえば、Contact sObject には種別が ID の AccountId 項目と、関連付けられた sObject 自体を示す、種別が取引先の Account 項目があります。
ID 項目を使用して取引先責任者と関連する取引先を変更したり、sObject 参照項目を使用して取引先のデータにアクセスしたりできます。参照項目は、SOQL クエリまたは SOSL クエリの結果としてのみ入力されます (注意を参照)。
たとえば、次の Apex コードは、取引先と取引先責任者を相互に関連付ける方法と、取引先責任者を使用して取引先の項目を変更する方法を示します。
1Account a = new Account(Name = 'Acme');
2insert a; // Inserting the record automatically assigns a
3 // value to its ID field
4Contact c = new Contact(LastName = 'Weissman');
5c.AccountId = a.Id;
6// The new contact now points at the new account
7insert c;
8
9// A SOQL query accesses data for the inserted contact,
10// including a populated c.account field
11c = [SELECT Account.Name FROM Contact WHERE Id = :c.Id];
12
13// Now fields in both records can be changed through the contact
14c.Account.Name = 'salesforce.com';
15c.LastName = 'Roth';
16
17// To update the database, the two types of records must be
18// updated separately
19update c; // This only changes the contact's last name
20update c.Account; // This updates the account nameSOSL では、挿入された取引先責任者のデータへのアクセス方法は、前の SOQL の例で使用した SELECT ステートメントに似ています。
1List<List<SObject>> searchList = [FIND 'Acme' IN ALL FIELDS RETURNING Contact(id,Account.Name)]また、sObject 項目キーは insert、update、または upsert 時に、外部 ID による外部キー解決に使用されます。次に例を示します。
1Account refAcct = new Account(externalId__c = '12345');
2
3Contact c = new Contact(Account = refAcct, LastName = 'Kay');
4
5insert c;新しい取引先責任者に、external_id が「12345」である取引先と同じ AccountId を挿入します。そのような取引先がない場合、挿入は失敗します。