在 Apex 中獲得 sObject 的信息

Salesforce 的數據模型是基於 sObject 的。在 Apex 中,全部的標準對象、自定義對象都是繼承自 sObject 的。xcode

關於在 Apex 中獲得 sObject 的信息,咱們要基於兩點來使用:函數

  1. 系統類 Schema 中定義了 DescribeSObjectResult 類來保存一個 sObject 的信息,也提供了若干方法來獲得 sObject 的信息
  2. 每一個 sObject 對象都是一個類,其中有固定的靜態變量和方法來獲得 sObject 自身的信息

詳細的方法能夠查閱官方文檔spa

基本用例

下面用一些基本的例子來講明在 Apex 中獲得 sObject 信息的方法和語法。code

獲得當前 sObject 的類型

使用 getSObjectType() 方法能夠獲得當前 sObject 變量的類型。與此相似,使用 「XXX.sObjectType」 的語法能夠獲得名爲 「XXX」 的 sObject 的類型。htm

// 定義一個 sObject 變量,在此以 Account 爲例
sObject obj = new Account();

// 獲得當前的 sObject 的類型
Schema.sObjectType objType = obj.getSObjectType();

// 確認其類型是不是 Account
System.assertEquals(objType, Account.sObjectType);

一樣的語法能夠用在 sObject 列表變量中。對象

// 定義一個 sObject 列表變量,在此以 Account 爲例
List<sObject> objList = new List<Account>();

// 獲得當前的 sObject 列表的類型
Schema.sObjectType objListType = objList.getSObjectType();

// 確認其類型是不是 Account
System.assertEquals(objListType, Account.sObjectType);

使用 describeSObjects() 函數能夠獲得多個 sObject 類型的信息。繼承

// 定義字符串列表,其中包含若干 sObject 的 API 名稱
List<String> objTypeList = new List<String>{'Account', 'ExampleCustomObj__c'};

// 獲得 Account 和 ExampleCustomObj__c 的信息
Schema.DescribeSobjectResult[] results = Schema.describeSObjects(objTypeList);

獲得當前 sObject 類型的描述

使用 getDescribe() 方法能夠獲得當前 sObject 的類型詳細信息。與此相似,使用 「Schema.sObjectType.XXX」 能夠獲得名爲 「XXX」 的 sObject 的類型詳細信息。文檔

// 獲得 Account 類型的描述信息
Schema.DescribeSObjectResult dsr = Account.sObjectType.getDescribe();

// 確認其信息是 Account 類型的信息
System.assertEquals(dsr, Schema.sObjectType.Account);

獲得字段的信息

Schema 類中定義了 Schema.DescribeFieldResult 類,能夠用來存儲字段的信息。獲得字段信息的方法與上述示例相似。字符串

// 獲得 Account 類型的 Name 字段的信息
Schema.DescribeFieldResult dfr = Schema.sObjectType.Account.fields.Name;

// 獲得字段的信息
Schema.SObjectField fieldInfo = dfr.getSObjectField();

// 確認字段的類型
System.assertEquals(fieldInfo, Account.Name);

// 獲得字段的描述信息
dfr = dfr.getSObjectField().getDescribe();

// 獲得關於 Account 類型全部字段的信息,保存到一個 Map 變量中
Map<String, Schema.SObjectField> fieldMap = Schema.SObjectType.Account.fields.getMap();

關於權限

因爲用戶不必定對 sObject 對象或字段有權限,因此上述代碼在不一樣環境下執行會有不一樣的結果。get

在普通的 Apex 類中執行的時候,用戶的權限沒有影響。

在匿名代碼段中執行的時候,用戶的權限會影響到返回的結果。只有用戶有權限的類型或字段信息纔會返回。

相關文章
相關標籤/搜索