フック一覧 RelCheckLC (画面フック) | 前の画面フック 次の画面フック |
VB C# ALL プログラミング言語によるフィルタ (ここで選んだ言語で選別された説明や図だけが表示されます)
◇ 役割 (この項目群フックメソッドに委託されている処理)
指定された複数の項目の相互関係について、その整合性をチェックする。
◇ 配置 (ツーピーススタイルの場合にこの画面フックメソッドをどこに配置できるか)
ローカルピースおよびセントラルピースの双方に同一のものを配置する、またはどちらにも配置しない。一方だけに配置することは禁止されている。
◇ 代表的な書き方 (詳しい構文はフックメソッドの書き方を参照)
VB での書き方:
Friend Function 項目群名_RelCheckLC(パラメタ宣言列) As Integer
または
Friend Function 画面略称_項目群名_RelCheckLC(パラメタ宣言列) As Integer
C# での書き方:
internal int 項目群名_RelCheckLC(パラメタ宣言列)
または
internal int 画面略称_項目群名_RelCheckLC(パラメタ宣言列)
Java での書き方:
int 項目群名_RelCheckLC(パラメタ宣言列)
または
int 画面略称_項目群名_RelCheckLC(パラメタ宣言列)
なお、フック名としては、RelCheckLC の他に関係チェック双方を用いることができる。
◇ 呼び出される契機 (以下が切っ掛けとなりこのフックメソッドが呼び出される)
項目群の整合性チェックを行うことが必要になったとき。
すなわち、手入力によって、指定された項目群に含まれる項目のいずれかの値の変更が確定したとき。
◇ 戻り値の意味とデフォルト動作 (戻り値による FormBase への伝言)
FormBase.RELCHECK_OK (= 0): 項目群の関係の整合性チェックが OK である。
n (1 以上の整数): エラーコード n のエラーの検出がなされた。なお、Check 系フックメソッドのエラーと区別するために、RelCheck 系フックメソッドで検出したエラーは、10000 以上の値にすることをお勧めする。
(このエラーコード n は、ErrorMsg フックメソッドの Cd_Error パラメタの値になる)
デフォルト動作: RelCheckLC 画面フックメソッドが組み込まれていない場合の動作は、FormBase.RELCHECK_OK が設定された場合と同様である。
◇ 代行メッセージ (処理の流れに応じて発せられるメッセージ; カスタマイズ可能)
メッセージコード: "RELCHECK"
"この項目より先にデータエラーの項目を修正してください。"
◇ 使用上のヒントと注意事項
複数の項目の関係チェックを行う際にセントラル側の特定の資源 (データベースの参照など) が必要な場合には、項目群フックメソッド RelCheck を用いるのがよい。セントラル側およびローカル側の特定の資源を必要としない場合には (あるいは双方に同じ資源がある場合には)、この項目群フックメソッドを用いるのがよい。
整合性のチェックをしたい一群の項目を RelCheckLC フックメソッドのパラメタとして指定してください。ここでは、パラメタとして指定した項目の一群を項目群と呼ぶ。
RelCheckLC フックメソッドの名前の一部を構成する項目群名 は、項目群を識別するための名前であり、画面略称や項目略称と重ならないように適当に命名してください。
項目群として指定する項目の一群は、一つの同じフォームに含まれていることが必要である。
複数の MANDALA フォームからなるプロジェクトにおいては、フックメソッド名として 画面略称_ から始まる形式にするのがお勧めである。画面略称による修飾をせずに 項目群名_ から始まるフックメソッド名を用いると、機械生成の際に、パラメタの指定が誤っているというエラーメッセージが表示されることがある。このエラーメッセージが表示される理由は、それぞれの MANDALA フォームの中に、この RelCheckLC フックメソッドで指定した項目群があるかどうかをチェックしているためである。
項目に値を設定する方法には、キーボードやマウスで直接インプットする方法 (手入力) と他の項目へのインプットを契機とする Derived フックメソッドで値を設定する方法 (派生設定) の 2 種類がある。RelCheckLC フックメソッドが呼び出されるのは、手入力による場合であって、派生設定の場合には呼び出されないことに注意が必要である。すなわち、この項目群の中の項目の値が派生設定されるときには、Derived 系フックメソッドの中で、ここで行う関係チェックに矛盾しないような設定がなされるはずであるから、RelCheckLC フックメソッドは呼び出されないようになっている。
◇ 関連事項
他の項目の値とは無関係に、一つの項目の値だけを取り上げてチェックする項目フックメソッドに Check および CheckLC がある。
Check 系の項目フックメソッドの戻り値が 0 の場合 (または Check 系の項目フックメソッドが組み込まれていない場合)、まず関連をもつ項目フックメソッド Derived または DerivedLC が呼び出され、さらにこの後に関係をもつ項目群フックメソッド RelCheck または RelCheckLC (本フックメソッド) が呼び出される。
このフックメソッドの戻り値が 1 以上の場合、その値は画面フックメソッド ErrorMsg に伝えられる。
このフックメソッドの後には、戻り値にかかわらず、ローカル側で項目フックメソッド Response が呼び出される。
◇ 使用例
' 資格、職種、役職に関する関係チェックを行う。 Friend Function SiSyoYa_RelCheckLC(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_RelCheckLC
// 資格、職種、役職に関する関係チェックを行う。 internal int SiSyoYa_RelCheckLC( 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_RelCheckLC
// 資格、職種、役職に関する関係チェックを行う。 int SiSyoYa_RelCheckLC( String 資格, String 職種, String 役職 ) { if (資格 == "" || 職種 == "" || 役職 == "") { 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_RelCheckLC