salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)
Posted zero.zhang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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即可。篇中有错误欢迎指出,有问题欢迎留言。
以上是关于salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)的主要内容,如果未能解决你的问题,请参考以下文章
salesforce 零基础学习(六十)Wizard样式创建数据
salesforce 零基础学习(六十三)Comparable实现Object列表数据的自定义排序
salesforce 零基础学习(六十一)apex:component简单使用以及图片轮转播放的实现
salesforce 零基础学习(五十二)Trigger使用篇