Elixir Report

Index


概要

Elixir Reportは、マウス操作により直観的なデザインが行えるレイアウト画面や、多数用意された対話式のウィザードなど、Java開発者以外の方でも簡単に、すばやく帳票を設計できるレポーティングツールです。演算処理もコーディングの必要がなく、プルダウンのメニューから選択するだけで平均値や合計値を計算し出力することができます。

とはいえ、希望する要件の帳票作成がこれらの機能だけで満たせるかといえばそうとは言い切れません。条件によってデータの表示色や表示内容を変えて、視覚的に訴えかける帳票にする、任意のデータだけを演算対象にして、利用者が必要とする視点の値を出力するなど「独自の条件で動的に帳票を作成したい」という要望は複雑な帳票作成に限ったことではありません。

こうした希望を実現し自由度の高い帳票生成を行うには、スクリプト機能を利用します。今回の特集では、初めてスクリプト機能を利用するにあたり、理解しておくべき基本を解説し、チュートリアル形式での動的な帳票作成を行ってみたいと思います。


スクリプト機能の基本

スクリプトを使った帳票作成を試す前に、この機能の基本を理解しておきましょう。

スクリプト言語

Elixir Reportのスクリプト機能では、開発者にとってなじみのあるJavaScriptを採用しています。
JavaScriptで扱える数値、文字列などの型や、サポートされている演算子(+、-、*、/、%など)、関数(length、charAt、indexOfなど)を利用することができます。

スクリプトの記述場所と実行タイミング

スクリプトは、レポート生成時にイベントが発生することで実行されます。イベントは、レポートを構成するコンポーネントごとに定義されており、それぞれのコンポーネントの描画時に発生します。そのため、スクリプトを実行させたいタイミングを考慮して、処理を記述するコンポーネントとイベントを決定する必要があります。

イベントの種類と実行タイミングは、それぞれ次のようになっています。

イベント 説明
Render If ※ レポートテンプレート以外がもつイベント
コンポーネントを出力するかどうかを判定するイベント。このイベントに記述した条件式の結果がtrueの場合にのみ、コンポーネントが出力される。
On Render Begin コンポーネントが描画される前に実行されるイベント。
On Render End コンポーネントが描画された後に実行されるイベント。
On Layout ※ レポートパーツのみがもつイベント
レポートパーツの描画が終了してどのページに出力させるかの割り当てが行われ、実際にページに追加された直後に実行されるイベント。

また、スクリプトを記述できるコンポーネントは次の通りです。

対象 説明
レポートテンプレート レポート全体
セクション レポートテンプレートに含まれる1つのデザインの構成単位(ページ設定やデータソースの設定を含む)
レポートパーツ ページを水平方向に分割した単位
  • ページヘッダー/フッター
  • セクションヘッダー/フッター
  • グループヘッダー/フッター
  • 詳細
レポートエレメント ラベル/フィールド/ライン/イメージ/ページブレーク等の全てのレポートエレメント

これらのコンポーネントには、スクリプトを記述するための[スクリプト]プロパティが用意されており、プロパティ画面または、プロパティペインの[Script]からスクリプト入力画面を開くことができます。入力画面はイベントごとに分かれていますので、必要なイベントに処理を記述します。

なお、長方形エレメントなど一部のコンポーネントでは、プロパティ画面が用意されていないものがあります。その場合は、プロパティペインから入力画面を開いてください。

画像「プロパティ画面を開く」
プロパティ画面を開く
画像「プロパティペインから開く」
プロパティペインから開く

スクリプトの操作対象と関数

スクリプトの記述先と実行タイミングはわかりました。ではどのようにコンポーネントを操作すればよいのでしょうか。

Elixir Reportにはレポートデザイナを使って操作できるすべてのコンポーネントを表すオブジェクトと、それらを操作する関数が用意されています。

デザイナでフィールドエレメントの[Background Colour]プロパティで背景色を変更するのと同様に、スクリプトでは、フィールドエレメントを表すオブジェクト(Field)に用意された、背景色のプロパティを変更する関数setBackgroundColor(java.lang.String)を、適用するフィールドエレメントの[スクリプト(プロパティペインではScript)]のイベントに記述して操作します。

フィールドエレメントのスクリプト(Script) - On Render Begin :
// このフィールドの背景色をライトグリーンに設定
setBackgroundColor("LightGreen");

全てのオブジェクトと関数は、製品付属のJavaScriptリファレンスで確認できます。


動作確認 : フォントの色プロパティを変更

スクリプトを使ったプロパティの操作を実際に試してみましょう。簡単なサンプルテンプレートとデータソースを用意しましたのでこちらを利用してください。

サンプルテンプレートとデータソース(zip形式)

Elixir Reportの製品サンプルが配置されている

<Elixirインストールルート>/templates/samples

以下にtestフォルダを作成し、データソースファイル(score.ds)とレポートテンプレート(score.rml)を配置します。レポートデザイナで、/samplesリポジトリを[更新]して、/testフォルダに2つのファイルが表示されることを確認してください。

レポートテンプレートを開きます。実行すると、次のようにデータを表示するだけの簡単なサンプルです。

画像「レポートテンプレート」

では、点数を表示しているフィールドのフォントの色を、スクリプトを使って赤に変更してみましょう。

手順

オブジェクトと関数の確認 - JavaScriptリファレンス

フィールドエレメントを操作するためのオブジェクトと関数をJavaScriptリファレンスで確認します。
JavaScriptリファレンスでは、オブジェクトはカテゴリに分かれています。

