Проблема с созданием моей строки запроса SOQL

У меня есть запрос SOQL,

Я хочу проверить поля в запросе на FSL (безопасность на уровне поля) перед созданием строки запроса, и если они не читаются, не добавляйте их в строку. Возможно, это не самый лучший подход, но мне есть с чего начать. Следующее работает нормально.

String soql = 'SELECT Id, MAX(Name) personName, MAX(From_Date__c) fromDate, MAX(Status__c) status' 
String end  = ' FROM The_Object__c WHERE Id = :Id'

soql += end

SObject r = Database.query(soql);

Итак, чтобы проверить поле перед добавлением его в строку... Возможно, что-то вроде этого: (что не работает)

String extra_soql = ', SUM(Revenue__c) revenue ';

if (!Schema.sObjectType.The_Object__c.fields.Revenue__c.isAccessible()){ 

    REMOVE THE SOQL SOMEHOW? OR PASS AN EMPTY STRING TO THE QUERY?

    extra_soql = ''; <-- DOESNT WORK
    extra_soql = ' '; <-- DOESNT WORK
    extra_soql = NULL; <-- DOESNT WORK

    NOT SURE WHAT TO DO IN HERE
}

soql += extra_soql
soql += end

SObject r = Database.query(soql);

Любые предложения и советы приветствуются.


person Daft    schedule 20.06.2014    source источник


Ответы (1)


Если вы не можете получить доступ к полю Revenue__c из-за безопасности на уровне поля, вы можете просто не добавлять его к динамическому запросу SOQL. Возможно, вы захотите установить логическое значение, которое можно использовать на более позднем этапе, чтобы указать, что доход недоступен.

String soql = 'SELECT Id, MAX(Name) personName, MAX(From_Date__c) fromDate, MAX(Status__c) status';

boolean revenueAvailable = Schema.sObjectType.The_Object__c.fields.Revenue__c.isAccessible();
if(revenueAvailable) { 
    soql += ', SUM(Revenue__c) revenue';
}

soql += ' FROM The_Object__c WHERE Id = :Id';

SObject r = Database.query(soql);
person Daniel Ballinger    schedule 21.06.2014