フック一覧 NextFh (画面フック) 前の画面フック 次の画面フック

VB C# ALL プログラミング言語によるフィルタ (ここで選んだ言語で選別された説明や図だけが表示されます)

NextFh (次画面) 画面フックメソッド

 この画面フックメソッドは、主にアプリフレームと呼ばれる画面アプリのための上位フレームワークを設計する方々がお使いになるものです。一般のアプリ開発者の方々は、上位フレームワーク設計者から示された情報があれば、必ずしもここの内容を詳細に知る必要はありません。

役割 (この画面フックメソッドに委託されている処理)

処理対象レコード群の中のカレント画面データ次の画面データをファイルまたはデータベースから読み集めて画面に表示する。

 

さらに、ここで表示した画面データをカレント画面データとして取り扱うために、この画面フックメソッドの責任において、適当な変数 (上図の空色の矢印) がそれを指し示すように設定し直す処置が必要である。こうすることで、その変数の内容は画面フックメソッド Current などにより参照され得るようになり、ここで表示した画面データがカレント画面データとみなされることになる。

前提とする事前環境: この画面フックメソッドが動作する以前に、画面フックメソッド Open, SelectFh, SelectExec などが処理対象レコード群を決定していて、適当な変数 (上図の灰色の矢印) がそれを指し示すように設定してある。

そして、画面フックメソッド SelectFh または SelectExec などがカレント画面データを選択していて、適当な変数がそれを指し示すように設定してある (上図の薄い空色の矢印)。

ちなみに、この画面フックメソッドの中でこの事前環境を変えて、次の画面データを指し示すように設定し直す (上図の空色の矢印) ことの必要性は、前述のとおりである。

配置 (ツーピーススタイルの場合にこの画面フックメソッドをどこに配置できるか)

ローカルピースかセントラルピースかのどちらか一方に配置する。または、どちらにも配置しない。

代表的な書き方 (詳しい構文はフックメソッドの書き方を参照)

VB での書き方:
 Friend Function NextFh(パラメタ宣言列) As Integer
 または
 Friend Function 画面略称_NextFh(パラメタ宣言列) As Integer

C# での書き方:
 internal int NextFh(パラメタ宣言列)
 または
 internal int 画面略称_NextFh(パラメタ宣言列)

Java での書き方:
 int NextFh(パラメタ宣言列)
 または
 int 画面略称_NextFh(パラメタ宣言列)

なお、フック名としては、NextFh の他に次画面を用いることができる。あるいは、 フックメソッド名として [Next] を用いることもできる。

呼び出される契機 (以下が切っ掛けとなりこのフックメソッドが呼び出される)

アプリ操作者からこの画面の次の画面データに移れという指示 (NextCm 指示) がなされたとき。または、表示モードの際に、アプリ操作者から Execute 指示がなされたとき (これは次の画面データへの移動の指示だとみなされる)。なお、Execute 指示については、Append の説明をご参照ください。

NextCm 指示とは、アプリ操作者がボタン Cm_NextCm をクリックすること、またはメニュー項目 Mn_NextCm をクリックすることか、これに相当する操作 (対応するショートカットキーの押下) をすること、または NextCm に対応づけられたファンクションキーを押下することを意味する。

戻り値の意味とデフォルト動作 (戻り値による FormBase への伝言)

FormBase.NEXT_NoData (= 0): 画面データをファイルまたはデータベースから読み込まなかった。

n (1 以上の整数): ボディ部の明細レコード数が n の画面データをファイルまたはデータベースから読み込んだ。

(ボディ部が存在しない場合には、明細レコード数 n の値を 1 にしてください)

デフォルト動作: NextFh 画面フックメソッドが組み込まれていない場合の動作は、FormBase.NEXT_NoData が設定された場合と同様である。

代行メッセージ (処理の流れに応じて発せられるメッセージ; カスタマイズ可能)

メッセージコード: "NEXTC"

"次のレコードに移ります。"

