Product Documentation

レポートデータの使用

Jul 08, 2016

ReportingConfigurationに対してアプリケーションを分析したら、ReportConfiguration.GetReportを使用してレポートデータを取得できます。

アプリケーションのレポートデータの取得

以下の例は、各reportConfigurationのレポートデータを取得する方法を示しています。 各レポートにはすべてのアプリケーションのデータが含まれています。
        AppDNA.Server appdna;        //Connect appdna          //…          public void Report()         {             var allReportConfigs = appdna.ReportConfiguration.Get();             foreach (var reportConfig in allReportConfigs)             {                 //Get a report for all applications                 using (var report = reportConfig.GetReport())                 {                     //…                 }             }         }

Applicationオブジェクトからはそのアプリケーションのみのレポートを取得できますが、複数のアプリケーションのレポート情報を得るには、ReportConfiguration.GetReportを呼び出してアプリケーションのコレクションを渡します。 これは、Application.GetReportを呼び出してアプリケーションのコレクションをループ処理するよりも効率的な方法です。

注:Reportオブジェクトではバックグラウンドスレッドを使用してデータをダウンロードします。 これにより呼び出し元はアプリケーションデータをよりすばやく取得できますが、このスレッドをクリーンアップするためにReportオブジェクトのDisposeメソッドを呼び出す必要があるということを意味します。 これはusing文を使用すると最も適切に実行できます。

レポートビューのファイルへのエクスポート

Reportオブジェクトから、あらかじめ定義された特定のレポートビューをMHTファイルにエクスポートできます。 次に例を示します。

report.Export( targetFilename, AppDNA.ReportType.EstateView, AppDNA.ReportExportFormat.MimeHtml, TimeSpan.FromMinutes(5) );

エクスポートできるレポートビューについて詳しくは、ReportTypeの列挙型を参照してください。

一部のレポートビューでは、複数のReportConfigurationsから情報を集約することができます。 これらをエクスポートするには、Server.Reportプロパティから戻されるオブジェクトを使用します。 次に例を示します。

AppDNA.Server appdna; //Connect appdna  //… appdna.Report.ExportApplicationRemediation(…);

詳細または集約レポートデータの取得

あらかじめ定義されたレポートビューのエクスポートに加え、Reportオブジェクトは、アプリケーションおよびアルゴリズムの各組み合わせに関する詳細情報と、ReportConfiguration内で有効なすべてのアルゴリズムについての各アプリケーションの集約情報へのアクセスを提供します。

特定のアプリケーションの集約情報にアクセスするには、ByApplicationプロパティに格納されているオブジェクトを使用します。

public void Report(AppDNA.Application app)         {             var allReportConfigs = appdna.ReportConfiguration.Get();             foreach (var reportConfig in allReportConfigs)             {                 //Get application's report for reportConfig                 using (var report = app.GetReport(reportConfig))                 {                     //Get the result data for our app.                     var appResult = report.ByApplication[app];                      //Write out the overall rag.                     string msg = reportConfig.Name + " : " + appResult.Application.Name + " : " + appResult.OverallRag.ToString();                     Console.WriteLine(msg);                 }             }         }

ByApplicationプロパティは、Applicationにより列挙またはインデックス付けできるコレクションを戻します。 これにはReportedApplicationオブジェクトが含まれます。ReportedApplicationオブジェクトは、それが保有するレポートデータが対象とするApplicationオブジェクトへのアクセスを提供します。 これにはReportオブジェクトのReportConfiguration内のすべての有効なアルゴリズムに対する、そのアプリケーションの集約結果も含まれます。

アプリケーションとアルゴリズムの各組み合わせの詳細結果は、ByApplicationコレクションまたはそれと等価なByAlgorithmコレクションを使用して利用できます。 ByAlgorithmコレクションにはReportedAlgorithmオブジェクトが含まれます。次に例を示します。

AppDNA.ReportedAlgorithm algResult = report.ByAlgorithm["x32_001"];
  • ReportedAlgorithmオブジェクトはResultsByApplicationプロパティを持ちます。 これは、Applicationにより列挙またはインデックス付けできるコレクションを戻します。
  • ReportedApplicationオブジェクトはResultsByAlgorithmプロパティを持ちます。 これは、Algorithmにより列挙またはインデックス付けできるコレクションを戻します。

これらのコレクションの両方に、アプリケーションとアルゴリズムの特定の組み合わせの詳細情報を含むApplicationAlgorithmResultオブジェクトが含まれます。 次に例を示します。

AppDNA.ApplicationAlgorithmResult appAndAlg = report.ByApplication[app].ResultsByAlgorithm["x32_001"]; AppDNA.ApplicationAlgorithmResult appAndAlg2 = report.ResultsByAlgorithm["x32_001"].ByApplication[app];

指定されたアルゴリズムとアプリケーションが同じであるため、appAndAlgとappAndAlg2の両方に同じオブジェクトが含まれます。

親のReportedApplication.RAGプロパティがUnanalyzedまたはLockedである場合は、ApplicationAlgorithmResultに有用なデータは含まれず、そのRAGプロパティはgreenになります。 次に例を示します。

foreach (var reportedApp in report.ByApplication) {     if (reportedApp.OverallRag == AppDNA.ReportRag.Unanalyzed         || reportedApp.OverallRag == AppDNA.ReportRag.Locked)     {         //No useful data.         continue;     }     foreach (var algorithmResult in reportedApp.ResultsByAlgorithm)     {         if (algorithmResult.Triggered)         {             string msg = algorithmResult.Application.Name + " triggered " + algorithmResult.Algorithm.Name;             Console.WriteLine(msg);         }     } }

アルゴリズムをトリガーしたアプリケーションの要素の詳細はResultsプロパティに含まれます。 Triggeredプロパティがfalseである場合は、これはnullを戻します。そうでない場合はアルゴリズムに特有な列を持つDataTableを戻します。 各列に、アルゴリズムをトリガーしたアプリケーションに特有な要素の対応データが含まれます。 次に例を示します。

foreach (var algorithmResult in reportedApp.ResultsByAlgorithm) {     if (algorithmResult.Triggered)     {         string msg = algorithmResult.Application.Name + " triggered " + algorithmResult.Algorithm.Name;         Console.WriteLine(msg);          //Write a row with the column names         foreach (System.Data.DataColumn column in algorithmResult.Results.Columns)         {             //Format at 10 chars wide, left aligned             msg = string.Format( "{0,-10}", column.ColumnName );             Console.WriteLine(msg);         }         //Write out the details of everything in the app that triggered the algorithm         foreach (System.Data.DataRow row in algorithmResult.Results.Rows)         {             //Format at 10 chars wide, left aligned             foreach (object field in row.ItemArray)             {                 msg = string.Format("{0,-10}", field.ToString());                 Console.WriteLine(msg);             }         }     } }