2014-06-20 2 views
1

J'ai une requête SOQL,Problème avec la construction de ma SOQL chaîne de requête

Je veux vérifier les champs dans la requête pour FSL (sécurité terrain) avant de construire la chaîne de requête, et si elles ne sont pas lisibles, ne les ajoutez pas à la chaîne. Ce n'est peut-être pas la meilleure approche, mais c'est quelque part pour moi de commencer. Ce qui suit fonctionne bien.

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

Donc, pour vérifier le champ avant de l'ajouter à la chaîne ... Somthing comme celui-ci peut-être: (qui ne marche pas travail)

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

Toutes les suggestions ou des conseils seraient grandement appréciés.

Répondre

1

Si vous ne pouvez pas accéder au champ Revenue__c en raison de la sécurité au niveau du champ, vous pouvez simplement ignorer l'ajout à la requête SOQL dynamique. Vous pouvez définir un booléen qui peut être utilisé ultérieurement pour indiquer que le revenu n'est pas disponible.

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