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

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

SelectExec (選択処理) 画面フックメソッド

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

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

本格的な選択モードでなされたインプット情報に従って、処理対象レコード群の中のカレント画面データを選択して、Current 前処理を実施する。つまり、この画面フックメソッドが呼び出される前に、アプリ操作者が画面上にデータ選択のための情報をインプットしているので、それを基にして Current 前処理を実施するのである。Current 前処理とは、選択したカレント画面データを適当な変数 (下図の空色の矢印) が指し示すように設定する処理である。なお、これに先立って、ここで選択処理を行える状況になっているかどうかのチェック (選択処理の可否チェック) も必要に応じて行うことができる。

Current 前処理を実施しておくと、画面フックメソッド Current がその変数を参照して、カレント画面データを画面に表示するという一連の処理をスムーズに進めることができる。

 

前提とする事前環境: 次の二つのバラエティがある。この画面フックメソッドが動作する以前に、画面フックメソッド Open, SelectFh などが処理対象レコード群を決定していて、適当な変数 (上図の灰色の矢印) がそれを指し示すように環境設定が済んでいることもあれば、この環境設定処理は、先送りにされていて、この画面フックメソッドにまかされていることもある。

そして、この画面フックメソッドが動作する以前に、アプリ操作者は、選択モードでの画面データのインプット (下図) を完了させている。

なお、環境設定処理が先送りになっていた場合は、この画面フックメソッドの中で処理対象レコード群を決定し、適当な変数 (上図の灰色の矢印) がそれを指し示すように環境設定することが必要である。この環境設定処理は、カレント画面データの選択より前に行わなければならない。

 

役割を果たした後の動作: この画面フックメソッドの戻り値は、FormBase への伝言になっており、選択処理の可否、またはここで選択処理を行った後の動作モードを指定する。たとえば、上図の太線のルートのように、Current 前処理を行った後に表示モードまたは更新モードへ移行せよと伝言すると、画面フックメソッド Indicate または UpdateChk が呼び出されて、必要に応じて関門チェックと初期設定処理が行われた後に、Current が呼び出されることになる。そして、カレント画面データが画面に表示される。

この画面フックメソッドの戻り値の指定で選択処理を否とした場合 (つまり FormBase.SELECTEXEC_Deny を指定した場合)、または戻り値の指定に従って呼び出される画面フックメソッド Indicate, UpdateChk, AppendChk の中で動作モードの移行が許可されなかった場合は、選択モードでインプットを受け付けていた元の状態に戻る。これらの場合は、何事もなかったかのように画面上のデータも変更されずに残る。

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

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

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

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

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

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

なお、フック名としては、SelectExec の他に SelectE および選択処理を用いることができる。

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

アプリ操作者が選択モードでのインプットを終えて、選択したデータをファイルまたはデータベースから読み集めよという意味の実行の指示 (Execute 指示) を行ったとき。

Execute 指示には、明の Execute 指示暗の Execute 指示がある。 いずれも“画面上にデータが整ったので登録せよ”という意味の指示である。 この指示がなされると、まず画面データ完備チェックが行われる。 そして、この完備チェックでデータが完備していると判定された場合だけ、この指示は有効になる。 こう判定されないと、この指示は無効になり、何の指示もなかったことになる。

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

暗の Execute 指示とは、カーソルが画面の中のインプット可能な項目うちの最終位置にあるときに Enter キーを押下すること、またはテール部にインプット可能な項目が存在しないケースにおいては拡張ボディ部 (または拡張ボディ部が存在しないケースにおいてはボディ部) のカレント明細 (レコード) の項目がすべて初期状態のときに (つまりカレント明細に何もインプットしていないときに) 必須入力項目上で Enter キーを押下することを意味する。

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

FormBase.SELECTEXEC_Deny (= 0): 選択モードへの移行を拒否せよ。FormBase は、この伝言を受けると、アプリ操作者からなされた SelectExec 指示を無視して、指示がなされなかったかのように振る舞う。つまり、アプリ操作者からなされた SelectExec 指示は無効になる。

FormBase.SELECTEXEC_SelectCurrent (= 1): 選択モードのまま、カレント画面データを表示せよ。これを用いるのは、検索モードでデータを表示して、次の検索条件のインプットを受け付けるような場合である。

FormBase.SELECTEXEC_AppType (= 2): 選択条件を設定済であり、アプリの型に従って表示モード (データエントリまたはデータ照会の場合) あるいは更新モード (データ更新またはデータエントリ更新の場合) に移行して、カレント画面データを表示せよ。

FormBase.SELECTEXEC_Indicate (= 3): 選択条件を設定済であり、表示モードに移行して、カレント画面データを表示せよ。

FormBase.SELECTEXEC_Update (= 4): 選択条件を設定済であり、更新モードに移行して、カレント画面データを表示せよ。

FormBase.SELECTEXEC_AppendForce (= 5): 追加モードに移行せよ。

FormBase.SELECTEXEC_Append (= 15): 選択条件を設定済であり、追加モードに移行して、カレント画面データを表示せよ。

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

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

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

"インプットの必要な項目が残っています。"
 "または、 エラーの項目かインプット途中の項目が残っています。"
 "インプットを完結させてください。"

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

"選択条件がインプットされました。"

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

関連事項

Execute 指示によって呼び出される画面フックメソッドには、 この他に Append, IndicateExec, Update がある。

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

使用例

' 処理対象のデータが選択された際の処理をする (SelectExec)。
Friend Function SelectExec(ByVal JutyuNo As String) As Integer
    ' 受注 No. が未入力ならば選択モードに戻る
    If JutyuNo = String.Empty Then
        Return FormBase.SELECTEXEC_SelectCurrent ' 選択モードへ移行
    Else
        If IsExistNo(JutyuNo) Then ' すでに伝票番号が存在するとき
            Return FormBase.SELECTEXEC_Update ' 更新モードへ移行
        Else ' 伝票番号が存在しないとき
            Return FormBase.SELECTEXEC_Append ' 追加モードへ移行
        End If
    End If
End Function
// 処理対象のデータが選択された際の処理をする (SelectExec)。
internal int SelectExec( string JutyuNo ) {
    // 受注 No. が未入力ならば選択モードに戻る
    if (JutyuNo == String.Empty) {
        return FormBase.SELECTEXEC_SelectCurrent; // 選択モードへ移行
    }
    else {
        if (IsExistNo(JutyuNo)) { // すでに伝票番号が存在するとき
            return FormBase.SELECTEXEC_Update; // 更新モードへ移行
        }
        else { // 伝票番号が存在しないとき
            return FormBase.SELECTEXEC_Append; // 追加モードへ移行
        }
    }
}
// 処理対象のデータが選択された際の処理をする (SelectExec)。
int SelectExec( String JutyuNo ) {
    // 受注 No. が未入力ならば選択モードに戻る
    if (JutyuNo.length() == 0) {
        return FormBase.SELECTEXEC_SelectCurrent; // 選択モードへ移行
    } else {
        if (IsExistNo(JutyuNo)) { // すでに伝票番号が存在するとき
            return FormBase.SELECTEXEC_Update; // 更新モードへ移行
        } else { // 伝票番号が存在しないとき
            return FormBase.SELECTEXEC_Append; // 追加モードへ移行
        }
    }
}