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

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

Delete (削除処理) 画面フックメソッド

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

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

カレント画面データに対応するレコード (群) の全部または一部を、ファイルまたはデータベースから削除する。あるいは削除フラグを付ける。なお、これに先立って、ここで削除処理を行える状況になっているかどうかのチェック (削除処理の可否チェック) も必要に応じて行うことができる。

 

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

そして、画面フックメソッド SelectFh または SelectExec などがカレント画面データを選択して、適当な変数 (上図の空色の矢印) がそれを指し示すように設定してある。さらに、Current などがカレント画面データを読み集めて画面に表示してあるので、削除対象の画面データが一目瞭然になっている。

 

役割を果たした後の動作: この画面フックメソッドの戻り値は、FormBase への伝言になっており、削除処理の可否、またはここで削除処理を行った後の動作モードを指定する。たとえば、上図の太線のルートのように、削除処理を行った後に引き続き更新モードを継続せよと伝言すると、FormBase は、画面を初期化して、さらに画面フックメソッド NextFh を呼び出して次の画面データを画面に表示して、アプリ操作者からの指示を待つことになる。

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

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

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

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

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

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

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

なお、フック名としては、Delete の他に削除処理を用いることができる。

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

この画面アプリが更新モードの際に、アプリ操作者から削除の指示 (DeleteCm 指示) がなされたとき。

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

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

FormBase.DELETE_Nop (= 0): 動作モードの変更を行わずに、カレント画面データをそのまま表示せよ。FormBase は、この伝言を受けると、アプリ操作者からなされた DeleteCm 指示を無視して、指示がなされなかったかのように振る舞う。つまり、アプリ操作者からなされた DeleteCm 指示は無効になる。

FormBase.DELETE_Select (= 1): 画面データを削除済であり、選択モードに移行せよ。したがって SelectFh フックメソッドがあれば、それが呼び出される。

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

FormBase.DELETE_Indicate (= 3): 画面データを削除済であり、表示モードに移行して、カレント画面データを表示せよ。

FormBase.DELETE_Update (= 4): 画面データを削除済であり、更新モードのまま、カレント画面データを表示せよ。

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

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

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

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

"伝票を削除します。"

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

このフックメソッドの中で、レコード (群) をファイルまたはデータベースから削除しないことにした場合は、適当なメッセージをアプリ操作者に向けて発してから、戻り値を FormBase.DELETE_Nop にしてください。

なお、アプリ操作者は、何のメッセージも示されないと、自分の指示どおりにレコード (群) が削除されるものと期待する。このフックメソッドの本来の役割は、この期待に応えて削除処理をすることである。

ボディ部または拡張ボディ部をもつ画面においては、単にファイルまたはデータベースに一つのレコードを削除するだけでよいとは限らない。画面の中のすべてのデータ (すべての明細) に対応するレコード群の削除処理を行うことが必要である。このために、通常は複数のレコードの削除処理が必要である。

関連事項

ファイルまたはデータベースの内容を変更する役割の画面フックメソッドには、 この他に Append, Update がある。

使用例

' 受注トランザクションテーブルから現画面に関するレコードを削除する (Delete)。
Friend Function 削除処理(ByVal fB As FormBase) As Integer
    TextDBMS.TranStart()
    ' 
    Dim 明細個数 As Integer = Integer.Parse(JutyuTable.明細数)
    Dim 明細行インデックス As Integer = 0
    While 明細行インデックス < 明細個数
        明細レコード.DeleteRecord(画面データキー + TextDBMS.AlignRight((明細行インデックス + 1).ToString(), 3))
        明細行インデックス += 1
    End While
    ' 
    メインレコード.DeleteRecord(画面データキー)
    ' 
    TextDBMS.TranCommit()
    ' 
    fB.StatusOut("伝票を削除しました。(伝票番号 " + VB.Strings.Format(画面データキー, 画面キー項目フォーマット) + ")", System.Drawing.Color.Black)
    ' 
    Return FormBase.DELETE_AppType ' 1: 選択モード。 2: 次をオマカセ。 3: 次を表示。 4: 次を更新。 その他: 追加モードへ。
End Function ' 削除処理
// 受注トランザクションテーブルから現画面に関するレコードを削除する (Delete)。
internal int 削除処理( FormBase fB ) {
    TextDBMS.TranStart();
    // 
    int 明細個数 = int.Parse(受注レコード.明細数);
    int 明細行インデックス = 0;
    while (明細行インデックス < 明細個数) {
        明細レコード.DeleteRecord(画面データキー + TextDBMS.AlignRight((明細行インデックス + 1).ToString(), 3));
        明細行インデックス += 1;
    }
    // 
    メインレコード.DeleteRecord(画面データキー);
    // 
    TextDBMS.TranCommit();
    // 
    fB.StatusOut("伝票を削除しました。(伝票番号 " + Strings.Format(画面データキー, 画面キー項目フォーマット) + ")", System.Drawing.Color.Black);
    // 
    return FormBase.DELETE_AppType; //1: 選択モード。 2: 次をオマカセ。 3: 次を表示。 4: 次を更新。 その他: 追加モードへ。
} // 削除処理
// 受注トランザクションテーブルから現画面に関するレコードを削除する (Delete)。
int 削除処理( FormBase fB ) {
    TextDBMS.TranStart();
    // 
    int 明細個数 = Integer.parseInt(受注レコード.明細数);
    int 明細行インデックス = 0;
    while (明細行インデックス < 明細個数) {
        明細レコード.DeleteRecord(画面データキー
                + TextDBMS.AlignRight(
                                      String.valueOf(明細行インデックス + 1),
                                      3));
        明細行インデックス += 1;
    }
    // 
    メインレコード.DeleteRecord(画面データキー);
    // 
    TextDBMS.TranCommit();
    // 
    fB.StatusOut("伝票を削除しました。(伝票番号 "
            + Strings.Format(画面データキー, 画面キー項目フォーマット) + ")",
                 ColorSpec.Black);
    // 
    return FormBase.DELETE_AppType; // 1: 選択モード。 2: 次をオマカセ。 3: 次を表示。 4:
    // 次を更新。 その他: 追加モードへ。
} // 削除処理