我正在尝试在我的查询中获取字段集上的字段,原因是我们正在使用托管包,如果字段集为空,最终可以在无限循环中结束,我们的组织中有数百个字段集如果我们一眼就能知道哪一个没有正确创建或者有空字段,那将非常有用,从之前的帖子我能够得到以下工具API查询,为每个字段集提供了大量信息,但是我不知道我知道如何在该查询中合并该字段集中的字段,任何帮助都将非常有用
SELECT EntityDefinitionId, EntityDefinition.Namespaceprefix, EntityDefinition.DeveloperName,
Id, DeveloperName, Description, CreatedDate, CreatedBy.Name
FROM FieldSet where EntityDefinition.DeveloperName='Loan' and developername like 'UI_R1%'
ORDER BY EntityDefinitionId, Id
答案 0 :(得分:0)
我认为用普通的SOQL或工具API查询FieldSetMember
表是不可能的。您可以实现Metadata API来获取类似于它们存储在Eclipse中的sObject定义。
我认为他们没有构建API访问权限,因为它不需要太多。在Apex中,如果您按照fieldsets tutorial进行“描述”调用,则很容易获得此数据。因此,除了元数据API,这将为您提供
的选项那么,你觉得要做一些编码吗? 以下是如何将Apex作为REST服务公开的基本示例。称之为:https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_rest_code_sample_basic.htm
至于实际逻辑 - 在ExecuteAnonymous
中试验一下以了解事物?
// Pull it from GET request parameters?
List<String> types = new List<String>{'Account','Equipment__c'};
// if empty - describe it all (can be an expensive operation!)
// you'll get hundreds of objects back, might want to filter it down a bit by namespace?
if(types == null || types.isEmpty()){
types = new List<String>(Schema.getGlobalDescribe().keyset());
}
// sObject => Fieldset Name => fields
Map<String, Map<String, List<String>>> abomination = new Map<String, Map<String, List<String>>>();
for(Schema.DescribeSobjectResult dsr : Schema.describeSObjects(types)){
Map<String, List<String>> temp = new Map<String, List<String>>();
Map<String, Schema.FieldSet> fieldsets = dsr.fieldSets.getMap();
for(String fieldsetName : fieldsets.keyset()){
List<String> fields = new List<String>();
for(Schema.FieldSetMember f : fieldsets.get(fieldsetName).getFields()){
fields.add(f.getFieldPath());
}
temp.put(fieldsetName, fields);
}
abomination.put(dsr.getName(), temp);
}
System.debug(JSON.serializePretty(abomination));