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中查询FieldDefinition
table,例如
/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 链接最简单。
你可以全部拿走
/services/data/v52.0/ui-api/object-info/Account/picklist-values/012...
或像屏幕截图中显示的那样构建链接以获取单个字段的数据。
我正在寻找获取 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中查询FieldDefinition
table,例如
/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 链接最简单。
你可以全部拿走
/services/data/v52.0/ui-api/object-info/Account/picklist-values/012...
或像屏幕截图中显示的那样构建链接以获取单个字段的数据。