我正在尝试构建一个查询构建器,其中 sObject 结果可以包含不确定数量的字段。我正在使用结果来构建动态表,但我无法找到一种方法来读取 sObject 以获取查询中的字段列表。
我知道如何使用 getDescribe 信息获取所有字段的列表,但查询可能不包含所有这些字段。
有没有办法做到这一点?
我正在尝试构建一个查询构建器,其中 sObject 结果可以包含不确定数量的字段。我正在使用结果来构建动态表,但我无法找到一种方法来读取 sObject 以获取查询中的字段列表。
我知道如何使用 getDescribe 信息获取所有字段的列表,但查询可能不包含所有这些字段。
有没有办法做到这一点?
假设您将查询构建为字符串,因为它是动态的,所以您不能遍历描述信息中的字段,然后.contains()
在查询字符串上使用以查看它是否被请求?不是疯狂优雅,但似乎是这里最简单的解决方案。
更进一步,也许您在字符串列表或类似列表中选择了字段列表,您可以只使用该列表吗?
要获取 sObject 中的字段列表,可以使用如下方法:
public Set<String> getFields(sObject sobj) {
Set<String> fieldSet = new Set<String>();
for (String field : sobj.getSobjectType().getDescribe().fields.getMap().keySet()) {
try {
a.get(field);
fieldSet.add(field);
} catch (Exception e) {
}
}
return fieldSet;
}
您应该针对您的上下文大量重构此方法,但它有效。只需传入一个 sObject,它就会返回一组字段名称。
我建议使用字段列表来创建查询和表。您可以将字段列表放入结果中,以便任何使用它的人都可以访问。然后您可以使用 result.getFields() 构建表并使用 result.getRows() 检索数据。
for (sObject obj : result.getRows()) {
for (String fieldName : result.getFields()) {
table.addCell(obj.get(fieldName));
}
}
如果您尝试使用您无法控制的查询,则必须解析查询以获取字段列表。但我不建议尝试这样做。它以难以理解的方式使代码复杂化。
不确定这是否正是您所追求的,但像这样?
public list<sObject> Querylist {get; set;}
定义搜索字符串
string QueryString = 'select field1__c, field2__c from Object where';
如果用户在这些字段上搜索,请根据需要添加尽可能多的这些来构建搜索
if(searchParameter.field1__c != null && searchParameter.field1__c != '')
{
QueryString += ' field1__c like \'' + searchParameter.field1__c + '%\' and ';
}
if(searchParameter.field2__c != null && searchParameter.field2__c != '')
{
QueryString += ' field2__c like \'' + searchParameter.field2__c + '%\' and ';
}
删除最后一个和
QueryString = QueryString.substring(0, (QueryString.length()-4));
QueryString += ' limit 200';
将查询添加到列表
for(Object sObject : database.query(QueryString))
{
Querylist.add(sObject);
}