フック一覧 SelectFh (画面フック) | 前の画面フック 次の画面フック |
VB C# ALL プログラミング言語によるフィルタ (ここで選んだ言語で選別された説明や図だけが表示されます)
この画面フックメソッドは、主にアプリフレームと呼ばれる画面アプリのための上位フレームワークを設計する方々がお使いになるものです。一般のアプリ開発者の方々は、上位フレームワーク設計者から示された情報があれば、必ずしもここの内容を詳細に知る必要はありません。
◇ 役割 (この画面フックメソッドに委託されている処理)
この画面フックメソッドには、二つの役割がある。その一つは、本格的な選択モードに関するものであり、二つ目は、イミディエイト選択に関するものである。
本格的な選択モードとは、カレント画面データの選択のための情報をこの画面上でアプリ操作者にインプットしてもらうものであり、このために (一時的ではない本格的な) 選択モードに移行してインプットを受け付ける。
イミディエイト選択とは、この画面フックメソッドの中で、ダイアログなどによるアプリ操作者への問い合わせを (他の画面フックメソッド SelectExec などとの連携なしに) 直ちに行って、カレント画面データを選択してしまうものである。
なお、これらの役割は、この画面フックメソッドの設計・開発時点でどちらか一方を果たすことに決めてしまうことが普通であるが、プログラミングの仕方によっては実行時に役割を選ぶこともできる。
前提とする事前環境: いずれの役割を果たす場合も、事前環境には次の二つのバラエティがある。この画面フックメソッドが動作する以前に、画面フックメソッド Open などが処理対象レコード群を決定していて、適当な変数 (上図の灰色の矢印) がそれを指し示すように環境設定が済んでいることもあれば、この環境設定処理は、先送りにされていて、画面フックメソッド SelectFh または SelectExec などにまかされていることもある。
本格的な選択モード: この場合の役割は、この画面アプリを本格的な選択モードに移行させてよいかどうかの関門チェックを行うことである。そして、必要に応じて選択モードへの移行にあたっての初期設定処理 (下図の中の黄色で示した選択モードのための初期設定処理) を行う。
本格的な選択モードに関する役割を果たした後の動作: 関門チェックを通過し初期設定処理が済んだ後 (つまり上図の黄色の矢印のルートを通過した後) は、直ちに選択モードになり、画面が初期化されて、アプリ操作者からのインプットが受け付けられるようになる。
この後はアプリ操作者の指示次第でいろいろな処理の流れになり得るが、アプリ操作者が選択モードでのインプットを終えて実行の指示 (Execute 指示) を行うことで、画面フックメソッド SelectExec が呼び出されるのが処理の本流である。
動作モードの変更を拒否すると: 関門チェックにおいて本格的な選択モードへの移行を拒否した場合 (つまり本格的な選択モードへ移行するのでもなく、イミディエイト選択をするのでもない場合) は、動作モードは変わらず元のままであり、何事もなかったかのように画面上のデータも変更されずに残る。 なお、下図は、ダイアログによる問い合わせをした後に動作モードの変更を拒否する流れを示したものだが、ダイアログによる問い合わせをせずに動作モードの変更を拒否してもかまわない。
イミディエイト選択: この場合の役割は、この画面フックメソッドの中で処理対象レコード群の中からカレント画面データを選択することである。このために、たとえばダイアログなどによってアプリ操作者に問い合わせを行うことが必要になるものである。そして、このようにして得られた情報を基にして、Current 前処理を実施する。Current 前処理とは、ここで選択したカレント画面データを適当な変数 (下図の空色の矢印) が指し示すように設定する処理である。
こうしておくと、画面フックメソッド Current がその変数を参照して、カレント画面データを画面に表示するという一連の処理をスムーズに進めることができる。
なお、環境設定処理が先送りにされていた場合は、この画面フックメソッドの中で処理対象レコード群を決定し、適当な変数 (上図の灰色の矢印) がそれを指し示すように環境設定することが必要である。この環境設定処理は、カレント画面データの選択より前に行わなければならない。
イミディエイト選択の役割を果たした後の動作: この画面フックメソッドの戻り値は、FormBase への伝言になっており、イミディエイト選択を行った後の動作モードを指定する。たとえば、たとえば、上図の太線のルートのように、表示モードまたは更新モードへ移行せよと伝言すると、画面フックメソッド Indicate または UpdateChk が呼び出されて、必要に応じて関門チェックと初期設定処理が行われた後に、Current が呼び出されることになる。そして、カレント画面データが画面に表示される。
◇ 配置 (ツーピーススタイルの場合にこの画面フックメソッドをどこに配置できるか)
ローカルピースかセントラルピースかのどちらか一方に配置する。または、どちらにも配置しない。
◇ 代表的な書き方 (詳しい構文はフックメソッドの書き方を参照)
VB での書き方:
Friend Function SelectFh(パラメタ宣言列) As Integer
または
Friend Function 画面略称_SelectFh(パラメタ宣言列) As Integer
C# での書き方:
internal int SelectFh(パラメタ宣言列)
または
internal int 画面略称_SelectFh(パラメタ宣言列)
Java での書き方:
int SelectFh(パラメタ宣言列)
または
int 画面略称_SelectFh(パラメタ宣言列)
なお、フック名としては、SelectFh の他に選択モードを用いることができる。あるいは、 フックメソッド名として [Select] を用いることもできる。
◇ 呼び出される契機 (以下が切っ掛けとなりこのフックメソッドが呼び出される)
アプリ操作者からこの画面を選択モードに変えよという指示 (SelectCm 指示) がなされたとき。または、動作モードの遷移に関する画面フックメソッド (Append, Delete, IndicateExec, SelectExec, Update) の戻り値によって選択モードに変えよという伝言がなされた後。
SelectCm 指示とは、アプリ操作者がボタン Cm_SelectCm をクリックすること、またはメニュー項目 Mn_SelectCm をクリックすることか、これに相当する操作 (対応するショートカットキーの押下) をすること、または SelectCm に対応づけられたファンクションキーを押下することを意味する。
◇ 戻り値の意味とデフォルト動作 (戻り値による FormBase への伝言)
FormBase.SELECT_Deny (= 0): 本格的な選択モードへの移行 (動作モードの変更) を拒否せよ。FormBase は、この伝言を受けると、アプリ操作者からなされた SelectCm 指示を無視して、指示がなされなかったかのように振る舞う。つまり、アプリ操作者からなされた SelectCm 指示は無効になる。
FormBase.SELECT_Select (= 1): 選択モードに移行して、選択条件のインプットを受け付けよ。
FormBase.SELECT_AppType (= 2): 選択条件を設定済であり、アプリの型に従って表示モード (データエントリまたはデータ照会の場合) あるいは更新モード (データ更新またはデータエントリ更新の場合) に移行して、カレント画面データを表示せよ。
FormBase.SELECT_Indicate (= 3): 選択条件を設定済であり、表示モードに移行して、カレント画面データを表示せよ。
FormBase.SELECT_Update (= 4): 選択条件を設定済であり、更新モードに移行して、カレント画面データを表示せよ。
FormBase.SELECT_AppendForce (= 5): 画面を初期化して、追加モードに移行せよ。
FormBase.SELECT_Append (= 15): 選択条件を設定済であり、追加モードに移行して、カレント画面データを表示せよ。
デフォルト動作: SelectFh 画面フックメソッドが組み込まれていない場合の動作は、FormBase.SELECT_AppType が設定された場合と同様である。
◇ 代行メッセージ (処理の流れに応じて発せられるメッセージ; カスタマイズ可能)
メッセージコード: "SELECTCM"
"選択モードに変更してよいですか? (一部のデータをインプットしていても、 なかったものとみなされます。)"
◇ 使用上のヒントと注意事項
このフックメソッドの中で、動作モードの変更を拒否することにした場合は、適当なメッセージをアプリ操作者に向けて発してから、戻り値を FormBase.SELECT_Deny にしてください。
なお、アプリ操作者は、何のメッセージも示されないと、自分の指示どおりに動作モードが変更されるものと期待する。そこで、この期待に応えるためには、戻り値をそれに相応しい値にすることが必要である。
◇ 関連事項
動作モードの変更を関門チェックする画面フックメソッドには、この他に AppendChk, Indicate, UpdateChk がある。
適当な変数 (上図の空色の矢印) がカレント画面データを指し示すように設定する (または設定し直す) 役割をもつ画面フックメソッドには、この他に First, Last, NextFh, Prev, SelectExec がある。
◇ 使用例
' 処理対象のデータを選択する (Select)。 Friend Function 選択モード(ByVal fB As FormBase, ByVal iB_受注コード As ItemBase) As Integer Dim 選択ダイアログ As SListBase12 = New SListBase12(fB, iB_受注コード) ' Dim wk_DialogResult As DialogResult = 選択ダイアログ.ShowDialog(fB.myForm) If Not (fB.sListCom Is Nothing) Then Dim 選択値 As Object = fB.sListCom fB.sListCom = Nothing 画面データキー = CType(選択値, String) Return FormBase.SELECT_AppType ' 2: 表示または更新モードにせよという指定。 Else Return FormBase.SELECT_Deny ' 0: モード変更不可の指定。 End If End Function ' 選択モード
// 処理対象のデータを選択する (Select)。 internal int 選択モード( FormBase fB, ItemBase iB_受注コード ) { SListBase12 選択ダイアログ = new SListBase12(fB, iB_受注コード); // DialogResult wk_DialogResult = 選択ダイアログ.ShowDialog(fB.myForm); if (!(fB.sListCom == null)) { object 選択値 = fB.sListCom; fB.sListCom = null; 画面データキー = (string)選択値; return FormBase.SELECT_AppType; //2: 表示または更新モードにせよという指定。 } else { return FormBase.SELECT_Deny; //0: モード変更不可の指定。 } } // 選択モード
// 処理対象のデータを選択する (Select)。 int 選択モード( FormBase fB, ItemBase iB_受注コード ) { SListBase12 選択ダイアログ = new SListBase12(fB, iB_受注コード); // DialogResult wk_DialogResult = 選択ダイアログ.showDialog(fB.myForm); if (!(fB.sListCom == null)) { Object 選択値 = fB.sListCom; fB.sListCom = null; 画面データキー = (String) 選択値; return FormBase.SELECT_AppType; // 2: 表示または更新モードにせよという指定。 } else { return FormBase.SELECT_Deny; // 0: モード変更不可の指定。 } } // 選択モード