本篇引用以下三个链接:

http://www.tgerm.com/2012/01/recordtype-specific-picklist-values.html?m=1

https://github.com/abhinavguptas/Multi-RecordType-Sobject-Picklist-Describer

http://bobbuzzard.blogspot.com/2012/01/record-type-picklist-values.html

我们知道,record type可以设置不同的profile针对类型为picklist的字段显示不同的values,但是apex的API中,通过schema取出的Picklist的values为全部的值,并不能直接通过指定的方法取出指定的values。通过上述三个链接可以很好的解决。

原理图如下:

用法:

1.通过Record ID获取其对应的record type name 以及类型为picklist的field values。

2.通过sObjectType,Record Type Name以及field Name 获取类型为picklist的field values。

其实,每个customer object都会有一个recordtype字段,用来记录当前的record的record type id。所以如果仅仅想在页面上通过record id获取当前record 具有的field 的picklist values,只需要用<apex:inputField>来盛装此字段即可.inputField可以根据字段的类型显示不同的样式。

PicklistController:通过URL传递的不同参数进行不同的处理,点击按钮后显示所选的项的value

public with sharing class PicklistController {
public Goods__c goods {get;set;}
public String pickListFieldName {get;set;} public PicklistController() {
Map<String, String> req = ApexPages.currentPage().getParameters();
PageReference ref = ApexPages.currentPage();
//设置当前的页面开发模式开启
//ref.getParameters().put('core.apexpages.devmode.url', '1');
String goodsId = req.get('id');
this.pickListFieldName = req.get('picklistFieldName');
String recordTypeId = req.get('recordTypeId');
goods = new Goods__c();
if(goodsId != null) {
goods = [SELECT GoodsBrand__c, RecordTypeId FROM Goods__c where Id=:goodsId limit 1];
}
if(goods.RecordTypeId == null) {
goods.put('RecordTypeId', recordTypeId);
}
} public void showSelectedValue() {
ApexPages.addMessage(new ApexPages.Message(ApexPages.SEVERITY.INFO,goods.GoodsBrand__c));
}
}

 PickListDemoPage:显示相关record type对应的picklist items以及button显示所选择的picklist的value值

<apex:page controller="PicklistController"
showHeader="false" sidebar="false" >
<apex:form >
<apex:pageMessages />
<apex:inputField value="{!goods[pickListFieldName]}"/>
<apex:commandButton action="{!showSelectedValue}" value="显示所选值"/>
</apex:form> </apex:page>

效果:

1.通过record id获取此record的record type应该具有的picklist values

2.通过record type id获取相关字段应该具有的picklist values

总结:如果需要在apex中获取相关的picklist values然后进行相关后续处理可以参看上方引用的链接以及源码,如果只是想要页面中显示相关使用record type的picklist values,则可以对相关object配置相关的record type id,前台使用apex:inputField即可。篇中有错误欢迎指出,有问题欢迎留言。

salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)的更多相关文章

  1. salesforce零基础学习(八十七)Apex 中Picklist类型通过Control 字段值获取Dependent List 值

    注:本篇解决方案内容实现转自:http://mysalesforceescapade.blogspot.com/2015/03/getting-dependent-picklist-values-fr ...

  2. salesforce 零基础学习(十六)Validation Rules & Date/time

    上一篇介绍的内容为Formula,其中的Date/time部分未指出,此篇主要介绍Date/time部分以及Validation rules. 本篇参考PDF: Date/time:https://r ...

  3. salesforce零基础学习(一百二十)快去迁移你的代码中的 Alert / Confirm 以及 Prompt吧

    本篇参考: https://developer.salesforce.com/blogs/2022/01/preparing-your-components-for-the-removal-of-al ...

  4. salesforce零基础学习(九十二)使用Ant Migration Tool 实现Metadata迁移

    我们在做项目时经常会使用changeset作为部署工具,但是某些场景使用changeset会比较难操作,比如当我们在sandbox将apex class更改名字想要部署到生产的org或者其他环境的or ...

  5. salesforce 零基础学习(十九)Permission sets 讲解及设置

    Permission sets以及Profile是常见的设置访问权限的方式. Profile规则为'who see what'.通过Profile可以将一类的用户设置相同的访问权限.对于有着相同Pro ...

  6. salesforce 零基础学习(十八)WorkFlow介绍及用法

    说起workflow大家肯定都不陌生,这里简单介绍一下salesforce中什么情况下使用workflow. 当你分配许多任务,定期发送电子邮件,记录修改时,可以通过自动配置workflow来完成以上 ...

  7. salesforce零基础学习(八十二)审批邮件获取最终审批人和审批意见

    项目中,审批操作无处不在.配置审批流时,我们有时候会用到queue,related user设置当前步骤的审批人,审批人可以一个或者多个.当审批人有多个时,邮件中获取当前记录的审批人和审批意见就不能随 ...

  8. salesforce 零基础学习(五十二)Trigger使用篇(二)

    第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...

  9. salesforce 零基础学习(六十八)http callout test class写法

    此篇可以参考: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_restfu ...

随机推荐

  1. 自定义基于 VLC 的视频播放器

    前言(蛋疼的背景故事) 前段时间,接了一个小项目,有个需求是要在系统待机一段时间以后,循环播放 MV(类似于 Windows 系统的屏幕保护). 听到这个需求,我首先想到的是 MediaPlayer ...

  2. B树——算法导论(25)

    B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...

  3. 前端框架 EasyUI (0) 重新温习(序言)

    几年前,参与过一个项目.那算是一个小型的信息管理系统,BS 结构的,前端用的是基于 jQuery 的 EasyUI 框架. 我进 Team 的时候,项目已经进入开发阶段半个多月了.听说整个项目的框架是 ...

  4. nodejs创建http服务器

    之前有简单介绍nodejs的一篇文章(http://www.cnblogs.com/fangsmile/p/6226044.html) HTTP服务器 Node内建有一个模块,利用它可以很容易创建基本 ...

  5. 谈谈一些有趣的CSS题目(九)-- 巧妙的实现 CSS 斜线

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  6. Oracle数据库该如何着手优化一个SQL

    这是个终极问题,因为优化本身的复杂性实在是难以总结的,很多时候优化的方法并不是用到了什么高深莫测的技术,而只是一个思想意识层面的差异,而这些都很可能连带导致性能表现上的巨大差异. 所以有时候我们应该先 ...

  7. Unity3D框架插件uFrame实践记录(二)

    5.创建属性和命令 本小节主要内容包括: 在Element节点上创建属性数据 在Element节点上创建命令数据 5.1.在Element节点上创建属性数据 在这里,我们首先为Login节点中的属性( ...

  8. EntityFramework的多种记录日志方式,记录错误并分析执行时间过长原因(系列4)

    前言 Entity Framework 延伸系列目录 今天我们来聊聊EF的日志记录. 一个好的数据库操作记录不仅仅可以帮你记录用户的操作, 更应该可以帮助你获得效率低下的语句来帮你提高运行效率 废话不 ...

  9. c#比较两个数组的差异

    将DataTable中某一列数据直接转换成数组进行比较,使用的Linq,要引用命名空间using System.Linq; string[] arrRate = dtRate.AsEnumerable ...

  10. C# 数组的交集、差集、并集

    C# 数组的交集.差集.并集 工作中经常会用这方面的知识来检查那些字段是必须输入的,那些是禁止输入. using System; using System.Collections.Generic; u ...