メッセージコード: "NEXTCM"

"この後ろにデータはありません。"

メッセージコード: "LASTCM"

"データが存在しません。"

使用上のヒントと注意事項

このフックメソッドの中では、単にファイルまたはデータベースの一つのレコードを読み込めばよいとは限らない。画面データ識別子で指し示された次の画面に必要なデータを読み集めて画面に表示することが必要である。

通常はボディ部 (拡張ボディ部) の先頭に初期表示されるのはそれぞれの先頭の明細行であるが、 プロパティ DspTopEDe, DspTopEDe に明細行番号を設定することによって、 その明細行番号の明細がボディ部 (拡張ボディ部) の先頭に初期表示されるようにできる。

関連事項

画面データを読み集める役割の画面フックメソッドには、この他に Current, First, Last, Prev がある。

適当な変数 (上図の空色の矢印) がカレント画面データを指し示すように設定する (または設定し直す) 役割をもつ画面フックメソッドには、この他に First, Last, Prev, SelectFh, SelectExec などがある。

使用例

' 処理対象のデータの中から現画面の次の画面に関するレコードを読み込む (Next)。
Friend Function 次画面(ByVal fB As FormBase) As Integer
    If 画面データキー = String.Empty Then
        Return FormBase.NEXT_NoData
    Else
        If メインレコード.SelectNext(画面データキー) = 0 Then
            FromDBToHdTl(fB)
            ' 
            画面データキー = CType(メインレコード, JutyuTable).受注コード
            Dim 明細個数 As Integer = Integer.Parse(JutyuTable.明細数)
            ' 
            Dim 明細行インデックス As Integer = 0
            While 明細行インデックス < 明細個数
                明細レコード.SelectEqual(画面データキー + TextDBMS.AlignRight((明細行インデックス + 1).ToString(), 3))
                FromDBToBd(fB, 明細行インデックス)
                明細行インデックス += 1
            End While
            ' 
            Return 明細行インデックス
        Else
            Return FormBase.NEXT_NoData
        End If
    End If
End Function ' 次画面
// 処理対象のデータの中から現画面の次の画面に関するレコードを読み込む (Next)。
internal int 次画面( FormBase fB ) {
    if (画面データキー == string.Empty) {
        return FormBase.NEXT_NoData;
    }
    else {
        if (メインレコード.SelectNext(画面データキー) == 0) {
            FromDBToHdTl(fB);
            // 
            画面データキー = ((JutyuTable)メインレコード).受注コード;
            int 明細個数 = int.Parse(受注レコード.明細数);
            // 
            int 明細行インデックス = 0;
            while (明細行インデックス < 明細個数) {
                明細レコード.SelectEqual(画面データキー + TextDBMS.AlignRight((明細行インデックス + 1).ToString(), 3));
                FromDBToBd(fB, 明細行インデックス);
                明細行インデックス += 1;
            }
            // 
            return 明細行インデックス;
        }
        else {
            return FormBase.NEXT_NoData;
        }
    }
} // 次画面
// 処理対象のデータの中から現画面の次の画面に関するレコードを読み込む (Next)。
int 次画面( FormBase fB ) {
    if (画面データキー.length() == 0) {
        return FormBase.NEXT_NoData;
    } else {
        if (メインレコード.SelectNext(画面データキー) == 0) {
            FromDBToHdTl(fB);
            // 
            画面データキー = ((JutyuTable) メインレコード).受注コード;
            int 明細個数 = Integer.parseInt(受注レコード.明細数);
            // 
            int 明細行インデックス = 0;
            while (明細行インデックス < 明細個数) {
                明細レコード.SelectEqual(画面データキー
                        + TextDBMS.AlignRight(
                                              String.valueOf(明細行インデックス + 1),
                                              3));
                FromDBToBd(fB, 明細行インデックス);
                明細行インデックス += 1;
            }
            // 
            return 明細行インデックス;
        } else {
            return FormBase.NEXT_NoData;
        }
    }
} // 次画面