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
変数に割り当てます。
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
演算子を使用して作成されます。
API オブジェクト名が Apex の sObject 変数のデータ型になります。この例では、Account
が、acct
変数のデータ型です。
acct
変数で参照される取引先は、その項目がまだ入力されていないため空です。項目を追加するには、コンストラクターを使用する方法と、ドット表記を使用する方法の 2 つがあります。
項目を最もすばやく追加できるのは、コンストラクター内部に名前-値ペアとして指定する方法です。たとえば、次のステートメントは 新規取引先 sObject を作成し、その名前項目に文字列値を入力します。
取引先の必須項目は名前項目のみです。つまり、新規レコードを挿入するには、名前項目に値が入力されている必要があります。一方、新規レコードの他の項目にも入力できます。次の例では、電話番号と従業員数も追加しています。
または、ドット表記を使用して項目を sObject に追加できます。次の例は、前の例と同等ですが、コードが数行多くなっています。
汎用 sObject データ型を操作する
汎用 sObject データ型で宣言された変数は、標準オブジェクトレコードかカスタムオブジェクトレコードを問わず、任意の Salesforce レコードを参照できます。

次の例は、取引先やカスタムオブジェクト (Book__c) などの Salesforce オブジェクトを汎用 sObject 変数に割り当てられるようにする方法を示します。
一方、特定の sObject データ型で宣言される変数が参照できるのは、同じデータ型の Salesforce レコードのみです。

汎用 sObject を特定の sObject 型にキャストする
汎用 sObject を処理するとき、sObject 変数から特定の sObject 型へのキャストが必要になる場合があります。これを行う利点の 1 つは、ドット表記を使用して項目にアクセスできることです。これは汎用 sObject ではできません。sObject は、特定の sObject 型すべての親データ型であるため、汎用 sObject を特定の sObject にキャストできます。次の例は、汎用 sObject を Account にキャストする方法を示します。
もうひとこと...
汎用 sObject の項目にアクセスするには、put()
メソッドと get()
メソッドを使用する必要があります。
この単元では、sObject の概要とその使用方法を学習しました。ただし、sObject を作成しても、データベースにレコードとして保持されません。sObject をレコードとして保存し、そのレコードに他の処理を行うには、Data Manipulation Language (DML) を使用します。レコードを取得するには、Salesforce Object Query Language (SOQL) を使用します。DML と SOQL については、後の単元で学習します。
リソース
- Salesforce および Lightning プラットフォームのオブジェクトリファレンス
- Apex 開発者ガイド: sObject の操作
- Apex 開発者ガイド: SObject のメソッド