FastReportのテキスト オブジェクトに式を含める方法



FastReportのテキスト オブジェクトには、「式」という強力な機能があります。

通常のテキストと組み合わせることで、定数・変数・関数・DBの値を表示されることができます。

この機能について、プロパティの設定方法などと合わせて解説しました。

こんにちは。ドリームハイブの山本です。
本日もFastReportの情報をお伝えします。

今日は、テキストオブジェクトによる式の表示という情報をお伝えしたいと思います。

式というのは何なのかというお話をするために、ちょっと書いてみますが、またテキストオブジェクトなので、ガっと書いて、ここで、「今日の日付」というふうに書いて、この「式の挿入」でDateというのを選んでみます。

今、カッコ書きでDateというのが挿入されました。

OKを押すと、押した直後では、単なるいつも通りの「今日の日付:[Date]」というのが表示されてると思うのですけれども、プレビューして、つまり、レポートを実行した際には、きちんと今日の日付が表示されるという、こういう変数というか、式の機能を持っているんですね。

この機能は、当然「式」という名前のとおり、計算とかをすることもできます。

例えば、[1+2*3+4]というふうに、大カッコ[]の内側に書いたものがその式として認識されるので、これでOKを押すと、書いた直後では何も表示されていないのですが、レポートを実行すると、きちんと計算した結果が表示されていると思います。

こんな感じで、式というのを使えば、何かしらの計算をしたりだとか、予め定義された変数を表示したりすることができるんですね。

ここで1つ、大カッコ[]が全部使われると、どんな問題が起こるかという、問題点についてお話しします。

例えば、プログラムを書きたいがために、a[1]に、配列の1という要素に対して、何か、データを10というふうに代入するというような、こんな式があった時に、これOKを押してプレビューすると、カッコという部分が、そのまま式として評価しようとして、でも実際には存在しないので、カッコが抜けちゃった状態になってしまうんですね。

これって、ちょっと使いづらいじゃないですか。

で、カッコはそのまま表示させたい、というニーズに対してはどうすればいいかと言うと、ここでAllowExpressionsというプロパティがありますので、それをFalseにします。

それと、プレビューした時に、きちんとカッコが残るという、まあ、こんな話です。

非常にわかりやすい例かと思うんですけれども、今度は別の問題があります。

大カッコを使った変数も、やっぱり使いたいという場合にはどうすればいいか。

例えば、a[2]に対して、さっき使ったDateという、式からシステム変数を選んでもいいですが、このように直接書いても構いませんが、このDateというのを表示させたい場合、これでOK押してしまうと、やっぱり表示させたいDateがそのまま出ちゃうんですよね。

そうすると、思ったものとは多分違うと思うんですが、じゃあどうすればいいかと言うと、そもそも大カッコというデリミタの文字が問題なのであって、大カッコ以外の記号で表示すればいいという、そういう考え方もできてきます。

なので、まず、AllowExpressionsをチェックを入れた後、大カッコ以外に変更するために、プロパティExpressionDelimitersというものを、これを変更したいと思います。

今は大カッコになっていますが、これを、<$,$>というように、通常だったらあり得ないというか、通常だったら出てこないような記号の組み合わせにした状態で、先ほどのDateというのも、今作った<$,$>に変更して、これでプレビューを押してみると、無事日付の部分が適用されたことがわかります。

この <$ とか書いたのは、ぶつかりにくいということと、あとExpressionDelimiitersというのは囲むためのタグ、デリミタなので区切り文字を使いたいので、同じ左右で囲む部分のデリミタ文字として同じものを使うことができません。

$ 1つだけとかっていうことができないということです。

なので、組み合わせを使って、普通だったら書かれないような記号の組み合わせで、それを表現するというのが基本的な考え方になります。

これで、望み通りのことができました。

このように、式という機能を使うと、非常に簡単にHTMLなどのタグの時と同じように、1つのテキストオブジェクトの中に様々な変数を表示させたりだとか、システム変数を表示させたりだとか、あとは計算を行ったりすることができます。

この式の中には、実際、定数、変数、関数、そして、接続されていればデータベースのフィールドを使用することもできます。

データベースフィールドの利用については、今後ご紹介する予定です。

これを使うと、ちょっとした装飾以外にも、変数の値をそのまま表示させたいだけじゃない、という場合なんかに、より複雑なことができるというのがご理解いただけるのではないでしょうか。

そもそも、変数を使った計算なんかもできますので、ちょっとした小計などを作るのに、わざわざ計算を予めプログラムで作ったりだとか、スクリプト機能を使って作ったりだとか、計算させたりだとか、そういうことが不要になるということが、この例からわかっていただけたかと思います。

本日は、以上です。