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

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

Last (最終画面) 画面フックメソッド

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

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

これ以前に決められた処理対象レコード群の中の最終の画面データをファイルまたはデータベースから読み集めて画面に表示する。

 

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

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

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

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

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

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

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

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

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

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

なお、フック名としては、Last の他に最終画面を用いることができる。

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

アプリ操作者から最終の画面データに移れという指示 (Last 指示) がなされたとき。または、NextFh (次画面) フックメソッドの中でエラーが検出された後。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

関連事項

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

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

使用例

' 処理対象のデータの中から最終画面に関するレコードを読み込む (Last)。
Friend Function 最終画面(ByVal fB As FormBase) As Integer
    If メインレコード.SelectLast() = 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.LAST_NoData
    End If
End Function ' 最終画面
// 処理対象のデータの中から最終画面に関するレコードを読み込む (Last)。
internal int 最終画面( FormBase fB ) {
    if (メインレコード.SelectLast() == 0) {
        FromDBToHdTl(fB);
        // 
        画面データキー = ((JutyuTable)メインレコード).受注コード;
        int 明細個数 = int.Parse(受注レコード.明細数);
        // 
        int 明細行インデックス = 0;
        while (明細行インデックス < 明細個数) {
            明細レコード.SelectEqual(画面データキー + TextDBMS.AlignRight((明細行インデックス + 1).ToString(), 3));
            FromDBToBd(fB, 明細行インデックス);
            明細行インデックス += 1;
        }
        // 
        return 明細行インデックス;
    }
    else {
        return FormBase.LAST_NoData;
    }
} // 最終画面
// 処理対象のデータの中から最終画面に関するレコードを読み込む (Last)。
int 最終画面( FormBase fB ) {
    if (メインレコード.SelectLast() == 0) {
        FromDBToHdTl(fB);
        // 
        画面データキー = ((JutyuTable) メインレコード).受注コード;
        int 明細個数 = Integer.parseInt(受注レコード.明細数);
        // 
        int 明細行インデックス = 0;
        while (明細行インデックス < 明細個数) {
            明細レコード.SelectEqual(画面データキー
                    + TextDBMS.AlignRight(
                                          String.valueOf(明細行インデックス + 1),
                                          3));
            FromDBToBd(fB, 明細行インデックス);
            明細行インデックス += 1;
        }
        // 
        return 明細行インデックス;
    } else {
        return FormBase.LAST_NoData;
    }
} // 最終画面