コンテンツ付きレポート

時には、コンテンツを含んだレポートを作成する必要があります。この場合、まずレポート構造を作成し、その後に全体についてのレポートを作成する必要があります。しかし、疑問がある。なぜなら、現時点では、コンテンツのレンダリング時に、コンテンツの要素が参照するページ数が不明だからです。この場合、アンカーを使用します。アンカーを作成するには、AddAnchor メソッドを使用します。アンカーを作成するとき、レポート・ジェネレーターは現在のページを保存し、指定されたアンカーと比較する。たとえば、以下のようになります。

AddAnchor(“MyAnchorName”)

 この行では、”MyAnchorName” という名前の新しいアンカーが作成されます。アンカーの値を取得するには、GetAnchorPageNumber メソッドを使用する必要があります。このメソッドは、アンカー名に対応するページの番号を返します。もしそのような名前を持つアンカーがなければ、0が返されます。

例えば、こんな感じです。

{GetAnchorPageNumber(“MyAnchorName”)}

 このテキスト式は、”MyAnchorName “に従って、ページの番号を返します。つまり、アンカー名があれば、そのアンカーが作成されたページの番号を知ることができるのです。この2つの方法を使って、コンテンツの構築が行われます。まずコンテンツが作られ、ページ番号の代わりにアンカーへのハイパーリンクを貼ります。 アンカーでページ番号を取得する関数を呼び出すすべてのコンポーネントについて、ProcessAtEndプロパティをtrueに設定する必要があります。これは、これらのコンポーネントがレポートレンダリングの最後に処理され、すべてのページ数が判明するためです。

After the contents has been created the whole report rendering is in process. Anchors are コンテンツが作成された後、レポート全体のレンダリングが行われます。アンカーはレポート作成中に作成されます。レポートがレンダリングされると、ハイパーリンクの代わりに、実際のページ番号がコンテンツ内のアンカーに配置されます。テンプレートでのアンカーの使い方を見てみましょう。 カテゴリで分割された商品の一覧を表示する「マスター・詳細・詳細」レポートを作成します。このようなレポートを作成するためには、2つのページを用意する必要があります。最初のページはコンテンツ用で、2ページ目はレポート用です。コンテンツのページには、2つのバンドを配置します。その間に、マスターとディテールのリンクを設定します。そして、Detailのバンドに、テキストコンポーネントを配置します。このProcessAtEndテキストコンポーネントのプロパティは、trueに設定されている必要があります。


 注意:ページ数を返す式のテキストコンポーネントのProcessAtEndプロパティを有効にする必要があります。このプロパティは、レポートレンダリング後にこれらのテキストコンポーネントの値を処理するために使用されます(ページ数がわかっている場合)。

テキストプロパティのテキスト表現を次のように指定します。

{GetAnchorPageNumber(component.TagValue)}

 このテキスト式は、アンカーを使用しているページの番号を返します。

アンカー名としては、Tagプロパティの値が使用される。Tagプロパティへの入力は、以下の式で行います。

{Products.ProductName}

  この表現では、製品名が使用されています。従って、以下の表現は使用できません。

{GetAnchorPageNumber(Products.ProductName)}

式を含むコンポーネントは、レポート構築の最後に処理されます。そのため、Products.ProductNameフィールドの値は、すべての文字列(リストの最後)について等しくなります。そのため、コンテンツを構築する際に、すべての文字列についてProducts.ProductNameフィールドの値を覚えておく必要があります。これには、Tagプロパティを使用します。2ページ目では、レポートを作成します。DataBandコンポーネント(コンテンツ構築に使用)のRenderingプロパティで、AddAnchorメソッドが呼び出されます。このメソッドは、呼び出された瞬間に現在のページを返します。

アンカー名は、Products.ProductNameフィールドの値です。その結果、ページ番号が最初にレンダリングされます。その後、2ページ目がレンダリングされ、ページ数が保存されます。レポート レンダリング後、レポート ジェネレーター エンジンは最初のページに戻り、すべてのページに番号を付けます。