salesforce零基础学习(八十七)Apex 中Picklist类型通过Control 字段值获取Dependent List 值

群里面有个小伙伴询问了一个关于两个有Dependence关系的Picklist字段如何在Apex中通过control字段的值获取到Dependence字段的值,针对Salesforce配置来说,我们很好配置出两个Dependence字段的关系,通过点击设置一下include关系即可。如下图,我们在Goods__c自定义表中新建了两个Picklist类型字段,并且设置了依赖关系,这个在配置中清晰可见,如何在代码中获取呢?

salesforce零基础学习(八十七)Apex 中Picklist类型通过Control 字段值获取Dependent List 值

首先我们最先想到的肯定是通过metadata,查一下Schema命名空间下的类得方法有没有直接可以搞定需求的,针对Picklist值,通常处理的类为Schema.PicklistEntry以及Schema.DescribeFieldResult这两个类,然而这两个类的API中并没有直接可以搞定需求的,只能判断出当前的字段是否为空值字段等信息。既然标准的API没有提供,那么就得想办法搞定了。我的第一次想法是这样的,尽管这种方式最终确认是失败的。

一.将两个依赖字段放置在页面中,Util方法读取页面中指定元素从而获取Control字段的某一个值情况下Dependence的值集合。(此方法已确认失败)

salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type) 写过关于读取中间页面获取含Record Type的Picklist field Values,是不是也可以将中间页面写两个apex:inputField设置级联关系,通过参数将需要读取的内容获取出来,从而实现需求?

1.PicklistParserController作为中间页的Controller,获取参数信息,通过参数对数据进行初始化处理。

public without sharing class PicklistParserController { public Sobject sobj {get;set;} public String picklistFieldName {get;set;} public String dependentPicklistListFieldName { get; set; } public String picklistFieldValue { get; set; } public PicklistParserController() { Map<String, String> requestMap = ApexPages.currentPage().getParameters(); String sobjId = requestMap.get('id'); String recordTypeId = requestMap.get('recordTypeId'); String sobjectTypeName = requestMap.get('sobjectType'); this.pickListFieldName = requestMap.get('picklistFieldName'); this.dependentPicklistListFieldName = requestMap.get('dependentPicklistListFieldName'); this.picklistFieldValue = requestMap.get('picklistFieldValue'); Schema.SobjectType sobjectType = null; if (sobjectTypeName != null && sobjectTypeName.trim().length() > 0) { sobjectType = Schema.getGlobalDescribe().get(sobjectTypeName); sobj = sobjectType.newSobject(); sobj.put('RecordTypeId', recordTypeid); if(picklistFieldValue != null) { sobj.put(pickListFieldName,picklistFieldValue); } } else if (sobjId != null && sobjId.trim().length() > 0) { // find the so for (SobjectType sobjType : Schema.getGlobalDescribe().values()){ String sobjPrefix = sobjType.getDescribe().getKeyPrefix(); if (sobjPrefix == null) continue; if (sobjId.toLowerCase().startsWith(sobjPrefix.toLowerCase())) { sobjectType = sobjType; break; } } sobj = Database.query ('SELECT ' + pickListFieldName + ',' + dependentPicklistListFieldName + ' FROM ' + sobjectType + ' WHERE ID =:sobjId'); } System.debug(LoggingLevel.INFO, '*** sobj: ' + JSON.serialize(sobj)); } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyyfyw.html