カテゴリ 説明
Globals データソースやパラメータへのアクセス、ログ出力関連、書式設定など、レポート全体にかかわるオブジェクトのカテゴリ。
JavaScript 型の確認、文字列操作などの関数をそろえたオブジェクト。
Report-Raw レポートエレメントやレポートパーツなど、スクリプトで操作可能なオブジェクトのカテゴリ。そのオブジェクトの Render If、On Render Begin、On Render End、On Layoutイベントから、キーワードthisを使ってアクセスが可能。
プロパティの変更など、主にこのカテゴリのオブジェクトを使用。
Report-Logical On Render EndとOn Layoutでのみ、キーワードresultを使ってアクセスが可能。

今回の操作対象であるフィールドエレメントは、Report-RawカテゴリのFieldオブジェクトです。フォントの色を変更する関数はFieldオブジェクトには用意されていませんが、Fieldオブジェクトが継承しているTextElement オブジェクトで定義された関数setFontColor(java.lang.String)を利用します。

【トピック】 継承

継承しているオブジェクトは、各オブジェクトのextendsに表示されています。


スクリプト入力画面の表示

点数を表示する[Score]フィールドエレメントのプロパティを操作するので、スクリプトをこのフィールドエレメントに記述します。
[Score]フィールドをダブルクリック、または右クリックからプロパティを選択して、プロパティ画面の[スクリプト]タブを開きます。

画像「プロパティ画面を開く」
プロパティ画面を開く

スクリプトの記述

[Score]フィールドが描画される前にプロパティを変更するため、On Render Beginにスクリプトを記述します。Report-Rawカテゴリのオブジェクトは、そのオブジェクトのOn Render Beginからthisでアクセスすることができるので、次のように記述します。

// このフィールドのフォントの色を赤に設定
this.setFontColor ("red");
// thisは省略可能なので、次の記述も同義です
// setFontColor("red");

引数は色を表す文字列、"red"を指定しています。

【トピック】 色の指定方法

色はRGB形式または、色を表す定義済み文字列で指定します。

色を表す定義済み文字列は、CSSで指定できる文字列と同一です。一覧はヘルプドキュメントで確認できます。

+[2章 レポート設計]
 +[7. その他の機能]
  +[色]
   +[定義済み文字列の使用]

レポート出力のテスト

Renderボタンをクリックして出力結果を確認します。[Score]フィールドのフォントが赤字になりました。

画像「レポート出力テスト」

うまくいかないときは…

スクリプトの記述ミスや、予期しないエラーの発生は[コンソールログ]で確認することができます。デザイナ上部、アドレスバーの左横にある[コンソールの表示]ボタンをクリックします。
タイプWARNやERRORのログ出力をダブルクリックして詳細を確認し、問題を解決してください。

画像「コンソールログ」

動作確認 : 条件に応じた処理の分岐

実際の開発でスクリプトを使用するときは、出力するデータなどの条件に応じた処理をしたいことがほとんどです。そこで次は、先ほどのサンプルを使って、スコアが50点未満のときだけフォントを赤字にするようにスクリプトを書きなおしてみます。

手順

データソースの値を取得

現在参照しているレコードの特定のフィールドの値を取得するには、Globals カテゴリのDataオブジェクトに定義されたgetObject(java.lang.String)関数を利用します。

【トピック】 データソースの参照

現在参照しているレコードの特定のフィールドの値は、[フィールド名] のように取得することもできます。次の二つは同義です。

s = Data.getObject("Score");
s = [Score]


条件文の作成

先ほどのフォントの色を変える関数を、[Score]フィールドの値が50未満の条件に当てはまったときに適用するようにします。さらに、フォントサイズを14ptから18ptに変更し、太字にします。

if(Data.getObject("Score") < 50){
 // このフィールドのフォントの色を赤に設定
 this.setFontColor ("red");
 // フォントサイズを18pt(360twips)、太字に設定
 this.setFontSize(18*20);
 this.setFontBold(true);
}

【トピック】 サイズの単位

スクリプトで指定するサイズ等の単位はtwipsです。
Elixir Reportでは72dpiで変換するため、1twip=1/20ピクセルになります。


レポート出力のテスト

Renderボタンをクリックして出力結果を確認します。スコアが50点未満のときだけ、フォントが赤の太字で、サイズが大きくなりました。

画像「レポート出力テスト」

まとめ

今回の特集では、初めてElixir Reportのスクリプト機能を利用するにあたっての基本を紹介しました。Render Ifイベントを利用した表示/非表示の切り替えや、変数を使って行数をカウントし、背景色を1行おきに変更する方法など、よく利用されるスクリプトのサンプルは製品付属のヘルプドキュメントで紹介されています。

次回は変数とパラメータの利用について解説し、動作を試してみたいと思います。

製品付属の参考資料一覧

[ヘルプドキュメント]

  • JavaScriptの基本型
    ヘルプドキュメント - 2章 レポート設計 - 6. スクリプト機能 - 基本 - 基本型
  • イベントの詳細
    ヘルプドキュメント - 2章 レポート設計 - 6. スクリプト機能 - 基本 - イベント
  • よく利用されるスクリプトサンプル
    ヘルプドキュメント - 2章 レポート設計 - 6. スクリプト機能 - 使用例

[ヘルプドキュメント]

  • 基本のスクリプト処理をまとめたベーシックサンプル
    「JavaScriptサンプル1/2/3」
    /samples/basic/script1/script1.rml
    /samples/basic/script2/script2.rml
    /samples/basic/script3/script3.rml
  • 今回の特集に類似したスクリプトを利用したデモサンプル
    「中古車カタログサンプル」「成績表サンプル」「医療費サンプル」
    /samples/demo/car/car.rml
    /samples/demo/student/student.rml
    /samples/demo/iryohi/iryohi.rml