Skip to main content

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 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 レコードを参照可能

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

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 の項目にアクセスするには、put() メソッドと get() メソッドを使用する必要があります。

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

無料で学習を続けましょう!
続けるにはアカウントにサインアップしてください。
サインアップすると次のような機能が利用できるようになります。
  • 各自のキャリア目標に合わせてパーソナライズされたおすすめが表示される
  • ハンズオン Challenge やテストでスキルを練習できる
  • 進捗状況を追跡して上司と共有できる
  • メンターやキャリアチャンスと繋がることができる