sObject を使用する
学習の目的
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 and Lightning Platform (Salesforce および Lightning 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 データ型で宣言された変数は、標準オブジェクトレコードかカスタムオブジェクトレコードを問わず、任意の 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 および Lightning プラットフォームのオブジェクトリファレンス
- Apex 開発者ガイド: sObject の操作
- Apex 開発者ガイド: SObject のメソッド