まずは帳票レイアウトを定義する
さて、ここまでは帳票アプリケーション設計の要素として「データモデルの定義」と「帳票レイアウトの定義」の2つがあると説明しました。
帳票が出力される順番で考えると、最初に取り組むのは「データモデルの定義」のようにも思えますが、実際には「帳票レイアウトの定義」を先に行う場合の方が多いのではないでしょうか。業務システム開発において、アプリケーションの画面イメージや出力帳票のレイアウトなど、ユーザーが直接触れる部分(ユーザーインターフェース部分)の仕様は、要求分析や基本設計など早い段階から具体的なイメージを作成してユーザーと仕様を確認しておく必要があります。
逆に、データモデルは開発者にとっては重要な設計情報ですが、ユーザー側にしてみれば「ちゃんと動いてさえくれればよい」という認識であるのが普通であり、必ずしも最初に考えなければいけない部分ではありません。本稿でも、データモデルの定義に先行して、帳票レイアウトの定義から考えていきたいと思います。
帳票レイアウトを構造化する
帳票レイアウトの作成は、ユーザーとの打ち合わせやヒアリングから帳票に出力したい内容や項目を洗い出すところから開始されます。ユーザーが単なるデータの羅列ではなく、デザイン性にも優れた帳票を望んでいる場合は、何度もレイアウトのラフを作ってユーザーとイメージを確認する必要があるかもしれません。しかし、サービスの利用明細や請求書など、ビジネスシーンに登場する典型的な帳票であれば、お決まりの「型」のようなものがある程度決まっていることも多いです。
また、開発案件の目的がまったくの新規開発ではなく既存システムの刷新であるような場合は、現在使われている帳票レイアウトをユーザーから提供してもらえることもあります。このような場合、レイアウト作成自体は楽になりますが、「なるべく既存のレイアウトと合わせてほしい」といった、別な形のリクエストを受けることもあります。
項目の洗い出しと大まかな配置を決めて帳票レイアウトのイメージが固まったら、次はこのレイアウトから出力構造を洗い出します。レイアウトをもとにして1セットの帳票を出力するときに、どの項目がどのようなタイミングで出力されるかを考えていきます。帳票レイアウトの構造化を考えるときは、ActiveReportsのレポートセクション構造に当てはめて考えるのが便利でしょう。
以下は、ActiveReportsで定義することのできるレポートセクションの一覧です。
- 帳票全体で、最初/最後に出力する項目(レポートヘッダ・レポートフッタ)
- 各ページで、最初/最後に出力する項目(ページヘッダ・ページフッタ)
- 集計グループごとに、最初/最後に出力する項目(グループヘッダ・グループフッタ)
- 繰り返し項目(Detailセクション)
帳票全体の最初と最後に出力されるレポートヘッダ/フッタや、ページの最初/最後に出力されるページヘッダ/フッタはプロパティグリッドで設定できる項目も少なく、特に複雑な部分はありません。一方で、グループヘッダ/フッタは、集計単位となるデータフィールドの指定やセクション出力前後での改行タイミング、出力グループのブロック化など、出力方法に関してさまざまな選択肢が提供されています。1つの帳票で複数のグループが入れ子になる場合は、重ね順についても定義しておいてください。
レイアウトの構造化がある程度まとまったら、次はその構造化された帳票レイアウトを使ってサンプルを出力し、改ページ位置などを確認しておきましょう。なお、ユーザーとレイアウトについて打ち合わせをする場合、全体が1枚で収まるデータ量の少ないサンプルで確認してしまいがちですが、2ページ目以降はどのように出力されるか、グループごとに改ページを入れるか、などについても確認しておくのがよいでしょう。
出力項目の定義と配置
帳票レイアウトの構造化が終わったら、次は各セクションに配置する出力項目を定義します。
アプリケーション設計の段階では出力項目の論理名だけを定義することが多いと思いますが、ここでは論理名だけでなく物理名も定義しておくことをお勧めします。「商品名」であれば「ProductName」でも「SHOHIN_MEI」でも、論理名に対応する名称であれば何でもよいので、物理名を定義しておきましょう。物理名を定義しておくと、ActiveReportsのコントロールの名前としてそのまま使うことができるので便利です。
実際の開発現場では、出力項目の定義として「論理名とデータベースのフィールド名だけ」しか指定されていないようなケースもありますが、少なくとも配置(左寄せ、右寄せ、中央寄せ)、書式(日付、時刻、金額、数量…)、フォント(書体、サイズ、色…)、折り返し設定くらいは設計情報として盛り込んでおきたいものです。特に、フォントの設定はVisualStudioの[メニュー]-[レポート]-[レポートの設定]-[スタイル設定]で設定した内容をレイアウトファイルとして保存しておくことができます。ガイダンスに設定情報を記載し、レイアウトファイルを統一テンプレートしてプロジェクトで共有するのも便利です。
以下はTextBoxコントロールのプロパティのうち、出力項目の定義によく使うプロパティを挙げたものです。必要に応じて、このほかのプロパティを指定するのもよいでしょう。
プロパティ名 | 説明 |
(Name) | コントロール名(物理名)を設定します。 |
Alignment | 水平方向の配置を設定します。 |
VirticalAlignment | 垂直方向の配置を設定します。 |
DataField | バインドするデータソースのフィールド名を設定します。 |
Font | 表示フォントを設定します。 |
WordWrap | 自動的に折り返すかどうかを設定します。 |
CanGrow | 出力するデータに合わせてコントロールの高さを拡大するかどうかを設定します。 |
OutputFormat | 表示形式(書式)を設定します。 |
おわりに
今回は、帳票アプリケーション設計のうち前半部分の「帳票レイアウト設計」のポイントについて紹介しました。
次回は後半部分にあたる「データモデルの設計」と、その効果的な実装方法について紹介します。お楽しみに。