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

  • 相关阅读:
    jQuery..1..基本使用..选择
    ORZ各路神犇
    马上搞定Android平台的Wi-Fi Direct开发
    Linux环境下搭建Android开发环境
    笑谈接口回调
    AIDL通信原理
    某个Java面试题
    直接下载SpringBoot项目本地的Excel文件
    用JSP做后台管理系统
    Singleton
  • 原文地址:https://www.cnblogs.com/zero-zyq/p/6251173.html
Copyright © 2011-2022 走看看