2014-06-20 3 views
1

У меня есть запрос 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); 

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

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

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

ответ

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); 
Смежные вопросы