【问题标题】:How to describe (enumerate) picklist enties valid for a specific record type in Salesforce?如何描述(枚举)对 Salesforce 中的特定记录类型有效的选项列表实体?
【发布时间】:2011-10-18 16:46:59
【问题描述】:

在顶点代码中,我想枚举一个选项列表字段的合法值。为此,我可以调用Account.Foobar__c.getDescribe().getPickListValues(),并且我有一个 Schema.PickListEntry 值列表。

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

所以基本上我想要Account.Foobar__c.getDescribe().getPickListValues('Retailer') 但这不是语法。 validFor 方法看起来很有希望,但它似乎只适用于依赖于字段的选项列表 - 仅按记录类型过滤的选项列表对于 isDependentPicklist 返回 false。

【问题讨论】:

    标签: reflection salesforce


    【解决方案1】:

    我知道这是一篇旧帖子,但也许下面的信息会对仍然需要答案的人有所帮助。

    我发现here 实际上可以通过调用 describeLayout() 来获取特定于记录类型的选项列表值的列表。

    使用您的示例 (C#):

    DescribeLayoutResult 结果 = binding.describeLayout("Account", new string[] { "01230000000xxXxXXX" } ); PicklistEntry[] values = result.recordTypeMappings[0].picklistsForRecordType[12345].picklistValues;
    • 用您的零售商记录类型对象的 RecordTypeId 替换 "01230000000xxXxXXX"。使用查询“SELECT Id FROM RecordType WHERE Name = 'Retailer'”来获取值。
    • 12345 替换为您希望获取值的选项列表对象的索引。

    【讨论】:

    • 正是我需要的!谢谢。代替使用索引器 [12345],我发现调用之间不一致,我使用 LINQ 表达式按选择列表名称。类似于:picklistsForRecordType.SingleOrDefault(pl=>"Retailer".Equals(pl.picklistName).picklistValues
    【解决方案2】:

    不幸的是,您无法在纯 Apex AFAIK 中做到这一点。元数据 API 确实公开了它。

    相关意见:http://boards.developerforce.com/t5/Apex-Code-Development/Any-way-to-obtain-picklist-values-by-record-type/td-p/287563

    【讨论】:

    • 现在可以在 Apex 中获取 validFor。不知道什么时候会发生,但至少从 14 年春季开始就有可能
    猜你喜欢
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    相关资源
    最近更新 更多