以前介绍过PickList类型的声明以及赋值,可是如何取出呢?一个sObject对象能够理解为一条数据。经过sObject直接取恐怕很难作到,由于他只会显示一个值。这时候就要用到Schema命名空间中的类与方法以及System命名空间下的Schema类来实现。java
Schema类学习
Schema命名空间和Schema类不是同一个概念。Schema类属于System命名空间下,Schema命名空间包含不少类处理Schema元数据信息。spa
Schema类的方法包含schema 信息描述。debug
Schema类主要方法以下:3d
返回一个map,这个map表示全部的sObject名称(key)到sObject tokens(value)的map,其中tokens能够为在你的项目中标准的和自定义的Object对象。code
这个map具备如下的特征:对象
1.动态的,根据权限在运行时生成sObject;blog
2.sObject名称不区分大小写;token
3.key能够映射出Object是不是一个自定义对象;文档
4.key若是是标准的sObject则不须要前缀,不然须要加命名空间的前缀。
返回一个与指定的对象关联的类别组列表.
返回指定的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