查找 Salesforce 全局值集的 ID

Finding the ID of a Salesforce Global Value Set

我正在尝试编写一个 APEX class,它将向全局值集添加项目,但为了这样做,我需要知道全局值集的 ID。有没有办法找到选择列表字段正在使用的全局值集的 ID(通过 APEX,而不是通过查看 URL)?理想情况下,我可以做类似的事情:

Case.picklistField__c.getdescribe();

并获得一个响应,其中包含它使用的全局值集的 ID - 这样我就可以使用我的元数据API 来更新值。

或者,如果我可以通过名称找到全局值集,我可以将其与元数据一起使用 api 作为解决方法。

更新:能够使用 Eyescreams 建议和工具 API - 完整实现:​​

    String gvsName = 'TestValueSet'; //name of the global valueset you want the Id for goes here

    HttpRequest req = new HttpRequest();
    req.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionID());
    req.setHeader('Content-Type', 'application/json');      
    req.setEndpoint(URL.getSalesforceBaseUrl().toExternalForm()+'/services/data/v41.0/tooling/query/?q=select+id+from+globalvalueset+Where+developername='+gvsName);
    req.setMethod('GET');
    Http httpreq = new Http();
    HttpResponse res  = httpreq.send(req);
    system.debug(res.getBody()); 
SELECT Id, FullName, Description
FROM GlobalValueSet

但它在直接 Apex 查询中不可用,您需要 Tooling API(意味着 REST 标注)。您可以在 Developer Console -> Query Editor 中使用它,只需选中底部的工具 api 复选框

现在你需要像这样转义变量:

String gvsName = 'TestValueSet'; //name of the global valueset you want the Id for goes here

HttpRequest req = new HttpRequest();
req.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionID());
req.setHeader('Content-Type', 'application/json');      
req.setEndpoint(URL.getSalesforceBaseUrl().toExternalForm()+'/services/data/v48.0/tooling/query/?q=select+id+from+globalvalueset+Where+developername=\''+gvsName+'\'');
req.setMethod('GET');
Http httpreq = new Http();
HttpResponse res  = httpreq.send(req);
system.debug(res.getBody());