2017-10-03 6 views
0

J'essaie d'obtenir des champs disponibles sur un fieldset dans ma requête, la raison en est que nous utilisons un package géré qui peut se retrouver dans une boucle infinie si le fieldset est vide, nous avons des centaines de fieldsets dans notre organisation et il serait très utile si nous pouvons en un coup d'oeil savoir lequel n'a pas été créé correctement ou avoir des champs vides, à partir d'un post précédent, j'ai pu obtenir la requête d'API ci-dessous qui a donné beaucoup d'informations chaque fieldset, mais je ne sais pas comment je peux intégrer les champs dans cette fieldset dans cette requête, toute aide serait extrêmement utileComment faire pour interroger des champs dans un fields

SELECT EntityDefinitionId, EntityDefinition.Namespaceprefix, EntityDefinition.DeveloperName, 
    Id, DeveloperName, Description, CreatedDate, CreatedBy.Name 
FROM FieldSet where EntityDefinition.DeveloperName='Loan' and developername like 'UI_R1%' 
ORDER BY EntityDefinitionId, Id 

Répondre

0

Je ne pense pas qu'il est possible d'interroger FieldSetMember table avec SOQL normale ou API d'outillage Vous pouvez implémenter l'API de métadonnées pour extraire les définitions de sObject de la même manière qu'elles sont stockées dans Eclipse.

enter image description here

Je pense qu'ils ne construisaient pas accès API parce qu'il n'a pas été nécessaire bien. Dans Apex, ces données sont assez faciles à obtenir avec les appels "describe" si vous suivez le fieldsets tutorial. Donc, en dehors de l'API de métadonnées cela vous donne des options pour

  • construire une ressource REST que vous pouvez appeler similaire à la requête API Tooling, vous lui passez des objets intéresse et il avait répondu avec fieldsets
  • Construire une page VF qui fait la même chose (peut-être même sans avoir besoin d'Apex) - vous aurez toujours besoin d'un identifiant de session valide pour extraire le contenu d'une page vers Excel de manière à ne pas être trop différent de l'URL REST.

Alors, est-ce que vous avez envie de faire un peu de codage? Voici l'exemple de base sur la façon d'exposer un morceau de Apex comme service REST & appellent: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_rest_code_sample_basic.htm

Quant à la logique réelle - expérience avec cela dans ExecuteAnonymous pour avoir une idée des choses?

// Pull it from GET request parameters? 
List<String> types = new List<String>{'Account','Equipment__c'}; 

// if empty - describe it all (can be an expensive operation!) 
// you'll get hundreds of objects back, might want to filter it down a bit by namespace? 
if(types == null || types.isEmpty()){ 
    types = new List<String>(Schema.getGlobalDescribe().keyset()); 
} 

// sObject => Fieldset Name => fields 
Map<String, Map<String, List<String>>> abomination = new Map<String, Map<String, List<String>>>(); 

for(Schema.DescribeSobjectResult dsr : Schema.describeSObjects(types)){ 
    Map<String, List<String>> temp = new Map<String, List<String>>(); 
    Map<String, Schema.FieldSet> fieldsets = dsr.fieldSets.getMap(); 
    for(String fieldsetName : fieldsets.keyset()){ 
     List<String> fields = new List<String>(); 
     for(Schema.FieldSetMember f : fieldsets.get(fieldsetName).getFields()){ 
      fields.add(f.getFieldPath()); 
     } 
     temp.put(fieldsetName, fields); 
    } 
    abomination.put(dsr.getName(), temp); 
} 

System.debug(JSON.serializePretty(abomination)); 
+0

Merci, je comprends le concept - mais je vais devoir creuser dans l'appel API REST qui est un peu nouveau pour moi et aussi très excitant si je peux l'avoir à travailler - va suivre les étapes de la lien que vous avez fourni, pour l'option Page VF, je l'ai déjà utilisé pour rendre une page VF basée sur les membres de fieldset avant, mais je serais plus enclin à utiliser une requête et obtenir une réponse car nous avons des centaines de filets dans notre Org - merci encore – Sam

+0

Vérifiez les débutants REST: https://trailhead.salesforce.com/fr/modules/apex_integration_services/units/apex_integration_webservices – eyescream

+0

Cela va être très utile, merci beaucoup – Sam