sObject を使用する
学習の目的
この単元を完了すると、次のことができるようになります。
- sObject レコードと Salesforce レコード間のリレーションを説明する。
- 特定の sObject 変数を作成して使用する。
- 汎用 sObject を特定の sObject にキャストする。
sObject を使用する
Apex はデータベースと緊密に統合されているため、Salesforce レコードとその項目に Apex から直接アクセスできます。Salesforce のすべてのレコードは、Apex の sObject としてネイティブに表現されます。たとえば、Acme 取引先レコードは Apex の Account sObject に対応します。ユーザーインターフェースで表示および変更できる Acme レコードの項目は、sObject でも直接読み込みや変更ができます。
次の表は、Acme 取引先サンプルレコードのいくつかの入力済み項目を示します。Account sObject は、取引先レコードの抽象化であり、取引先項目情報をメモリ内にオブジェクトとして保持します。
表 1.取得されたレコードの Account sObject
取引先項目 |
値 |
---|---|
Id |
001D000000JlfXe |
名前 |
Acme |
電話 |
(415) 555-1212 |
NumberOfEmployees |
100 |
各 Salesforce レコードは、Salesforce に挿入される前は sObject として表されます。同様に、Salesforce から保持されているレコードが取得されると、sObject 変数として保存されます。
Salesforce の標準およびカスタムオブジェクトレコードは、Apex ではその sObject 型に対応付けられます。Apex では、次のような標準オブジェクトの sObject 型名がよく利用されます。
- 取引先
- 取引先責任者
- リード
- 商談
組織にカスタムオブジェクトを追加している場合、Apex ではカスタムオブジェクトの API 名を使用します。たとえば、Merchandise というカスタムオブジェクトは Apex の Merchandise__c sObject に対応します。
sObject 変数を作成する
sObject を作成するには、変数を宣言して、sObject インスタンスを割り当てる必要があります。変数のデータ型は sObject 型です。
次の例では、Acme という名前で Account 型の sObject を作成して、acct
変数に割り当てます。
Account acct = new Account(Name='Acme');
sObject と項目名
Apex では、一意の API 参照名を使用して、標準またはカスタムの sObject とその項目を参照します。
オブジェクトと項目の API 名は、その表示ラベルとは異なる場合があります。たとえば、Employees 項目の表示ラベルは「Employees」で、取引先レコードページに「Employees」(従業員数) と表示されますが、API 名は NumberOfEmployees です。Apex でこの項目にアクセスするには、項目の API 名である NumberOfEmployees を使用する必要があります。
カスタムオブジェクトとカスタム項目の API 名に使用されるルールの要点を次に示します。
カスタムオブジェクトとカスタム項目の場合、API 名は常に __c サフィックスで終わります。カスタムリレーション項目の場合、API 名は __r サフィックスで終わります。次に例を示します。
- カスタムオブジェクトの表示ラベルが Merchandise の場合、API 名は Merchandise__c になります。
- カスタム項目の表示ラベルが Description の場合、API 名は Description__c になります。
- カスタムリレーション項目の表示ラベルが Items の場合、API 名は Items__r になります。
さらに、API 名では、表示ラベルのスペースがアンダースコアに置き換えられます。たとえば、カスタム項目名が Employee Seniority の場合、API 名は Employee_Seniority__c になります。
オブジェクトと項目名を確認する
Apex で使用する標準オブジェクトとその項目を確認するには、『Object Reference for Salesforce Platform (Salesforce Platform のオブジェクトリファレンス)』を参照してください。
標準オブジェクトとカスタムオブジェクトのどちらの場合も、組織のオブジェクトおよび項目の API 参照名を検索します。[設定] から、[ホーム] タブの右側にある [オブジェクトマネージャー] タブをクリックして、オブジェクト名をクリックします。
sObject の作成と項目の追加を行う
Salesforce レコードを挿入するには、事前にレコードをメモリ内に sObject として作成しておく必要があります。ほかのオブジェクトと同様に、sObject は new
演算子を使用して作成されます。
Account acct = new Account();
API オブジェクト名が Apex の sObject 変数のデータ型になります。この例では、Account
が、acct
変数のデータ型です。
acct
変数で参照される取引先は、その項目がまだ入力されていないため空です。項目を追加するには、コンストラクターを使用する方法と、ドット表記を使用する方法の 2 つがあります。
項目を最もすばやく追加できるのは、コンストラクター内部に名前-値ペアとして指定する方法です。たとえば、次のステートメントは 新規取引先 sObject を作成し、その名前項目に文字列値を入力します。
Account acct = new Account(Name='Acme');
取引先の必須項目は名前項目のみです。つまり、新規レコードを挿入するには、名前項目に値が入力されている必要があります。一方、新規レコードのほかの項目にも入力できます。次の例では、電話番号と従業員数も追加しています。
Account acct = new Account(Name='Acme', Phone='(415)555-1212', NumberOfEmployees=100);
または、ドット表記を使用して項目を sObject に追加できます。次の例は、前の例と同等ですが、コードが数行多くなっています。
Account acct = new Account(); acct.Name = 'Acme'; acct.Phone = '(415)555-1212'; acct.NumberOfEmployees = 100;
汎用 sObject データ型を操作する
通常、sObject を操作する場合には、標準オブジェクトの Account やカスタムオブジェクトの Book__c など、特定の sObject データ型を使用します。ただし、メソッドで処理する sObject のデータ型が不明な場合は、汎用 sObject データ型を使用できます。
汎用 sObject データ型で宣言された変数は、標準オブジェクトレコードかカスタムオブジェクトレコードを問わず、任意の Salesforce レコードを参照できます。
次の例は、取引先やカスタムオブジェクト (Book__c) などの Salesforce オブジェクトを汎用 sObject 変数に割り当てられるようにする方法を示します。
sObject sobj1 = new Account(Name='Trailhead'); sObject sobj2 = new Book__c(Name='Workbook 1');
一方、特定の sObject データ型で宣言される変数が参照できるのは、同じデータ型の Salesforce レコードのみです。
汎用 sObject を特定の sObject 型にキャストする
汎用 sObject を処理するとき、sObject 変数から特定の sObject 型へのキャストが必要になる場合があります。これを行う利点の 1 つは、ドット表記を使用して項目にアクセスできることです。これは汎用 sObject ではできません。sObject は、特定の sObject 型すべての親データ型であるため、汎用 sObject を特定の sObject にキャストできます。次の例は、汎用 sObject を Account にキャストする方法を示します。
// Cast a generic sObject to an Account Account acct = (Account)myGenericSObject; // Now, you can use the dot notation to access fields on Account String name = acct.Name; String phone = acct.Phone;
もうひとこと...
汎用 sObject の項目にアクセスするには、put()
メソッドと get()
メソッドを使用する必要があります。
この単元では、sObject の概要とその使用方法を学習しました。ただし、sObject を作成しても、データベースにレコードとして保持されません。sObject をレコードとして保存し、そのレコードに別の処理を行うには、Data Manipulation Language (DML) を使用します。レコードを取得するには、Salesforce Object Query Language (SOQL) を使用します。DML と SOQL については、後の単元で学習します。
リソース
- Salesforce Platform のオブジェクトリファレンス
- Apex 開発者ガイド: sObject の操作
- Apex 開発者ガイド: SObject のメソッド