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

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

RelCheck (関係チェック) 項目群フックメソッド
− 広義の画面フックメソッド −

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

指定された複数の項目の相互関係について、その整合性をチェックする。

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

セントラルピースに配置するか、または配置しない。ローカルピースに配置することは禁止されている。

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

VB での書き方:
 Friend Function 項目群名_RelCheck(パラメタ宣言列) As Integer
 または
 Friend Function 画面略称_項目群名_RelCheck(パラメタ宣言列) As Integer

C# での書き方:
 internal int 項目群名_RelCheck(パラメタ宣言列)
 または
 internal int 画面略称_項目群名_RelCheck(パラメタ宣言列)

Java での書き方:
 int 項目群名_RelCheck(パラメタ宣言列)
 または
 int 画面略称_項目群名_RelCheck(パラメタ宣言列)

なお、フック名としては、RelCheck の他に関係チェックを用いることができる。

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

項目群の整合性チェックを行うことが必要になったとき。

すなわち、手入力によって、指定された項目群に含まれる項目のいずれかの値の変更が確定したとき。

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

FormBase.RELCHECK_OK (= 0): 項目群の関係の整合性チェックが OK である。

n (1 以上の整数) または FormBase.RELCHECK_NG (= 1): エラーコード n のエラーの検出がなされた。なお、Check 系フックメソッドのエラーと区別するために、RelCheck 系フックメソッドで検出したエラーは、10000 以上の値にすることをお勧めする。

(このエラーコード n は、ErrorMsg フックメソッドの Cd_Error パラメタの値になる)

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

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

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

"この項目より先にデータエラーの項目を修正してください。"

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

複数の項目の関係チェックを行う際にセントラル側の特定の資源 (データベースの参照など) が必要な場合には、この項目群フックメソッドを用いるのがよい。セントラル側およびローカル側の特定の資源を必要としない場合には (あるいは双方に同じ資源がある場合には)、項目群フックメソッド RelCheckLC を用いるのがよい。

整合性のチェックをしたい一群の項目を RelCheck フックメソッドのパラメタとして指定してください。ここでは、パラメタとして指定した項目の一群を項目群と呼ぶ。

RelCheck フックメソッドの名前の一部を構成する項目群名 は、項目群を識別するための名前であり、画面略称や項目略称と重ならないように適当に命名してください。

項目群として指定する項目の一群は、一つの同じフォームに含まれていることが必要である。

複数の MANDALA フォームからなるプロジェクトにおいては、フックメソッド名として 画面略称_ から始まる形式にするのがお勧めである。画面略称による修飾をせずに 項目群名_ から始まるフックメソッド名を用いると、機械生成の際に、パラメタの指定が誤っているというエラーメッセージが表示されることがある。このエラーメッセージが表示される理由は、それぞれの MANDALA フォームの中に、この RelCheck フックメソッドで指定した項目群があるかどうかをチェックしているためである。

項目に値を設定する方法には、キーボードやマウスで直接インプットする方法 (手入力) と他の項目へのインプットを契機とする Derived フックメソッドで値を設定する方法 (派生設定) の 2 種類がある。RelCheck フックメソッドが呼び出されるのは、手入力による場合であって、派生設定の場合には呼び出されないことに注意が必要である。すなわち、この項目群の中の項目の値が派生設定されるときには、Derived 系フックメソッドの中で、ここで行う関係チェックに矛盾しないような設定がなされるはずであるから、RelCheck フックメソッドは呼び出されないようになっている。

関連事項

他の項目の値とは無関係に、一つの項目の値だけを取り上げてチェックする項目フックメソッドに Check および CheckLC がある。

Check 系の項目フックメソッドの戻り値が 0 の場合 (または Check 系の項目フックメソッドが組み込まれていない場合)、まず関連をもつ項目フックメソッド Derived または DerivedLC が呼び出され、さらにこの後に関係をもつ項目群フックメソッド RelCheck (本フックメソッド) または RelCheckLC が呼び出される。

このフックメソッドの戻り値が 1 以上の場合、その値は画面フックメソッド ErrorMsg に伝えられる。

このフックメソッドの後には、戻り値にかかわらず、ローカル側で項目フックメソッド Response が呼び出される。

使用例

