blog
ブログ

Salesforce技術ブログ(開発者コンソールの匿名実行Apexツールでレポートの情報を取得してみる)

はじめに

クライマックスシリーズ面白かったですね!
日本シリーズ&ドラフトが楽しみなドライ市来です。

さて、みなさんは作成したレポートをどのように管理してますか?
また、レポートで使用されている項目をどのように確認していますか?

私はEclipseでメタデータを取得し、管理や確認してますが、
どうにか効率化できないかApex開発者ガイドを漁っていたら、
なんかできそうな感じのクラス「ReportManager クラス」を発見!!
https://developer.salesforce.com/docs/atlas.ja-jp.202.0.apexcode.meta/apexcode/apex_class_reports_reportmanager.htm

ということで、開発者コンソールからゴニョゴニョ第2弾として、
開発者コンソールからレポート情報を取得してみようと思います。

 

書いてみた

下記コードを開発者コンソールで実行すると指定したレポートの情報が取得できます。

Map<String, String> REPORT_FORMAT_MAP = new Map<String, String>{
    'Tabular' => '表形式',
    'Matrix'  => 'マトリックス形式',
    'Summary' => 'サマリー形式'
};

// レポートのID
Id repoId = '00Oxxxxxxxxxxxx';
List<Report> repoList = [SELECT Id, Name, format, DeveloperName, FolderName FROM Report WHERE Id = :repoId];
if(repoList.size() > 0){
    Report repo = repoList.get(0);
    
    // 変数初期化
    Boolean isError = false;
    Reports.ReportDescribeResult results = null;
    String repoDispType = '';
    String repoType = '';
    String biko = '';
    
    System.debug('==================================================');
    
    try{
        // レポートの情報を取得
        results = Reports.ReportManager.describeReport(repo.Id);
        // レポートの表示形式を取得
        repoDispType = REPORT_FORMAT_MAP.get(repo.format);
        // レポートタイプを取得
        Reports.ReportType rt = results.getReportMetadata().getReportType();
        repoType = rt.getLabel() + '(' + rt.getType() + ')';
    }
    catch(Exception e){
        biko = e.getMessage();
        isError = true;
    }
    
    System.debug('レポート名:' + repo.Name);
    System.debug('API参照名:' + repo.DeveloperName);
    System.debug('レポートタイプ:' + repoType);
    System.debug('表示形式:' + repoDispType);
    System.debug('フォルダ:' + repo.FolderName);
    System.debug('備考:' + biko);
    System.debug('レポートID:' + repo.Id);
    
    if(!isError){
        // レポートの詳細情報を取得
        Reports.ReportExtendedMetadata rem  = results.getReportExtendedMetadata();
        
        System.debug('-----表示項目-----');
        Integer colCnt = 1;
        System.debug('No|表示ラベル|API参照名');
        // 表示項目の取得
        for(Reports.DetailColumn dc : rem.getDetailColumnInfo().values()){
            System.debug(String.valueOf(colCnt) + '|' + dc.getLabel() + '|' + dc.getName());
            colCnt++;
        }
        System.debug('------------------');
    }
    System.debug('==================================================');
}

実行結果は↓みたいな感じです。
%e3%83%ac%e3%83%9d%e3%83%bc%e3%83%88%e6%83%85%e5%a0%b1%e5%8f%96%e5%be%97_%e5%ae%9f%e8%a1%8c%e7%b5%90%e6%9e%9c

さいごに

もう少し掘り下げれば便利なツールができそうですが、今回はここまでにしておきます…

みなさんは、「ReportManager クラス」をご存知でしたか?
ほかにも便利そうなApexクラスまだまだありそうなので、
ちょっと暇だなぁと思ったときはApexコード開発者リファレンスを読み込んでみるものアリですよ!

★開発する必要なく検索画面を作れる、検索クリエイターPRO 今なら30日無料トライアル受付中!★

contact

ご相談・ご質問等ございましたら、お気軽にお問い合わせください。

翻訳