フック一覧 Append (画面フック) | 前の画面フック 次の画面フック |
VB C# ALL プログラミング言語によるフィルタ (ここで選んだ言語で選別された説明や図だけが表示されます)
この画面フックメソッドは、主にアプリフレームと呼ばれる画面アプリのための上位フレームワークを設計する方々がお使いになるものです。一般のアプリ開発者の方々は、上位フレームワーク設計者から示された情報があれば、必ずしもここの内容を詳細に知る必要はありません。
◇ 役割 (この画面フックメソッドに委託されている処理)
追加モードでインプットされたカレント画面データをファイルまたはデータベースで構成された処理対象レコード群に追加する。 つまり、この画面フックメソッドが呼び出される前に、アプリ操作者が画面上にデータをインプットしているので、それをファイルまたはデータベースに追加するのである。 なお、これに先立って、ここで追加処理を行える状況になっているかどうかのチェック (追加処理の可否チェック) も必要に応じて行うことができる。
前提とする事前環境: この画面フックメソッドが動作する以前に、画面フックメソッド Open, SelectFh, SelectExec などが処理対象レコード群を決定していて、適当な変数 (上図の灰色の矢印) がそれを指し示すように設定してある。 そして、アプリ操作者は、追加モードでの画面データのインプット (下図) を完了させている。
役割を果たした後の動作: この画面フックメソッドの戻り値は、FormBase への伝言になっており、追加処理の可否、またはここで追加処理を行った後の動作モードを指定する。 たとえば、上図の太線のルートのように、追加処理を行った後に引き続き追加モードを継続せよと伝言すると、FormBase は、画面を初期化して、アプリ操作者からの次の画面データのインプットを受け付けることになる。
この画面フックメソッドの戻り値の指定で追加処理を否とした場合 (つまり FormBase.APPEND_Nop を指定した場合)、または戻り値の指定に従って呼び出される画面フックメソッド Indicate, UpdateChk, SelectFh の中で動作モードの移行が許可されなかった場合は、追加モードでインプットを受け付けていた元の状態に戻る。 これらの場合は、何事もなかったかのように画面上のデータも変更されずに残る。
◇ 配置 (ツーピーススタイルの場合にこの画面フックメソッドをどこに配置できるか)
ローカルピースかセントラルピースかのどちらか一方に配置する。または、どちらにも配置しない。
◇ 代表的な書き方 (詳しい構文はフックメソッドの書き方を参照)
VB での書き方:
Friend Function Append(パラメタ宣言列) As Integer
または
Friend Function 画面略称_Append(パラメタ宣言列) As Integer
C# での書き方:
internal int Append(パラメタ宣言列)
または
internal int 画面略称_Append(パラメタ宣言列)
Java での書き方:
int Append(パラメタ宣言列)
または
int 画面略称_Append(パラメタ宣言列)
なお、フック名としては、Append の他に追加処理を用いることができる。
◇ 呼び出される契機 (以下が切っ掛けとなりこのフックメソッドが呼び出される)
アプリ操作者が追加モードでのインプットを終えて、データをファイルまたはデータベースに追加せよという意味の実行の指示 (Execute 指示) を行ったとき。
Execute 指示には、明の Execute 指示と暗の Execute 指示がある。 いずれも“画面上にデータが整ったので登録せよ”という意味の指示である。 この指示がなされると、まず画面データ完備チェックが行われる。 そして、この完備チェックでデータが完備していると判定された場合だけ、この指示は有効になる。 こう判定されないと、この指示は無効になり、何の指示もなかったことになる。
明の Execute 指示とは、アプリ操作者がボタン Cm_Execute をクリックすること、またはメニュー項目 Mn_Execute をクリックすることか、これに相当する操作 (対応するショートカットキーの押下) をすること、または Execute に対応づけられたファンクションキーを押下することを意味する。
暗の Execute 指示とは、カーソルが画面の中のインプット可能な項目うちの最終位置にあるときに Enter キーを押下すること、またはテール部にインプット可能な項目が存在しないケースにおいては拡張ボディ部 (または拡張ボディ部が存在しないケースにおいてはボディ部) のカレント明細 (レコード) の項目がすべて初期状態のときに (つまりカレント明細に何もインプットしていないときに) 必須入力項目上で Enter キーを押下することを意味する。
◇ 戻り値の意味とデフォルト動作 (戻り値による FormBase への伝言)
FormBase.APPEND_Nop (= 0): 動作モードの変更を行わずに、カレント画面データをそのまま表示せよ。 FormBase は、この伝言を受けると、アプリ操作者からなされた Execute 指示を無視して、指示がなされなかったかのように振る舞う。 つまり、アプリ操作者からなされた Execute 指示は無効になる。
FormBase.APPEND_Select (= 1): 追加モードから選択モードに移行せよ。 なお、選択モードに移行する際には、SelectFh フックメソッドがあれば、それが呼び出されることになる。
FormBase.APPEND_AppType (= 2): アプリの型に従って、追加モードから表示モード (データエントリまたはデータ照会の場合) あるいは更新モード (データ更新またはデータエントリ更新の場合) に移行して、カレント画面データを表示せよ。
FormBase.APPEND_Indicate (= 3): 追加モードから表示モードに移行して、カレント画面データを表示せよ。
FormBase.APPEND_Update (= 4): 追加モードから更新モードに移行して、カレントの次の画面データを表示せよ。
FormBase.APPEND_Append (= 5): 追加モードのまま画面データを初期化して、次のデータエントリを受け付けよ。
デフォルト動作: Append 画面フックメソッドが組み込まれていない場合の動作は、FormBase.APPEND_Append が設定された場合と同様である。
◇ 代行メッセージ (処理の流れに応じて発せられるメッセージ; カスタマイズ可能)
メッセージコード: "APPEND"
"伝票を発行します。"
メッセージコード: "COMPLETEC"
"インプットの必要な項目が残っています。"
"または、 エラーの項目かインプット途中の項目が残っています。"
"インプットを完結させてください。"
◇ 使用上のヒントと注意事項
このフックメソッドの中で、 カレント画面データをファイルまたはデータベースに追加しないことにした場合は、 適当なメッセージをアプリ操作者に向けて発してから、戻り値を FormBase.APPEND_Nop にすればよい。
なお、アプリ操作者は、何のメッセージも示されないと、 自分の指示どおりにカレント画面データが登録されると期待するものである。 なぜなら、このフックメソッドの本来の役割は、この期待に応えて登録処理をすることなのだから。
ボディ部または拡張ボディ部をもつ画面においては、 単にファイルまたはデータベースに一つのレコードを追加するだけでよいとは限らない。 画面の中のすべてのデータ (すべての明細) に関する追加処理を行うことが必要である。 このために、通常は複数のレコードの追加処理が必要になるものである。
◇ 関連事項
Execute 指示によって呼び出される画面フックメソッドには、 この他に IndicateExec, SelectExec, Update がある。
ファイルまたはデータベースの内容を変更する役割の画面フックメソッドには、 この他に Delete, Update がある。
◇ 使用例
' 受注トランザクションテーブルに現画面に関するレコードの追加 (書出し) を行う (Append)。 Friend Function 追加処理(ByVal fB As FormBase) As Integer TextDBMS.TranStart() ' ' Hd, Tl の情報を書き出す。 FromHdTlToDB(fB) メインレコード.InsertRecord() ' Dim 明細行インデックス As Integer = 0 While 明細行インデックス < fB.LastDe ' 各明細行の情報を書き出す。 FromBdToDB(fB, 明細行インデックス) 明細レコード.InsertRecord() 明細行インデックス = 明細行インデックス + 1 End While ' TextDBMS.TranCommit() ' fB.StatusOut("伝票を発行しました。(伝票番号 " + _ VB.Strings.Format(画面データキー, 画面キー項目フォーマット) + ")", _ System.Drawing.Color.Blue) ' ' 追加モードのまま、次のデータエントリを受け付ける。 Return FormBase.APPEND_Append End Function ' 追加処理
// 受注トランザクションテーブルに現画面に関するレコードの追加 (書出し) を行う (Append)。 internal int 追加処理( FormBase fB ) { TextDBMS.TranStart(); // // Hd, Tl の情報を書き出す。 FromHdTlToDB(fB); メインレコード.InsertRecord(); // int 明細行インデックス = 0; while (明細行インデックス < fB.LastDe) { // 各明細行の情報を書き出す。 FromBdToDB(fB, 明細行インデックス); 明細レコード.InsertRecord(); 明細行インデックス = 明細行インデックス + 1; } // TextDBMS.TranCommit(); // fB.StatusOut("伝票を発行しました。(伝票番号 " + Strings.Format(画面データキー, 画面キー項目フォーマット) + ")", System.Drawing.Color.Blue); // // 追加モードのまま、次のデータエントリを受け付ける。 return FormBase.APPEND_Append; } // 追加処理
// 受注トランザクションテーブルに現画面に関するレコードの追加 (書出し) を行う (Append)。 int 追加処理( FormBase fB ) { TextDBMS.TranStart(); // // Hd, Tl の情報を書き出す。 FromHdTlToDB(fB); メインレコード.InsertRecord(); // int 明細行インデックス = 0; while (明細行インデックス < fB.LastDe) { // 各明細行の情報を書き出す。 FromBdToDB(fB, 明細行インデックス); 明細レコード.InsertRecord(); 明細行インデックス = 明細行インデックス + 1; } // TextDBMS.TranCommit(); // fB.StatusOut("伝票を発行しました。(伝票番号 " + Strings.Format(画面データキー, 画面キー項目フォーマット) + ")", Color.blue); // // 追加モードのまま、次のデータエントリを受け付ける。 return FormBase.APPEND_Append; } // 追加処理