この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Apex Describe Information について

トークンまたは describeSObjects Schema メソッドを使用して sObject を記述できます。

Apex は、sObject と項目の Describe Information に関する次の 2 つのデータ構造と 1 つのメソッドを提供します。

  • トークン — 軽量でシリアライズ可能な sObject への参照、またはコンパイル時に検証される項目。トークン Describe に使用されます。
  • describeSObjects メソッド — 1 つ以上の sObject 型で Describe を実行する Schema クラスのメソッド。
  • Describe Result — sObject または項目の Describe プロパティすべてを含む Schema.DescribeSObjectResult 型のオブジェクト。Describe Result オブジェクトは、シリアライズできず、ランタイムで検証されます。この Result オブジェクトは、sObject トークンまたは describeSObjects メソッドを使用して Describe を実行するときに返されます。

トークンを使用した sObject の記述

トークンからその Describe Result まで、または Describe Result からトークンまでの移動は簡単です。sObject と項目トークンには両方とも、トークンの Describe Result を返すメソッド getDescribe があります。Describe Result で、getSObjectType メソッドと getSObjectField メソッドは、sObject と項目にそれぞれのトークンを返します。

トークンは軽量であるため、それを使用すると、コードはより高速で効率的になります。たとえば、コードで使用する必要がある sObject のデータ型または項目を決定するときに、sObject または項目のトークンバージョンを使用します。たとえば、sObject が Account オブジェクトであるかどうか、または項目が Name 項目とカスタム計算項目のどちらであるかを決定するには、等価演算子 (==) を使用してトークンを比較できます。

次のコードは、sObject プロパティと項目プロパティに関する情報にアクセスするための、トークンと Describe Result の使い方の一般的な例を示しています。

1// Create a new account as the generic type sObject
2sObject s = new Account();
3
4// Verify that the generic sObject is an Account sObject
5System.assert(s.getsObjectType() == Account.sObjectType);
6
7// Get the sObject describe result for the Account object
8Schema.DescribeSObjectResult dsr = Account.sObjectType.getDescribe();
9
10// Get the field describe result for the Name field on the Account object
11Schema.DescribeFieldResult dfr = Schema.sObjectType.Account.fields.Name;
12
13// Verify that the field token is the token for the Name field on an Account object
14System.assert(dfr.getSObjectField() == Account.Name);
15
16// Get the field describe result from the token
17dfr = dfr.getSObjectField().getDescribe();

次のアルゴリズムは、Apex で Describe Information を使用できる方法を示しています。

  1. 組織の sObject のトークンのリストまたは対応付けを作成します (「すべての sObject へのアクセス」を参照)。
  2. アクセスする必要がある sObject を決定します。
  3. sObject の Describe Result を生成します。
  4. 必要に応じて、sObject の項目トークンの対応付けを作成します (「sObject のすべての Field Describe Result へのアクセス」を参照)。
  5. コードがアクセスする必要がある Field Describe Result を作成します。

sObject トークンの使用

Account や MyCustomObject__c などの SObject は、トークンと Describe Result にアクセスするための特別な静的メソッドとメンバー変数を持った静的クラスとして機能します。Describe Result へのアクセス権を得るには、コンパイル時に sObject と項目名を明示的に参照する必要があります。

sObject のトークンにアクセスするには、次のいずれかのメソッドを使用します。

  • Account などの sObject データ型の sObjectType メンバー変数にアクセスします。
  • sObject Describe Result、sObject 変数、リスト、または対応付けの getSObjectType メソッドをコールします。

Schema.SObjectType は sObject トークンのデータ型です。

次の例では、Account sObject のトークンが返されます。

1Schema.sObjectType t = Account.sObjectType;

次の例でも Account sObject のトークンが返されます。

1Account a = new Account();
2Schema.sObjectType t = a.getSObjectType();

この例は、sObject または sObject リストが特定のデータ型かどうか判断するために使用されます。

1// Create a generic sObject variable s
2SObject s = Database.query('SELECT Id FROM Account LIMIT 1');
3
4// Verify if that sObject variable is an Account token
5System.assertEquals(s.getSObjectType(), Account.sObjectType);
6
7// Create a list of generic sObjects 
8List<sObject> sobjList = new Account[]{};
9
10// Verify if the list of sObjects contains Account tokens
11System.assertEquals(sobjList.getSObjectType(), Account.sObjectType);

一部の標準 sObject には、sObjectType と呼ばれる項目があります。たとえば、AssignmentRule、QueueSObject、および RecordType があります。これらのデータ型の sObject は、トークンの取得する場合は常に getSObjectType メソッドを使用します。プロパティを使用する場合 (たとえば RecordType.sObjectType)、項目が返されます。

トークンを使用した sObject Describe Result の取得

sObject の Describe Result にアクセスするには、次のいずれかのメソッドを使用します。
  • sObject トークンの getDescribe メソッドをコールします。
  • sObject の名前が付いている Schema sObjectType 静的変数を使用します。たとえば、Schema.sObjectType.Lead です。

Schema.DescribeSObjectResult は sObject Describe Result のデータ型です。

次の例では、sObject トークンで getDescribe メソッドを使用します。

1Schema.DescribeSObjectResult dsr = Account.sObjectType.getDescribe();
次の例では、Schema sObjectType 静的メンバー変数を使用します。
1Schema.DescribeSObjectResult dsr = Schema.SObjectType.Account;

sObject Describe Result で使用可能なメソッドについての詳細は、「DescribeSObjectResultClass/>」を参照してください。