Tune in to Trailblazers Innovate for Salesforce product news,
demos, and latest roadmaps. Register here.
close
進行状況の追跡を始めよう
Trailhead のホーム
Trailhead のホーム

sObject の使用

学習の目的

この単元を完了すると、次のことができるようになります。
  • sObject レコードと Salesforce レコード間のリレーションを説明する。
  • 特定の sObject 変数を作成して使用する。
  • 汎用 sObject を特定の sObject にキャストする。

sObject の使用

Apex はデータベースと緊密に統合されているため、Apex から直接 Salesforce レコードとその項目にアクセスできます。すべての Salesforce のレコードは、Apex の sObject としてネイティブに表現されます。たとえば、Acme 取引先レコードは Apex の Account sObject に対応します。ユーザインターフェースで表示および変更できる Acme レコードの項目は、sObject でも直接読み込みや変更ができます。

次の表は、Acme 取引先サンプルレコードのいくつかの入力済み項目を示します。Account sObject は、取引先レコードの抽象化であり、取引先項目情報をメモリ内にオブジェクトとして保持します。

表 1. 取得されたレコードの Account sObject
取引先項目
Id 001D000000JlfXe
Name Acme
Phone (415) 555-1212
NumberOfEmployees 100

各 Salesforce レコードは、Salesforce に挿入される前は sObject として表されます。同様に、Salesforce から保持されているレコードが取得されると、sObject 変数として保存されます。

Salesforce の標準およびカスタムオブジェクトレコードは、Apex ではその sObject 型に対応付けられます。Apex では、次のような標準オブジェクトの sObject 型名がよく利用されます。

  • Account
  • Contact
  • Lead
  • Opportunity

組織にカスタムオブジェクトを追加している場合、Apex ではカスタムオブジェクトの API 名を使用します。たとえば、Merchandise というカスタムオブジェクトは Apex の Merchandise__c sObject に対応します。

sObject 変数の作成

sObject を作成するには、変数を宣言して、sObject インスタンスに割り当てる必要があります。変数のデータ型は sObject 型です。

次の例では、Account 型の sObject 変数を作成して、Acme という名前の新規取引先に割り当てます。

Account acct = new Account(Name='Acme');

sObject と項目名

sObject の名前は、対応する標準またはカスタムオブジェクトの API 名に対応します。同様に、sObject 項目の名前は、対応する項目の API 名に対応します。

オブジェクトと項目の 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 を操作する場合には、標準オブジェクトの Account やカスタムオブジェクトの Book__c など、特定の sObject データ型を使用します。ただし、メソッドで処理する sObject のデータ型が不明な場合は、汎用 sObject データ型を使用できます。

汎用 sObject データ型で宣言された変数は、標準オブジェクトレコードかカスタムオブジェクトレコードを問わず、任意の Salesforce レコードを参照できます。

汎用 sObject 変数は任意の Salesforce レコードを参照可能

次の例は、汎用 sObject 変数を、取引先とカスタムオブジェクト (Book__c) のどちらの Salesforce オブジェクトにも割り当てられるようにする方法を示します。

sObject sobj1 = new Account(Name='Trailhead');
sObject sobj2 = new Book__c(Name='Workbook 1');

一方、特定の sObject データ型で宣言される変数が参照できるのは、同じデータ型の Salesforce レコードのみです。

特定の 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 型とは異なり、汎用 sObject は、newSObject() メソッドでのみ作成できます。また、汎用 sObject の項目にアクセスするには、put() メソッドおよび get() メソッドを使用する必要があります。

この単元では、sObject の概要とその使用方法を学習しました。ただし、sObject を作成しても、データベースにレコードとして保持されません。sObject をレコードとして保存し、そのレコードに他の処理を行うには、Data Manipulation Language (DML) を使用します。レコードを取得するには、Salesforce Object Query Language (SOQL) を使用します。DML と SOQL については、後の単元で学習します。