メニュー最初の一歩基本的な仕組み機能サンプル
プログラム仕様デザイン仕様機能拡張その他関連製品開発・運営会社 |
カスタマイザの仕様Reportクラスのコンストラクタには、 帳票の内容を動的に書き換えるためにカスタマイザというオブジェクトを渡すことができます。 カスタマイザオブジェクトを作成するには、 以下のように定義されたIReportCustomizerインターフェースを実装します。
' .NET (VisualBasic)
Public Interface IReportCustomizer
Function ContentRegion( _
ByVal content As Content, _
ByVal evaluator As Evaluator, _
ByVal region As Region) As CRegion
Sub PageAdded( _
ByVal report As Report, _
ByVal pages As ReportPages, _
ByVal page As ReportPage)
Sub RenderContent( _
ByVal content As Content, _
ByVal evaluator As Evaluator, _
ByVal region As Region, _
ByVal elementDesigns As ElementDesigns)
End Interface
// Java
public interface IReportCustomizer {
Region contentRegion(
Content content,
Evaluator evaluator,
Region region);
void pageAdded(
Report report,
ReportPages pages,
ReportPage page);
void renderContent(
Content content,
Evaluator evaluator,
Region region,
ElementDesigns elementDesigns);
}
それぞれのメソッドについて説明します。 ContentRegionメソッドContentRegionメソッドは、コンテントの表示領域を決定する際に呼ばれます。 このメソッドの戻り値がコンテントの表示領域となります。 NULLを返した場合は、このコンテントは表示されません。 デフォルトの表示領域は引数regionに渡されるので、 特に変更をしない場合は、これをそのまま戻り値とします。 変更する場合は、regionを直接書き換えるのではなく、 以下のコンストラクタでコピーを作成してから変更します。 // C# Region _region = new Region(region); // _regionに何らかの修正を加える ... return _region; ' VisualBasic Dim _region As New Region(region) ' _regionに何らかの修正を加える ... Return _region // Java Region _region = new Region(region); //_regionに何らかの修正を加える ... return _region; 機能サンプルの「サイズ変更」に、このメソッドを利用した例があります。 PageAddedメソッドPageAddedメソッドは、新しいページが作られるたびに呼ばれます。 引数で渡されるpagesは今までに作成されたページのリストで、 pageはたった今作成されたページです(pagesの最後の要素はpageとなっています)。 機能サンプルの「ページ挿入」に、このメソッドを利用した例があります。 RenderContentメソッドRenderContentメソッドは、コンテントに要素を描画する直前に発生します。 コンテントに含まれる要素の定義は、ElementDesignというオブジェクトでラップされ、 引数のElementDesignsオブジェクトに格納されて渡されます。 ElementDesignsには以下のメソッドが用意されています。
個々の要素を表すElementDesignオブジェクトには、以下のメソッドが用意されています。
ElementDesignに修正を加える例を以下に示します。
// C#
ElementDesign elementDesign = elementDesigns.Find("example_id");
elementDesign.Put("exp", ".hoge");
elementDesign.Child("layout").Put("x1", 100);
' VisualBasic
Dim elementDesign As ElementDesign = elementDesigns.Find("example_id")
elementDesign.Put("exp", ".hoge")
elementDesign.Child("layout").Put("x1", 100)
// Java
ElementDesign elementDesign = elementDesigns.find("example_id");
elementDesign.put("exp", ".hoge");
elementDesign.child("layout").put("x1", 100);
以下のように書くことで動的に要素を追加できます。
// C#
ElementDesign elementDesign = new ElementDesign("rect");
elementDesigns.Add(elementDesign);
' VisualBasic
Dim elementDesign As New ElementDesign("rect")
elementDesigns.Add(elementDesign)
// Java
ElementDesign elementDesign = new ElementDesign("rect");
elementDesigns.add(elementDesign);
RenderContentメソッド内で行われた修正は、 コンテントの描画が行われるたびにリセットされます。 機能サンプルの「動的要素」に、このメソッドを利用した例があります。 DefaultCustomizerカスタマイザを実装するには、 これら3つのメソッドを全て実装する必要がありますが、 常に全てのメソッドに用があるわけではないはずです。 そこで、通常はDefaultCustomizerというデフォルトの実装クラスを継承した上で、 必要なメソッドのみをオーバーライドするのが便利です。 // C# private class Customizer : DefaultCustomizer { // 必要なメソッドのみオーバーライドする ... } ' VisualBasic Private Class Customizer Inherits DefaultCustomizer ' 必要なメソッドのみオーバーライドする ... End Class // Java private class Customizer extends DefaultCustomizer{ // 必要なメソッドのみオーバーライドする ... } |
||||||||||||||||
Copyright (c) 2013, SystemBase Co.,Ltd. All rights reserved. |