2012-03-22 5 views
3

sObject 결과에 불확실한 수의 필드가 포함될 수있는 쿼리 작성기를 작성하려고합니다. 결과를 사용하여 동적 테이블을 만들었지 만 sObject에서 쿼리에 포함 된 필드 목록을 읽는 방법을 찾을 수 없습니다.일반 sObject에서 필드 목록을 얻으려면 어떻게해야합니까?

getDescribe 정보를 사용하여 모든 필드 목록을 얻는 방법을 알고 있지만 쿼리에 해당 필드가 모두 포함되어 있지 않을 수 있습니다.

이 방법이 있습니까?

+0

Apex-Lang을 확인해 보셨습니까? 그것은 잘 설계된 역동적 인 질의 기능을 많이 가지고 있기 때문에 바퀴를 다시 만들 필요가 없습니다. 이 유틸리티 코드를 많이 찾는 첫 번째 장소입니다. – jkraybill

답변

2

아마도 동적이기 때문에 쿼리를 문자열로 작성하고 있으므로 설명 정보의 필드를 반복하여 쿼리 문자열에 .contains()을 사용하여 요청되었는지 확인하십시오. 미친 우아함이 아니라 단순한 해결책처럼 보입니다.

추가로, 문자열 목록 또는 유사한 목록에서 선택한 필드 목록을 가지고있을 수 있으며, 그 목록을 사용할 수 있습니까?

0

정확하게 이것이 이전과 똑같은 것인지 확실하지는 않지만 다음과 같은 것이 있는지 확인하십시오. 당신이이 분야의 사용자를 검색

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

마지막과

를 제거하면 검색을 구축 할 필요로

public list<sObject>  Querylist    {get; set;} 

검색 문자열

string QueryString = 'select field1__c, field2__c from Object where'; 

이들의 많은 추가 정의

QueryString = QueryString.substring(0, (QueryString.length()-4)); 
     QueryString += ' limit 200'; 

검색어 추가 sObject 필드의 목록을 얻을 수있는 목록

for(Object sObject : database.query(QueryString)) 
    { 
Querylist.add(sObject); 
    } 
0

O를, 당신은 다음과 같은 방법을 사용할 수 있습니다 : 당신은 당신의 문맥이 방법을 bulkily하기 위해 리팩토링한다

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를 전달하면 필드 이름 집합이 반환됩니다.

+0

sobjecttype이 aggregateresult 인 경우 어떻게합니까? –

0

쿼리 및 테이블을 만드는 데 필드 목록을 사용하는 것이 좋습니다. 결과의 필드 목록을 사용하여 누구나 사용할 수 있습니다. 그런 다음 result.getFields()를 사용하여 테이블을 구성하고 result.getRows()를 사용하여 데이터를 검색 할 수 있습니다.

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

사용자가 제어 할 수없는 쿼리로 작업하려는 경우 쿼리를 구문 분석하여 필드 목록을 가져와야합니다. 그러나 나는 그것을 시도하는 것을 제안하지 않을 것이다. 따라하기 어려운 방식으로 코드를 복잡하게 만듭니다.

관련 문제