Loading...

SELECT * sObject en SOQL avec APEX sur Salesforce

Effectuer une selection de tous les champs d'un sObject dans une requête SOQL avec APEX pour Salesforce
SELECT * sObject en SOQL avec APEX sur Salesforce

SELECT * sObject en SOQL avec APEX sur Salesforce

Catégorie : WEB

Effectuer un "SELECT ALL FROM SOBJECT" en SOQL avec APEX

Ce besoin plutôt naturel en SQL n'est pas accessible en SOQL, vous devez saisir les champs souhaité et les relations. Toutefois, il est possible avec APEX d'effectuer cette tâche, et en une ligne de code. N'est ce pas fantastique!

Depuis Spring 21 : FIELDS(ALL)

Depuis la mise à jour printemps 2021, il est possible d'effectuer un select * simple. Cependant, une limitation du nombre de lignes reqêtées de maximum 200 est nécessaire.

List<Case> cases = [SELECT FIELDS(ALL) FROM Case LIMIT 200];

SELECT * : en une ligne

Exemple d'une requête simple avec une liste de "Case".

List<Case> cases = Database.query('SELECT '+String.join(new List<String>(Schema.getGlobalDescribe().get('Case').getDescribe().fields.getMap().keySet()), ',')+' FROM Case');

SELECT * : requête avec jointure

Exemple d'une requête avec relation avec une liste de "Account" et leurs "Contact" rattachés. Notez que dans le cas d'une relation à un objet personnalisé, il faudra utiliser le suffixe "__r" sur le nom de la relation enfant.

String contactFields = String.join(new List<String>(Schema.getGlobalDescribe().get('Contact').getDescribe().fields.getMap().keySet()), ',');
String accountFields = String.join(new List<String>(Schema.getGlobalDescribe().get('Account').getDescribe().fields.getMap().keySet()), ',');
List<Account> accounts = Database.query('SELECT '+accountFields +',(SELECT '+contactFields+' FROM Contacts) FROM Account');

Ces solutions de construction de requêtes peuvent faciliter la conception et le développement en APEX, cependant, cela reste non optimisé. Il est évident que récupérer des données non utiles provoque un gaspillage de ressource machine.