2017-10-03 6 views
0

私のクエリでフィールドセットでフィールドを使用できるようにしようとしているのは、フィールドセットが空であれば無限ループに終わる可能性があるマネージパッケージを使用しているからです。私たちの組織内のフィールドセットの情報を提供しています。これは、以前作成された投稿から適切に作成されなかったフィールドや空のフィールドを一目で把握することができれば、多くの情報を得た下のツールAPIクエリを得ることができました各フィールドセットは、しかし、私はこのクエリでそのフィールドセット内のフィールドを組み入れることができるかわからない、任意のヘルプは非常に参考になるフィールドセット内のフィールドを照会する方法

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 

答えて

0

私はそれが正常なSOQLでFieldSetMemberテーブルを照会することはできないと思いますか、ツーリングAPI。 Eclipseに格納されているものと同様のsObject定義をフェッチするために、Metadata APIを実装できます。

enter image description here

私はそれは多くの必要はなかったので、彼らはそれへのAPIアクセスを構築していなかったと思います。 Apexでは、fieldsets tutorialに従うと "describe"コールでこのデータを簡単に取得できます。だから、別にメタデータAPIから、これは

  • ビルドあなたはツーリングAPIのクエリに似て呼び出すことができますRESTリソースにあなたのオプションを与えるだろう、それはあなたが興味のオブジェクトに渡すと、それはフィールドセットで返答したい
  • (おそらくApexが必要なくても)同様のことをするVFページを作成してください - あなたはまだそのページのコンテンツをExcelにプルするためには有効なセッションIDが必要ですので、REST URLとあまり違いはありません。

だから、あなたは、コーディングのビットをしているように感じていますか?物事の感触を得るためにExecuteAnonymousで、これと実験 - 実際のロジックについてはhttps://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_rest_code_sample_basic.htm

: ここ&はそれを呼び出すRESTサービスとしてアペックスの作品を公開する方法についての基本的な例ですか?

// 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

は私が概念を理解し、ありがとう - しかし、私はそれが動作することができた場合にビット私に新しいとも非常にエキサイティングであるREST APIコールに掘るする必要があります - 上の手順をフォローアップしますあなたが提供したリンクは、VFページオプションのために私はすでにVFページをフィールドセットのメンバーに基づいてレンダリングしていましたが、私たちは組織内で何百ものファイルセットを持っているので、もう一度ありがとうございます – Sam

+0

RESTのtrailheadsを確認してください:https://trailhead.salesforce.com/en/modules/apex_integration_services/units/apex_integration_webservices – eyescream

+0

これは非常に役に立ちます、ありがとう – Sam

関連する問題