zoukankan      html  css  js  c++  java
  • 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即可。篇中有错误欢迎指出,有问题欢迎留言。

  • 相关阅读:
    878. 第 N 个神奇数字
    Leetcode 239. 滑动窗口最大值
    欢天喜地七仙女——Beta冲刺三
    欢天喜地七仙女——Beta冲刺二
    欢天喜地七仙女——Beta冲刺一
    欢天喜地七仙女——Beta冲刺凡事预则立
    欢天喜地七仙女——Beta冲刺代码规范与计划
    欢天喜地七仙女Alpha总结展望——前事不忘后事之师
    欢天喜地七仙女——Alpha测试随笔
    欢天喜地七仙女——Alpha冲刺总结
  • 原文地址:https://www.cnblogs.com/zero-zyq/p/6251173.html
Copyright © 2011-2022 走看看