Salesforce中的picklist数据类型,API值与标签值的获取

本文介绍了在Salesforce的Apex代码中如何处理Picklist类型的字段,包括通过getDescribe()获取DescribeFieldResult对象,以及使用getPicklistValues()方法遍历Picklist选项。提供了静态和动态方式获取Picklist值的代码示例,并强调在赋值时应关注APIName。此外,文章还提醒在创建对象后查看Picklist列表值的位置。
摘要由CSDN通过智能技术生成

1.先上图,这是我在标准对象Account里自定义的一个picklist数据类型字段,取名为account_level

Picklist类型字段的属性展示

2.在编写代码前,我们首先要弄清楚Values和API Name的区别

  • Values:在salesforce页面所展示的值,就像对象(Object)的Name一样
  • API Name:我们在APEX代码中会使用到的值,例如当我们将某个Picklist类型的字段赋值成为2,如下
Account al = new Account();
al.Name = 'test';
al.account_level__c = '2';  //account_level__c 是自定义字段,picklist类型
insert al;

3.然后我们就会看到如下的数据被插入了
在这里插入图片描述
4.这说明我们在apex中操作代码时只需要关注API Name,随后Salesforce会帮我们自动映射成对应的Values

5.有了上面的基本认知,就可以开始下面的代码操作

直接获取Picklist类型对象的值

  • 对于picklist类型的对象,可以通过getDescribe()方法得到DescribeFieldResult 对象
Schema.DescribeFieldResult fieldResult = Account.Type.getDescribe();
  • 再通过getPicklistValues()方法,可以得到Schema.PicklistEntry 的集合,对其进行for循环遍历
for(Schema.PicklistEntry str : fieldResult.getPicklistValues()){
	System.debug(str.getValue());  //得到Values
	System.debug(str.getLabel());  //得到API Name
}

完整代码

  • 注意:Type必须是picklist类型的对象(标准对象或自定义对象)
Schema.DescribeFieldResult fieldResult = Account.Type.getDescribe();

for(Schema.PicklistEntry str : fieldResult.getPicklistValues()){
	System.debug(str.getValue());  //得到Values
	System.debug(str.getLabel());  //得到API Name
}

动态获取Picklist类型对象的值

  • 为了实现动态的效果,我们可以写一个方法,该方法根据传入的对象类型和对象字段进行动态获取下拉列表的值
// 1.根据传入的对象名objectName得到DescribeSObjectResult 对象
DescribeSObjectResult objResult = Schema.describeSObjects(new List<String>{objectName});

// 2.根据DescribeSObjectResult 和字段名selectField得到DescribeFieldResult 对象
DescribeFieldResult fieldResult = objResult.fields.getMap()
                                  .get(selectedField).getDescribe();
                                  
// 3.有了DescribeFieldResult 对象,我们就可以对其进行遍历
for(Schema.PicklistEntry str : fieldResult.getPicklistValues()){
	str.isActive();							  //判断该列表值是否被激活
	System.debug(str.getValue());  //得到API值
	System.debug(str.getLabel());  //得到标签值
}


完整代码

public static Map<String, String> picklistValues(String objectName, String fieldName) {
    Map<String, String> picklistMap= new Map<String, String>{};

    List<Schema.DescribeSobjectResult> results = Schema.describeSObjects(new List<String>{objectName});

    for(Schema.DescribeSobjectResult res : results) {
        for (Schema.PicklistEntry entry : res.fields.getMap().get(fieldName).getDescribe().getPicklistValues()) {
            if (entry.isActive()) {
                values.put(entry.getValue(), entry.getLabel());
            }
        }
    }

    return values;
}

至此,picklist的apex操作就演示完成了。
值得注意的是,在创建对象后还想查看picklist的列表值:
需要点击以下位置,而不是编辑按钮
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值