如何判断 SObject 字段是否实现了全局值集?



我在单个 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__cDurableId的值将01Ixxxxx.00Nyyyy.

作为找出 DurableId 的替代方法,如果您需要在标准或自定义对象上拉取自定义字段的元数据,则通过工具CustomFieldAPI 更容易对抗实体:

/services/data/<api version>/tooling/query?q=SELECT+Id,Metadata,DeveloperName+FROM+CustomField+WHERE+DeveloperName='State'

DeveloperName的值与管理 UI 中自定义字段定义页面上的字段名称字段的值相同。

最新更新