我在单个 sObject 上有多个字段,它们都使用相同的全局值集。 我希望能够根据这些字段的值执行操作。 如果要使用相同的 GVS 添加新字段,我不想更改我的代码。 如何判断字段使用哪些 GVS?
您必须通过 Tooling REST API 拉取字段定义的元数据。资源 URI:
/services/data/<api version>/tooling/query?q=SELECT+Id,Label,DurableId,Metadata+FROM+FieldDefinition+WHERE+DurableId='...'
产生此响应,<api_version>
= 46.0(为清楚起见,Id 已编辑,许多字段被删除(:
{
"size" : 1,
"totalSize" : 1,
"done" : true,
"queryLocator" : null,
"entityTypeName" : "FieldDefinition",
"records" : [ {
"attributes" : {
"type" : "FieldDefinition",
"url" : "/services/data/v46.0/tooling/sobjects/FieldDefinition/01I..."
},
"Id" : "000...",
"Label" : "State",
"DurableId" : "01I...00N...",
"QualifiedApiName" : "State__c",
"Metadata" : {
...
"valueSet" : {
"controllingField" : null,
"restricted" : true,
"valueSetDefinition" : null,
"valueSetName" : "usa_states",
"valueSettings" : null
},
....
}
} ]
}
如果valueSet
键存在,并且子键valueSetName
具有 null 以外的值,则意味着此字段是由全局值集支持的选项列表。valueSetName
的值是全局值集的名称。
若要从实体FieldDefinition
检索Metadata
字段,工具API 查询必须只返回 1 条记录。如果返回的记录超过 1 条,您将看到误导性MALFORMED_QUERY错误消息。
要只返回 1 条记录,查询DurableId
是一种方法。对于标准对象,DurableId
的值很容易构造 - 它是<Object Name>.<Field Name>
格式的串联。例如,对于标准Account
对象,其Id
字段的持久 id 值为Account.Id
,相应的 REST 资源将是
/services/data/<api version>/tooling/query?q=SELECT+Id,Label,DurableId,Metadata+FROM+FieldDefinition+WHERE+DurableId='Account.Id'
对于自定义对象,持久 ID 的值的格式为<object definition id>.<field definition id>
(两个 id 之间的时间段是有意的(。注意:这些不是对象和/或字段的记录(例如实例(的 ID;它们是对象和字段定义的ID。 如果我们有一个 id 为01I...
的自定义对象Truck__c
和一个 id 为00N...
的自定义字段State__c
,DurableId
的值将01Ixxxxx.00Nyyyy
.
作为找出 DurableId 的替代方法,如果您需要在标准或自定义对象上拉取自定义字段的元数据,则通过工具CustomField
API 更容易对抗实体:
/services/data/<api version>/tooling/query?q=SELECT+Id,Metadata,DeveloperName+FROM+CustomField+WHERE+DeveloperName='State'
DeveloperName
的值与管理 UI 中自定义字段定义页面上的字段名称字段的值相同。