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

本篇引用如下三个连接:html

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

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

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

咱们知道,record type能够设置不一样的profile针对类型为picklist的字段显示不一样的values,可是apex的API中,经过schema取出的Picklist的values为所有的值,并不能直接经过指定的方法取出指定的values。经过上述三个连接能够很好的解决。this

原理图以下:url

用法:spa

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

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

其实,每一个customer object都会有一个recordtype字段,用来记录当前的record的record type id。因此若是仅仅想在页面上经过record id获取当前record 具备的field 的picklist values,只须要用<apex:inputField>来盛装此字段便可.inputField能够根据字段的类型显示不一样的样式。orm

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

相关文章
相关标签/搜索