この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Newer Version Available

This content describes an older version of this product. View Latest

リレーションを使用した 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 name

c.Account.Name という式表現や、リレーションを辿るその他の式では、変更する場合と値として参照する場合に若干異なる特徴があります。

  • 値として参照する場合、c.Account が null の場合 c.Account.Namenull と評価されますが、NullPointerException生成されません。これにより、開発者は null 値をチェックする必要なく多段の関係を参照できます。
  • 変更するとき、c.Account が null の場合、c.Account.Name によって NullPointerException が生成されます

メモ

SOSL では、挿入された取引先責任者のデータへのアクセス方法は、前の SOQL の例で使用した SELECT ステートメントに似ています。
1List<List<SObject>> searchList = [FIND 'Acme' IN ALL FIELDS RETURNING Contact(id,Account.Name)]

また、sObject 項目キーは insertupdate、または 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 を挿入します。そのような取引先がない場合、挿入は失敗します。

たとえば、次のコードは上記のコードと同一です。ただし、SOQL クエリを使用するため、上記のコードほど効率的ではありません。このコードが複数回コールされた場合、SOQL クエリ実行制限の最大数に達する場合があります。実行制限の詳細は、「実行ガバナと制限」を参照してください。

1Account refAcct = [SELECT Id FROM Account WHERE externalId__c='12345'];
2
3Contact c = new Contact(Account = refAcct.Id);
4
5insert c;

ヒント