' 資格、職種、役職に関する関係チェックを行う。
Friend Function SiSyoYa_RelCheck(ByVal 資格 As String, ByVal 職種 As String, ByVal 役職 As String) As Integer
    If 資格 = String.Empty OrElse 職種 = String.Empty OrElse 役職 = String.Empty Then
        Return FormBase.RELCHECK_OK
    Else
        If 資格 <= "19" Then
            If 職種 >= "10" AndAlso 職種 <= "19" Then
                If 役職 >= "100" AndAlso 役職 <= "199" Then Return FormBase.RELCHECK_OK
            End If
        ElseIf 資格 <= "29" Then
            If 職種 >= "20" AndAlso 職種 <= "29" Then
                If 役職 >= "300" AndAlso 役職 <= "399" Then Return FormBase.RELCHECK_OK
            End If
        ElseIf 資格 <= "39" Then
            If 職種 >= "30" AndAlso 職種 <= "39" Then
                If 役職 >= "400" AndAlso 役職 <= "499" Then Return FormBase.RELCHECK_OK
            End If
        Else
            If 職種 >= "40" AndAlso 職種 <= "49" Then
                If 役職 >= "600" AndAlso 役職 <= "699" Then Return FormBase.RELCHECK_OK
            End If
        End If
        Return 900 ' 関係チェックエラー
    End If
End Function ' SiSyoYa_RelCheck
// 資格、職種、役職に関する関係チェックを行う。
internal int SiSyoYa_RelCheck( string 資格, string 職種, string 役職 ) {
    if (資格 == string.Empty || 職種 == string.Empty || 役職 == string.Empty) {
        return FormBase.RELCHECK_OK;
    }
    else {
        if (資格.CompareTo("19") <= 0) {
            if (職種.CompareTo("10") >= 0 && 職種.CompareTo("19") <= 0) {
                if (役職.CompareTo("100") >= 0 && 役職.CompareTo("199") <= 0)
                    return FormBase.RELCHECK_OK;
            }
        }
        else if (資格.CompareTo("29") <= 0) {
            if (職種.CompareTo("20") >= 0 && 職種.CompareTo("29") <= 0) {
                if (役職.CompareTo("300") >= 0 && 役職.CompareTo("399") <= 0)
                    return FormBase.RELCHECK_OK;
            }
        }
        else if (資格.CompareTo("39") <= 0) {
            if (職種.CompareTo("30") >= 0 && 職種.CompareTo("39") <= 0) {
                if (役職.CompareTo("400") >= 0 && 役職.CompareTo("499") <= 0)
                    return FormBase.RELCHECK_OK;
            }
        }
        else {
            if (職種.CompareTo("40") >= 0 && 職種.CompareTo("49") <= 0) {
                if (役職.CompareTo("600") >= 0 && 役職.CompareTo("699") <= 0)
                    return FormBase.RELCHECK_OK;
            }
        }
        return 900; // 関係チェックエラー
    }
} // SiSyoYa_RelCheck
// 資格、職種、役職に関する関係チェックを行う。
int SiSyoYa_RelCheck( String 資格, String 職種, String 役職 ) {
    if (資格.length() == 0 || 職種.length() == 0 || 役職.length() == 0) {
        return FormBase.RELCHECK_OK;
    } else {
        if (資格.compareTo("19") <= 0) {
            if (職種.compareTo("10") >= 0 && 職種.compareTo("19") <= 0) {
                if (役職.compareTo("100") >= 0
                        && 役職.compareTo("199") <= 0)
                    return FormBase.RELCHECK_OK;
            }
        } else if (資格.compareTo("29") <= 0) {
            if (職種.compareTo("20") >= 0 && 職種.compareTo("29") <= 0) {
                if (役職.compareTo("300") >= 0
                        && 役職.compareTo("399") <= 0)
                    return FormBase.RELCHECK_OK;
            }
        } else if (資格.compareTo("39") <= 0) {
            if (職種.compareTo("30") >= 0 && 職種.compareTo("39") <= 0) {
                if (役職.compareTo("400") >= 0
                        && 役職.compareTo("499") <= 0)
                    return FormBase.RELCHECK_OK;
            }
        } else {
            if (職種.compareTo("40") >= 0 && 職種.compareTo("49") <= 0) {
                if (役職.compareTo("600") >= 0
                        && 役職.compareTo("699") <= 0)
                    return FormBase.RELCHECK_OK;
            }
        }
        return 900; // 関係チェックエラー
    }
} // SiSyoYa_RelCheck