2012-03-22 36 views
3

我想構建一個查詢生成器,其中的sObject結果可以包含不確定數量的字段。我使用結果來構建一個動態表,但我找不到一種方法來讀取查詢中字段列表的sObject。如何獲取通用sObject中的字段列表?

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

有沒有辦法做到這一點?

+0

您是否檢出了Apex-Lang?它有很多精心設計的動態查詢功能,您不必重新發明輪子。這是第一個尋找這種類型的實用程序代碼的地方。 – jkraybill 2012-03-26 01:29:28

回答

2

假設你將查詢建立爲一個字符串,因爲它是動態的,所以你不能只是遍歷描述信息中的字段,然後在查詢字符串上使用.contains()來查看它是否被請求?沒有瘋狂的優雅,但看起來像這裏最簡單的解決方案。

進一步考慮這個問題,也許你有在字符串或類似列表中選擇的字段列表,你可以使用那個列表?

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'; 

add query t Ø列表

for(Object sObject : database.query(QueryString)) 
    { 
Querylist.add(sObject); 
    } 
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; 
} 

你應該重構爲bulkily這種方法對您的上下文,但它的作品。只需傳入一個sObject,它就會返回一組字段名稱。

+0

如果sobjecttype是aggregateresult,你會怎麼做? – 2012-04-28 00:31:08

0

我建議使用字段列表來創建查詢和表。您可以在結果中放置字段列表,以便任何人使用它。然後,您可以使用result.getFields()構造表並通過使用result.getRows()來檢索數據。

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

如果你想用一個查詢,是你無法控制的工作,你將不得不解析查詢得到的字段列表。但我不會建議嘗試。它以難以遵循的方式使代碼複雜化。

相關問題