Reflection 如何在Salesforce中描述(枚举)对特定记录类型有效的选取列表实体?

Reflection 如何在Salesforce中描述(枚举)对特定记录类型有效的选取列表实体?,reflection,salesforce,Reflection,Salesforce,在apex代码中,我想枚举一个选择列表字段的合法值。为此,我只需调用Account.Foobar\uuu c.getdescription.getPickListValues,就可以得到Schema.PickListEntry值的列表 但是,可以为给定的sObject设置多个记录类型。例如,帐户可能具有制造商、分销商和零售商记录类型。在Salesforce设置中,可以根据记录类型编辑限制每个字段的选取列表条目。因此,零售商类型的帐户可能只使用Foobar字段的选择列表值的子集 所以基本上我想要A

在apex代码中,我想枚举一个选择列表字段的合法值。为此,我只需调用Account.Foobar\uuu c.getdescription.getPickListValues,就可以得到Schema.PickListEntry值的列表

但是,可以为给定的sObject设置多个记录类型。例如,帐户可能具有制造商、分销商和零售商记录类型。在Salesforce设置中,可以根据记录类型编辑限制每个字段的选取列表条目。因此,零售商类型的帐户可能只使用Foobar字段的选择列表值的子集


所以基本上我想要Account.Foobar\uu c.getdescription.getPickListValues'Retailer',但这不是语法。validFor方法看起来很有希望,但它似乎仅适用于字段相关的选取列表-仅按记录类型筛选的选取列表对于isDependentPicklist返回false。

不幸的是,在纯Apex AFAIK中无法执行此操作。元数据API确实公开了它


相关意见:

我知道这是一篇老文章,但下面的信息可能会帮助那些仍然需要答案的人

我发现,通过调用descripebelayout,实际上可以获得记录类型特定的picklist值列表

使用示例C:

DescribeLayoutResult result = binding.describeLayout("Account", new string[] { "01230000000xxXxXXX" } ); PicklistEntry[] values = result.recordTypeMappings[0].picklistsForRecordType[12345].picklistValues; 将01230000000xxxxxx替换为零售商记录类型对象的RecordTypeId。使用查询selectid fromRecordType,其中Name='Retailer'获取值。 将12345替换为要获取其值的选取列表对象的索引。
正是我需要的!谢谢取而代之的是使用索引器[12345],我发现这在调用之间不一致,我使用了一个LINQ表达式来表示picklist名称。类似于:picklistsForRecordType.SingleOrDefaultpl=>Retailer.Equalspl.picklistName.PickListValues现在可以在Apex中获取有效的。不知道什么时候会发生,但至少在14年春天是可能的