PrintStreamスクリプトを使用することにより、複数のフォームをより高い自由度で操作することができます。
スクリプトウィザードを使用すると、複合フォームスクリプトを自動的に生成することができます。
複合フォームスクリプトを自動的に生成するには、以下の条件を満たしている必要があります。
・フォームが複数作成されている
・フォーム間がリージョン接続されている
・印刷データが設定されている
「編集」メニューの「スクリプト操作」「スクリプトの生成」を選択します。
「複合フォームスクリプトを生成する」を選択します。
以降の操作は通常のスクリプト生成と同様です。
スクリプトは、現在の複合フォームに関する設定を元に生成されます。開始ページ、最終ページの設定ON/OFFやグループの指定によって、生成されるスクリプトは変化します。
複合フォームに関連するスクリプト
OnPageChangeイベントハンドラは、改ページが発生するごとに呼び出されます。
この中で次のフォームを判定する処理を行い、戻り値として次のフォームを示すページオブジェクトを返すことにより、次のフォームが決定します。
また、OnPageChangeイベントハンドラの引数は、PageChange() 関数、WriteRecords()関数、Write()関数の引数に渡された値を受け取ることができます。これは、改ページが発生した理由を知るためのフラグとして利用できます。
IsFirst()関数は、フォーム(ページオブジェクト)が先頭フォームとして設定されているかを知ることができます。リージョン接続の先頭のリージョンを持つフォームを指定した場合に真(1)が返り、それ以外のフォームは偽(0)が返ります。
IsLast()関数は、リージョン接続の最後のリージョンを含むフォームの場合に真(1)が返ります。
GetParent()関数、GetNextRegion()関数
GetParent()関数は、リージョンの親オブジェクトであるページオブジェクトを取得することができます。
GetNextRegion()関数は、リージョン接続の次にあるリージョンオブジェクトを取得することができます。
SaveCursor()関数、RestoreCursor()関数
最終フォームの判定では、印刷データを先読みして判断する場合があります。印刷データのカーソルを先読みしたり、戻したりする場合にはSaveCursor()関数、RestoreCursor()関数を使用します。
SetWaitMode()関数、WriteRecords()関数、GetWaitRecord()関数
印刷データの1回のフェッチに対して複数のレコードが出力される場合(キーブレイク時の集計レコードなど)に、出力のタイミングを厳密に知るために使用します。
SetWaitMode()関数を処理の最初に1回だけ呼び出し、「待機モード」に設定します。
WriteRecords()関数を使用して、Write()関数で出力したレコード(待機中のレコード)を一斉に出力します。
OnPageChangeイベントハンドラ内ではGetWaitRecord()関数を使用して待機中のレコードを取得して改ページの判定などを行います。