3

我正在尝试构建一个查询构建器,其中 sObject 结果可以包含不确定数量的字段。我正在使用结果来构建动态表,但我无法找到一种方法来读取 sObject 以获取查询中的字段列表。

我知道如何使用 getDescribe 信息获取所有字段的列表,但查询可能不包含所有这些字段。

有没有办法做到这一点?

4

4 回答 4

2

假设您将查询构建为字符串,因为它是动态的,所以您不能遍历描述信息中的字段,然后.contains()在查询字符串上使用以查看它是否被请求?不是疯狂优雅,但似乎是这里最简单的解决方案。

更进一步,也许您在字符串列表或类似列表中选择了字段列表,您可以只使用该列表吗?

于 2012-03-22T04:16:15.657 回答
0

要获取 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,它就会返回一组字段名称。

于 2012-03-22T04:37:54.590 回答
0

我建议使用字段列表来创建查询和表。您可以将字段列表放入结果中,以便任何使用它的人都可以访问。然后您可以使用 result.getFields() 构建表并使用 result.getRows() 检索数据。

for (sObject obj : result.getRows()) {
    for (String fieldName : result.getFields()) { 
        table.addCell(obj.get(fieldName));
    }
}

如果您尝试使用您无法控制的查询,则必须解析查询以获取字段列表。但我不建议尝试这样做。它以难以理解的方式使代码复杂化。

于 2012-03-22T22:22:37.263 回答
0

不确定这是否正是您所追求的,但像这样?

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);
    }
于 2012-03-22T04:25:41.503 回答