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 を使用できる方法を示しています。
- 組織の sObject のトークンのリストまたは対応付けを作成します (「すべての sObject へのアクセス」を参照)。
- アクセスする必要がある sObject を決定します。
- sObject の Describe Result を生成します。
- 必要に応じて、sObject の項目トークンの対応付けを作成します (「sObject のすべての Field Describe Result へのアクセス」を参照)。
- コードがアクセスする必要がある Field Describe Result を作成します。
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 トークンの getDescribe メソッドをコールします。
- sObject の名前が付いている Schema sObjectType 静的変数を使用します。たとえば、Schema.sObjectType.Lead です。
Schema.DescribeSObjectResult は sObject Describe Result のデータ型です。
次の例では、sObject トークンで getDescribe メソッドを使用します。
1Schema.DescribeSObjectResult dsr = Account.sObjectType.getDescribe();1Schema.DescribeSObjectResult dsr = Schema.SObjectType.Account;sObject Describe Result で使用可能なメソッドについての詳細は、「DescribeSObjectResult クラス」を参照してください。