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

本篇引用以下三个链接:

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即可。篇中有错误欢迎指出,有问题欢迎留言。

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码字搬砖

Hbase原理详解

首先指出图片的一个错误,Hlog应该属于HRegionserver的,不应该在HRegion中。

1263
来自专栏Java3y

移动商城第六篇【单品查询、静态化页面】

单品页查询 当点击某个商品的时候,查看该商品的详细信息: ? 修改每个商品的超链接: <a href="${path}/ite...

3707
来自专栏叔叔的博客

SpringCloud Config的实现

本文配置中心使用的git 一、config-client发送请求 ConfigServicePropertySourceLocator.locate(..) E...

2649
来自专栏五毛程序员

五毛的cocos2d-x学习笔记07-计时器、数据读写、文件读写

1815
来自专栏JackieZheng

Spring实战——XML和JavaConfig的混合配置

前言 看了园龄已经两年多了,再不能写完内容直接点击发布,留下一片密密麻麻的文字让别人看的头昏脑涨。所以现在每次写完主要内容后,还需要对于格式稍稍调整下。那么有没...

2136
来自专栏张善友的专栏

Sqlite介绍

1、SQLite简介 SQLite第一个Alpha版本诞生于2000年5月. 至今已经有4个年头了. 而在今年的5月SQLite也迎来了一个新的里程: SQL...

1959
来自专栏跟着阿笨一起玩NET

C# 地磅串口编程

然后最近有一个项目用到了地磅,这里也是通过串口通讯方式进行数据交互,说实话,地磅这东西,实在有点不方便。

721
来自专栏C# 编程

C# 基于泛型的自定义线性节点链表集合示例

本例子实现了如何自定义线性节点集合,具体代码如下: using System; using System.Collections; using System.C...

1850
来自专栏一个爱瞎折腾的程序猿

mvc一对多模型表单的快速构建

Q:在实际的开发中,经常会遇到一个模型中包含有多个条目的表单。如何将数据提交到后台? A: 以数组的形式提交到后台就Ok了(真的那么简单么,如果再嵌套一层呢?...

1502
来自专栏岑玉海

hbase源码系列(十)HLog与日志恢复

HLog概述 hbase在写入数据之前会先写入MemStore,成功了再写入HLog,当MemStore的数据丢失的时候,还可以用HLog的数据来进行恢复,下面...

3528

扫码关注云+社区