Salesforce 对象描述有大数据,如何从 salesforce 对象描述中获取有限的数据,如选择列表值

Salesforce object describe has big data, how to get limited data like picklist values from salesforce object describe

我正在寻找获取 salesforce 对象的字段和选择列表的方法。我可以通过在对象名称后使用 /describe 的 REAT API 调用来实现。但有时返回的 JSON 数据非常大,其中 95% 的额外数据是我不想要的,具有重复的模式字符串。

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

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

这是我目前使用的

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

唯一 API 可能 适用于您的用例的是 UI API, which is intended to provide the information a client would need to render the UI for a record or object. For example, the Get Object Metadata 端点可能(或可能不)满足您的需求。它的响应体也不是特别小。

您无法过滤描述数据。您已经在使用 API.

的最小范围版本

可以在工具API中查询FieldDefinitiontable,例如

/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 行被 returned。因此,如果您需要 3 个选择列表 - 即 3 个 API 调用...

它将return“主”选项列表,不按记录类型过滤。

还有一个有趣的 table 叫做 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')

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

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...

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