天天看點

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

    之前介紹過PickList類型的聲明以及指派,但是如何取出呢?一個sObject對象可以了解為一條資料。通過sObject直接取恐怕很難做到,因為他隻會顯示一個值。這時候就要用到Schema命名空間中的類與方法以及System命名空間下的Schema類來實作。

Schema類

    Schema命名空間和Schema類不是同一個概念。Schema類屬于System命名空間下,Schema命名空間包含很多類處理Schema中繼資料資訊。

    Schema類的方法包含schema 資訊描述。

    Schema類主要方法如下:

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

    傳回一個map,這個map表示所有的sObject名稱(key)到sObject tokens(value)的map,其中tokens可以為在你的項目中标準的和自定義的Object對象。

    這個map具有以下的特征:

    1.動态的,根據權限在運作時生成sObject;

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

    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文檔,如果本篇有寫錯的地方歡迎批評指正。有疑問可以下方留言互相交流。

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

                                                                                                        圖1

作者:zero

部落格位址:http://www.cnblogs.com/zero-zyq/

本文歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接

個人下載下傳了一些相關學習的PDF檔案,如果需要下載下傳請通路百度雲 點選此處通路 密碼:jhuy

如果文章的内容對你有幫助,歡迎點贊~

為友善手機端檢視部落格,現正在将部落格遷移至微信公衆号:Salesforce零基礎學習,歡迎各位關注。