[10818]Viewerコントロールにページレポートを読み込んだ直後に、PageReportオブジェクトをDisposeすると、レポート上にトライアル版を使用していることを示す文字列が表示される

文書番号 : 37678     文書種別 : 制限事項     登録日 : 2014/11/18     最終更新日 : 2014/11/18
文書を印刷する
対象製品
ActiveReports for .NET 7.0J
詳細
※この現象はページレポートのみで発生します。

ViewerコントロールのLoadDocument(PageDocument)メソッドを使用してページレポートをプレビューした直後、PageReportオブジェクトをDisposeすると、レポート上にトライアル版で作成された事を示す文字列が表示されます。この事象は正常にライセンス認証を行っていたとしても発生します。

■表示される文字列
-----------------------------------------------------------------------------------------------------
このレポートは、ActiveReports for .NETトライアル版で作成されました。Copyright 2003-2012 (c) GrapeCity inc.
-----------------------------------------------------------------------------------------------------

例えば以下のようなコードを実装した場合、本事象が発生いたします。

◆サンプルコード(VB.NET)
Dim rptPath = New System.IO.FileInfo("..¥..¥PageReport1.rdlx")
Dim definition As New GrapeCity.ActiveReports.PageReport(rptPath)
Viewer1.LoadDocument(definition.Document)
' LoadDocument直後にPageReportオブジェクトをDisposeする。
definition.Dispose()

◆サンプルコード(C#)
var rptPath = new System.IO.FileInfo(@"..¥..¥PageReport1.rdlx");
GrapeCity.ActiveReports.PageReport definition = new GrapeCity.ActiveReports.PageReport(rptPath);
viewer1.LoadDocument(definition.Document);
// LoadDocument直後にPageReportオブジェクトをDisposeする。
definition.Dispose();

また、以下のようにPageReportクラスのインスタンスを生成する際に、usingステートメントを使用すると、内部で自動的にDisposeメソッドが呼び出されることになり、同様の事象が発生いたします。

◆サンプルコード(VB.NET)
Using definition As New GrapeCity.ActiveReports.PageReport(rptPath)
  Viewer1.LoadDocument(definition.Document)
End Using

◆サンプルコード(C#)
using (GrapeCity.ActiveReports.PageReport definition
  = new GrapeCity.ActiveReports.PageReport(rptPath))
{
  viewer1.LoadDocument(definition.Document);
}


本事象は、レポート生成に係るライセンスチェックと、Disposeメソッドの仕様上の動作となります。

Viewerコントロールは、LoadDocumentメソッドで受け取った PageReportオブジェクトを元にレポートの生成処理を「非同期」で行います。この生成処理の中で、適切なライセンス情報がプロジェクトに埋め込まれているかどうかのチェックを行います。

一方、PageReportクラスのDisposeメソッドでは、このライセンス情報のチェック結果を削除する処理を行います。

したがって、LoadDocumentメソッドの後に PageReportクラスのDisposeメソッドを実行すると、非同期で実行されているレポートの生成処理中に、ライセンス情報が削除され、適切なライセンス情報が登録されていないと判断され、レポート上にトライアルを示すバナーが表示されてしまいます。

Viewerコントロールにページレポートをプレビューする際は、以下の点にご注意ください。
  • PageReportクラスのインスタンスを生成する際、Usingステートメントは使用しないでください。
  • PageReportオブジェクトに対して、Disposeメソッドを明示的に実行しないでください。
    (この場合、リソースの破棄は.NET Frameworkのガベージコレクターによって自動的に行われます。)
もし、PageReportオブジェクトを明示的にDisposeしたい場合には、オブジェクトが完全に不要になった段階(例:プレビュー画面を閉じるタイミング)でDisposeするようお願いいたします。