salesforce 零基礎開發入門學習(七)PickList的value值獲取

    以前介紹過PickList類型的聲明以及賦值,可是如何取出呢?一個sObject對象能夠理解爲一條數據。經過sObject直接取恐怕很難作到,由於他只會顯示一個值。這時候就要用到Schema命名空間中的類與方法以及System命名空間下的Schema類來實現。java

Schema類學習

    Schema命名空間和Schema類不是同一個概念。Schema類屬於System命名空間下,Schema命名空間包含不少類處理Schema元數據信息。spa

    Schema類的方法包含schema 信息描述。debug

    Schema類主要方法以下:3d

  • public static Map<String, Schema.SObjectType> getGlobalDescribe():

    返回一個map,這個map表示全部的sObject名稱(key)到sObject tokens(value)的map,其中tokens能夠爲在你的項目中標準的和自定義的Object對象。code

    這個map具備如下的特徵:對象

    1.動態的,根據權限在運行時生成sObject;blog

    2.sObject名稱不區分大小寫;token

    3.key能夠映射出Object是不是一個自定義對象;文檔

    4.key若是是標準的sObject則不須要前綴,不然須要加命名空間的前綴。

  • public static List<Schema.DescribeDataCategoryGroupResult> describeDataCategoryGroups(String sObjectNames)

    返回一個與指定的對象關聯的類別組列表.

  • public static List<Schema.DescribeSObjectResult> describeSObjects(List<String> sObjectTypes)

    返回指定的sObject的描述信息。一般能夠先調用getGlobalDescribe()方法獲取組織中全部的對象列表,而後經過迭代遍歷使用此方法獲取指定的單個的sObject的元數據信息。

Schema命名空間

    Schema命名空間下的類和方法用來處理schema 元信息(metadata),當實例化或者使用Schema類或者方法的時候,能夠省略Schema命名空間。

    如下的代碼中封裝了PickList的values的值的獲取方法,形參分別爲須要獲取的sObjectName以及字段的名稱,若是不存在指定的sObjectName或者字段名稱沒有設置返回值,else代碼塊中,須要的童鞋能夠自行設定不存在狀況下返回的內容。Schema命名空間中主要類的學習能夠參照代碼中的類查看相關方法。

 1 public class PickListValuesUtil {
 2 /*
 3         經過sObjectName和指定字段獲取PickList的value值
 4     */
 5     public static Map<String, object> getPicklistValues(String sObjectName, String sFieldName){
 6         Map<String, object> picValues= new Map<String, object>();
 7         Map<String, Schema.SObjectType> sObjectDescribeMap = Schema.getGlobalDescribe();
 8         if (sObjectDescribeMap.containsKey(sObjectName)) {
 9             Map<String, Schema.SobjectField> sObjectFieldsMap = 
10                sObjectDescribeMap.get(sObjectName).getDescribe().fields.getMap();
11             if (sObjectFieldsMap.containsKey(sFieldName)) {
12                 Schema.DescribeFieldResult sObjectFieldDescribe = sObjectFieldsMap.get(sFieldName).getDescribe();
13                 List<Schema.PicklistEntry> lPickEntryList = sObjectFieldDescribe.getPicklistValues();
14                 for (Schema.PicklistEntry tPicklistEntry : lPickEntryList) {
15                     picValues.put(tPicklistEntry.getValue(), new Map<String,object>{
16                         'value' => tPicklistEntry.getValue(),
17                         'isActive' => tPicklistEntry.isActive(),
18                         'isDefaultValue' => tPicklistEntry.isDefaultValue(),
19                         'label' => tPicklistEntry.getLabel()
20                     });
21                 }
22             } else {
23                 //TODO 不存在此字段的執行
24             }
25         } else {
26             // TODO 不存在此sObject的執行
27         }
28         return picValues;
29     }
30 }

調用方式以下所示:

Student__c具備Education__c字段,而且聲明類型爲PickList.value值如圖1所示。經過輸出Map用來更好的查看Map內容。

Map<String,object> educationValues = SchemaUtil.getPicklistValues('Student__c','Education__c');
System.debug(educationValues);

輸出結果Map集合以下所示:

{

    初中={isActive=true, isDefaultValue=false, label=初中, value=初中},

    博士生={isActive=true, isDefaultValue=false, label=博士生, value=博士生},

    大學={isActive=true, isDefaultValue=false, label=大學, value=大學},

    小學={isActive=true, isDefaultValue=false, label=小學, value=小學},

    教授={isActive=true, isDefaultValue=false, label=教授, value=教授},

    研究生={isActive=true, isDefaultValue=false, label=研究生, value=研究生},

    高中={isActive=true, isDefaultValue=false, label=高中, value=高中}

}

若是想獲取PickList的全部Value值,只須要取出集合後,經過Map的keySet()方法即可以獲取全部value內容,若是須要獲取相應的Entry信息,能夠經過Map的value值。  

本篇只是經過封裝的方法簡單講解獲取PickList的value值,若是想要詳細瞭解Schema命名空間以及System命名空間下的Schema類以及System命名空間下的sObject類,請查看官方API文檔,若是本篇有寫錯的地方歡迎批評指正。有疑問能夠下方留言相互交流。

                                                                                                        圖1

相關文章
相關標籤/搜索