VBScript は、計算フィールドで式を評価する場合にのみ使用できるわけではありません。レポートのレンダリング時に実行されるスクリプトを指定することもできます。このようなスクリプトを使用して、レポートの書式設定を変更できます。これらのスクリプトは、イベントプロパティに置かれます。イベントプロパティは Visual Basic のイベントハンドラに似ていますが、レポートを表示するアプリケーションのスコープではなく、レポートのスコープ内でスクリプトが実行される点が異なります。
たとえば、イベントプロパティを使用すると、フィールドの Font プロパティや ForeColor プロパティをフィールドの値に基づいて設定できます。この動作は、レポート自体に組み込まれ、レンダリングに使用されるアプリケーションに関係なく保持されます。
もちろん、従来のイベントも使用できます。従来のイベントは、レポートではなくアプリケーションに影響を及ぼす動作を実装するために使用します。たとえば、StartPage イベントのハンドラを記述して、レンダリングされているレポートに関係なく、アプリケーションでページ数を更新できます。
次の表に、使用できるイベントプロパティと、その一般的な使用方法を示します。
オブジェクト | プロパティ | 説明 |
---|---|---|
C1FlexReport | OnOpen | レポートがレンダリングを開始すると実行されます。ConnectionString プロパティや RecordSource プロパティを変更したり、VBScript の変数を初期化するために使用できます。 |
OnClose | レポートがレンダリングを終了すると実行されます。クリーンアップ作業を実行するために使用できます。 | |
OnNoData | レポートのレンダリングが開始されたが、ソースレコードセットが空の場合に実行されます。Cancel プロパティを True に設定して、レポートの生成を中止できます。ダイアログボックスを表示して、レポートが表示されない理由をユーザーに知らせることもできます。 | |
OnPage | 新しいページが開始されると実行されます。さまざまなフィールドのセクションの Visible プロパティを状況に応じて設定するために使用できます。コントロールは、新しいページが開始されるたびに自動的に 1 ずつ増える Page 変数を保持しています。 | |
OnError | エラーが発生すると実行されます。 | |
Section | OnFormat | セクション内のフィールドが評価される前に実行されます。この時点で、ソースレコードセット内のフィールドには、これからレンダリングされる値が反映されていますが、レポートフィールドには反映されていません。 |
OnPrint | セクション内のフィールドが印刷される前に実行されます。この時点で、フィールドの評価は終了しており、条件付き書式設定を実行できます。 |
以下のトピックでは、これらのプロパティの一般的な使用例を示します。
値に応じたフィールドの書式設定は、おそらく最も一般的なSection.OnPrintプロパティの使用方法です。製品別に注文数をグループ化してリストするレポートを例にします。別のフィールドを使用して在庫数を表示する代わりに、追加注文レベルに満たない製品の名前を赤色の太字で強調表示することにします。
追加注文レベルに満たない製品の名前を赤色の太字で強調表示するには、次のようなイベントスクリプトを使用します。
コードを記述する代わりに、C1FlexReportDesigner アプリケーションを使用して、詳細セクションの Section.OnPrint プロパティの VBScript エディタに、次のスクリプトコードを直接入力できます。次の手順を実行します。
If UnitsInStock < ReorderLevel Then
ProductNameCtl.ForeColor = RGB(255,0,0)
ProductNameCtl.Font.Bold = True
Else
ProductNameCtl.ForeColor = RGB(0,0,0)
ProductNameCtl.Font.Bold = False
End If
コントロールは、このセクションを出力するたびに、この VBScript コードを実行します。スクリプトは、"ReorderLevel" データベースフィールドの値を取得し、その値に基づいて、"ProductName" レポートフィールドの Field.Font.Bold プロパティと Field.ForeColor プロパティを設定します。在庫が追加注文レベルに満たない製品は、製品名が赤色の太字になります。
次のスクリーンショットは、特別な効果が適用されたレポートのセクションです。
詳細セクションの OnFormat プロパティに式を指定することで、データに基づいてレポートフィールドの書式を変更できます。
たとえば、詳細セクションに画像コントロールを含むフィールドがあるが、レコードに画像データが存在しない場合に、そのレコードを非表示にできます。データ(この例では、レコードの画像)が存在しない場合に詳細セクションを非表示にするには、詳細セクションの OnFormat プロパティに次のスクリプトを追加します。
If isnull(PictureFieldName) Then
Detail.Visible = false
Else
Detail.Visible = true
End If
データが存在しないセクション(この例では、レコードの画像)を非表示にするには、次のようなイベントスクリプトを使用します。
コードを記述する代わりに、C1FlexReportDesigner を使用して、詳細セクションの OnFormat プロパティの VBScript エディタに、次のスクリプトコードを直接入力できます。次の手順を実行します。
If isnull(PictureFieldName) Then
Detail.Visible = false
Else
Detail.Visible = true
End If
Detail.Visible = not isnull(PictureFieldName)
フィールドの書式を変更してフィールドのコンテンツを強調表示する代わりに、別のフィールドの Visible プロパティを True または False に設定することで、特別な効果を生成することができます。たとえば、製品名を囲む「Shapefld」という名前の新しい図形フィールドを挿入し、その Visible プロパティを True に設定する場合は、スクリプトを次のように記述します。
If UnitsInStock < ReorderLevel Then Shapefld.Visible = True Else Shapefld.Visible = False End If
追加注文レベルに満たない製品にボックスを表示して強調表示するには、次のようなイベントスクリプトを使用します。
このコードは、VBScript イベントハンドラを含む文字列を作成し、それをセクションの OnPrint プロパティに割り当てます。
To highlight products that are below the reorder level using FlexReportDesigner:
コードを記述する代わりに、C1FlexReportDesigner アプリケーションを使用して、詳細セクションの OnPrint プロパティの VBScript エディタに、次のスクリプトコードを直接入力できます。次の手順を実行します。
If UnitsInStock < ReorderLevel Then
Shapefld.Visible = True
Else
Shapefld.Visible = False
End If
次のスクリーンショットは、特別な効果が適用されたレポートのセクションです。
C1FlexReport.Page 変数は、コントロールによって作成されて自動的に更新されます。ページのヘッダーまたはフッターにページ数を追加する場合に便利です。新しいグループの先頭で、ページカウンタをリセットするとよい場合があります。たとえば、レコードを国別にグループ化しているレポートがあるとします。コードを追加するか、デザイナを使用して、ページカウンタをリセットできます。
新しいグループ(新しい国など)の先頭でページカウンタをリセットするには、PageFooter フィールドの Text プロパティを設定します。次のコードを入力します。
新しいグループ(新しい国など)の先頭でページカウンタをリセットするには、次の手順に従って、PageFooter フィールドの Text プロパティを設定します。
="Page " & GroupPage(0) & " of " & GroupPages(0) & " for " & Country