如何获取通用sObject中的字段列表?

时间:2012-03-22 03:49:21

标签: dynamic salesforce visualforce soql

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

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

有办法做到这一点吗?

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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);
    }

答案 2 :(得分: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,它就会返回一组字段名称。

答案 3 :(得分:0)

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

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

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