時には、コンテンツを含んだレポートを作成する必要があります。この場合、まずレポート構造を作成し、その後に全体についてのレポートを作成する必要があります。しかし、疑問がある。なぜなら、現時点では、コンテンツのレンダリング時に、コンテンツの要素が参照するページ数が不明だからです。この場合、アンカーを使用します。アンカーを作成するには、AddAnchor メソッドを使用します。アンカーを作成するとき、レポート・ジェネレーターは現在のページを保存し、指定されたアンカーと比較する。たとえば、以下のようになります。
AddAnchor(“MyAnchorName”)
この行では、”MyAnchorName” という名前の新しいアンカーが作成されます。アンカーの値を取得するには、GetAnchorPageNumber メソッドを使用する必要があります。このメソッドは、アンカー名に対応するページの番号を返します。もしそのような名前を持つアンカーがなければ、0が返されます。
例えば、こんな感じです。
{GetAnchorPageNumber(“MyAnchorName”)}
After the contents has been created the whole report rendering is in process. Anchors are コンテンツが作成された後、レポート全体のレンダリングが行われます。アンカーはレポート作成中に作成されます。レポートがレンダリングされると、ハイパーリンクの代わりに、実際のページ番号がコンテンツ内のアンカーに配置されます。テンプレートでのアンカーの使い方を見てみましょう。 カテゴリで分割された商品の一覧を表示する「マスター・詳細・詳細」レポートを作成します。このようなレポートを作成するためには、2つのページを用意する必要があります。最初のページはコンテンツ用で、2ページ目はレポート用です。コンテンツのページには、2つのバンドを配置します。その間に、マスターとディテールのリンクを設定します。そして、Detailのバンドに、テキストコンポーネントを配置します。このProcessAtEndテキストコンポーネントのプロパティは、trueに設定されている必要があります。
テキストプロパティのテキスト表現を次のように指定します。
{GetAnchorPageNumber(component.TagValue)}
アンカー名としては、Tagプロパティの値が使用される。Tagプロパティへの入力は、以下の式で行います。
{Products.ProductName}
{GetAnchorPageNumber(Products.ProductName)}
式を含むコンポーネントは、レポート構築の最後に処理されます。そのため、Products.ProductNameフィールドの値は、すべての文字列(リストの最後)について等しくなります。そのため、コンテンツを構築する際に、すべての文字列についてProducts.ProductNameフィールドの値を覚えておく必要があります。これには、Tagプロパティを使用します。2ページ目では、レポートを作成します。DataBandコンポーネント(コンテンツ構築に使用)のRenderingプロパティで、AddAnchorメソッドが呼び出されます。このメソッドは、呼び出された瞬間に現在のページを返します。
アンカー名は、Products.ProductNameフィールドの値です。その結果、ページ番号が最初にレンダリングされます。その後、2ページ目がレンダリングされ、ページ数が保存されます。レポート レンダリング後、レポート ジェネレーター エンジンは最初のページに戻り、すべてのページに番号を付けます。