Я запускаю следующий код в запланированном классе:

        List<String> sObjFields = DynamicSOQL.getFields('Contact');
        String query2 = 'SELECT ' + sObjFields + ' FROM Contact';
        BatchApexContacts batch2 = new BatchApexContacts(query2);

По сути, это получает список полей в схеме контактов, а затем мы помещаем его в список строк, который затем будем использовать для помещения в запрос, который будет использоваться в Database.queryLocator(). По какой-то причине я вижу следующую ошибку:

System.QueryException: неожиданный токен: идентификатор учетной записи

Я на 100% уверен, что это поле существует в контактных записях. Я просто не могу уложить в голове, почему это происходит.

Вот остальная часть вершины партии.

public class BatchApexContacts implements Database.Batchable<sObject> , Database.Stateful 
{

    public String query;


    public BatchApexContacts(String soqlQuery) 
    {
        query = soqlQuery;

    }

    public Database.QueryLocator start(Database.BatchableContext BC) {
        return Database.getQueryLocator(query);
    }



       public void execute(Database.BatchableContext BC, List<SObject> scope) 
        {
        }

    public void finish(Database.BatchableContext BC) 
    {

    }


}
0
Matthew Metros 18 Мар 2020 в 04:20

1 ответ

Вы не можете добавить строку списка. Вам нужно проанализировать список и строку, а затем добавить его в строку запроса.

Вот обновления кода:

List<String> sObjFields = DynamicSOQL.getFields('Contact');

String allstring = string.join(sObjFields,',');

String query2 = 'SELECT ' + allstring + ' FROM Contact';
1
Matthew Metros 18 Мар 2020 в 04:37