Salesforce 的數據模型是基於 sObject 的。在 Apex 中,全部的標準對象、自定義對象都是繼承自 sObject 的。xcode
關於在 Apex 中獲得 sObject 的信息,咱們要基於兩點來使用:函數
詳細的方法能夠查閱官方文檔。spa
下面用一些基本的例子來講明在 Apex 中獲得 sObject 信息的方法和語法。code
使用 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);
使用 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 類中執行的時候,用戶的權限沒有影響。
在匿名代碼段中執行的時候,用戶的權限會影響到返回的結果。只有用戶有權限的類型或字段信息纔會返回。