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文档,如果本篇有写错的地方欢迎批评指正。有疑问可以下方留言相互交流。

               图1

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏全沾开发(huā)

co源码解读

co源码解读 背景: 闲来无事,翻了下co的源码来看,源码短小精悍,算上注释,一共240行左右; 决定写一篇博客来记录下学习的心得。 ...

3366
来自专栏老码农专栏

原 荐 OSGL 工具库 - 类型转换的艺术

1433
来自专栏性能与架构

认识一下 Java 11

可能很多人现在 Java8 的新特性还没用熟呢,Java 11 就已经来了,下面一起来看下 Java 11 的几个新特性:

912
来自专栏君赏技术博客

关于对类别 延展 协议 一些属性声明词的用法

如果想给已经封装好的类添加方法 比如给UIButton添加一个异步下载图片的方法可以使用分类。比如我们要增加的方法需要实例变量很多 里面要用到很多的实例变量来执...

643
来自专栏Golang语言社区

Go-List

要点 Element表示链表的一个元素,List表示链表 访问元素的值: .Value list是双向链表,可以在指定的位置插入元素 初始化: New()。——...

28010
来自专栏Android知识点总结

Java总结IO篇之其他IO流对象

622
来自专栏微信公众号:Java团长

Java多态性理解

多态存在的三个必要条件 一、要有继承; 二、要有重写; 三、父类引用指向子类对象。

783
来自专栏函数式编程语言及工具

Scala Macros - 元编程 Metaprogramming with Def Macros

    Scala Macros对scala函数库编程人员来说是一项不可或缺的编程工具,可以通过它来解决一些用普通编程或者类层次编程(type level pr...

2519
来自专栏WindCoder

Java代理1 代理和动态代理的基础与使用

预计分两篇写,第一篇是基础和一般用法,第二篇详细写下动态代理。本篇基础主要来自《Think in java》阅读笔记。

721
来自专栏Spring相关

SpringMVC+Thymeleaf 处理表单提交

thymleaf处理表单提交的方式和jsp有些类似,也有点不同之处,这里操作一个小Demo,并说明:

3114

扫码关注云+社区