【问题标题】:Salesforce object describe has big data, how to get limited data like picklist values from salesforce object describeSalesforce 对象描述有大数据,如何从 Salesforce 对象描述中获取有限的数据,如选项列表值
【发布时间】:2021-10-11 19:05:49
【问题描述】:

我正在寻找获取销售人员对象的字段和选项列表的方法。我可以通过在对象名称后使用/describe 进行 REAT API 调用来做到这一点。但有时返回的 JSON 数据非常大,有 95% 的额外数据是我不想要的,带有重复的模式字符串。

这太低效了,无法提取所有数据,这些数据实际上可能高达 2.8Mb,只是为了获取我需要的小信息。

如何查询查询过滤此数据以获得更具体的结果?或者有没有更好的方法来获取字段的选项列表,或者来自/describe 的那个大 json 的任何其他子数据?

这是我目前使用的

https://[myinstance].salesforce.com/services/data/v51.0/sobjects/Casedata/describe

【问题讨论】:

    标签: salesforce soql


    【解决方案1】:

    例如可以在Tooling API中查询FieldDefinition

    /services/data/v52.0/tooling/query?q=SELECT+Metadata+FROM+FieldDefinition+WHERE+EntityDefinitionId+=+'Account'+AND+QualifiedApiName+=+'Status__c'

    (...)
    "valueSet" : {
            "controllingField" : null,
            "restricted" : true,
            "valueSetDefinition" : {
              "sorted" : false,
              "value" : [ {
                "color" : null,
                "default" : false,
                "description" : null,
                "isActive" : null,
                "label" : "Prospect",
                "urls" : null,
                "valueName" : "Prospect"
              }, {
                "color" : null,
                "default" : false,
                "description" : null,
                "isActive" : null,
                "label" : "Live",
                "urls" : null,
                "valueName" : "Live"
              }, {
                "color" : null,
                "default" : false,
                "description" : null,
                "isActive" : null,
                "label" : "Cancelled",
                "urls" : null,
                "valueName" : "Cancelled"
              }
    (...)
    

    选项列表值将位于 Metadata 字段中,但要查询它,您需要确保只返回 1 行。因此,如果您需要 3 个选项列表 - 那就是 3 个 API 调用...

    它将返回“主”选项列表,而不是按记录类型过滤。

    还有一个有趣的表格叫做PicklistValueInfo。描述的不是太好,是EntityParticle的相关列表。您可以查询以在 1 次中获取多个选项列表值

    SELECT DurableId,EntityParticleId,IsActive,Label,Value 
    FROM PicklistValueInfo
    WHERE EntityParticle.EntityDefinition.DeveloperName = 'Account' AND 
    (DurableId LIKE 'Account.Industry%' OR DurableId LIKE 'Account.Type%')
    ORDER BY DurableId
    

    或者使用它相关的列表样式(可能更接近于 describe 调用的结果?)

    SELECT DataType, FieldDefinition.QualifiedApiName,
        (SELECT Value, Label FROM PicklistValues)
    FROM EntityParticle 
    WHERE EntityDefinition.QualifiedApiName ='Account'
        AND QualifiedApiName IN ('Industry', 'Type', 'Status__c')
    

    如果您使用记录类型 - David 链接到的 UI API 是最简单的。

    https://developer.salesforce.com/docs/atlas.en-us.uiapi.meta/uiapi/ui_api_resources_picklist_values_collection.htm

    你可以把它们都抓起来

    /services/data/v52.0/ui-api/object-info/Account/picklist-values/012...

    或者像屏幕截图中显示的那样构建链接来获取单个字段的数据。

    【讨论】:

      【解决方案2】:

      可能适用于您的用例的唯一其他 API 是 UI API,它旨在提供客户端呈现记录或对象的 UI 所需的信息。例如,Get Object Metadata 端点可能(或可能不)适合您的需求。它的响应体也不是特别小。

      您无法过滤描述数据。您已经在使用该 API 的最小范围版本。

      【讨论】:

        猜你喜欢
        • 2012-09-17
        • 1970-01-01
        • 1970-01-01
        • 2011-09-21
        • 1970-01-01
        • 1970-01-01
        • 2016-09-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多