Как получить список полей в универсальном sObject? - PullRequest
3 голосов
/ 22 марта 2012

Я пытаюсь построить построитель запросов, в котором результат sObject может содержать неопределенное количество полей. Я использую результат для построения динамической таблицы, но не могу найти способ прочитать sObject для списка полей, которые были в запросе.

Я знаю, как получить список ВСЕХ полей, используя информацию getDescribe, но запрос может содержать не все эти поля.

Есть ли способ сделать это?

Ответы [ 4 ]

2 голосов
/ 22 марта 2012

Предположительно, вы строите запрос как строку, так как он динамический, поэтому вы не можете просто пройтись по полям в информации описания, а затем использовать .contains() в строке запроса, чтобы увидеть, был ли он запрошен?Не слишком элегантно, но кажется, что здесь самое простое решение.

Если продолжить, может быть, у вас есть список полей, выбранных в списке строк или аналогичных, и вы можете просто использовать этот список?

0 голосов
/ 23 марта 2012

Я предлагаю использовать список полей для создания запроса и таблицы. Вы можете поместить список полей в результат так, чтобы он был доступен для всех, кто его использует. Затем вы можете построить таблицу с помощью метода result.getFields () и получить данные с помощью метода result.getRows ().

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

Если вы пытаетесь работать с запросом, который находится вне вашего контроля, вам придется проанализировать запрос, чтобы получить список полей. Но я бы не советовал попробовать это. Это усложняет код способами, которые трудно следовать.

0 голосов
/ 22 марта 2012

Чтобы получить список полей в 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, и он вернет вам набор имен полей.

0 голосов
/ 22 марта 2012

Не уверен, что это именно то, что вам нужно, но что-то вроде этого?

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);
    }
...