我想構建一個查詢生成器,其中的sObject結果可以包含不確定數量的字段。我使用結果來構建一個動態表,但我找不到一種方法來讀取查詢中字段列表的sObject。如何獲取通用sObject中的字段列表?
我知道如何使用getDescribe信息獲取所有字段的列表,但查詢可能不包含所有這些字段。
有沒有辦法做到這一點?
我想構建一個查詢生成器,其中的sObject結果可以包含不確定數量的字段。我使用結果來構建一個動態表,但我找不到一種方法來讀取查詢中字段列表的sObject。如何獲取通用sObject中的字段列表?
我知道如何使用getDescribe信息獲取所有字段的列表,但查詢可能不包含所有這些字段。
有沒有辦法做到這一點?
假設你將查詢建立爲一個字符串,因爲它是動態的,所以你不能只是遍歷描述信息中的字段,然後在查詢字符串上使用.contains()
來查看它是否被請求?沒有瘋狂的優雅,但看起來像這裏最簡單的解決方案。
進一步考慮這個問題,也許你有在字符串或類似列表中選擇的字段列表,你可以使用那個列表?
不知道這是不是你以後的事情,但這樣的事情?
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';
add query t Ø列表
for(Object sObject : database.query(QueryString))
{
Querylist.add(sObject);
}
要獲得一個的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;
}
你應該重構爲bulkily這種方法對您的上下文,但它的作品。只需傳入一個sObject,它就會返回一組字段名稱。
如果sobjecttype是aggregateresult,你會怎麼做? – 2012-04-28 00:31:08
我建議使用字段列表來創建查詢和表。您可以在結果中放置字段列表,以便任何人使用它。然後,您可以使用result.getFields()構造表並通過使用result.getRows()來檢索數據。
for (sObject obj : result.getRows()) {
for (String fieldName : result.getFields()) {
table.addCell(obj.get(fieldName));
}
}
如果你想用一個查詢,是你無法控制的工作,你將不得不解析查詢得到的字段列表。但我不會建議嘗試。它以難以遵循的方式使代碼複雜化。
您是否檢出了Apex-Lang?它有很多精心設計的動態查詢功能,您不必重新發明輪子。這是第一個尋找這種類型的實用程序代碼的地方。 – jkraybill 2012-03-26 01:29:28