IsValid イベントは、Web フォーム内のフィールドの検証またはフォーム内のフィールドからフォーカスを外した後にアクションをトリガーするのに役立ちます。
- 編集コントロールでは、フィールドを離れると IsValid イベントがトリガーされます。チェックボックス、リストボックス、コンボ、およびラジオボタンでは、コントロール内で値が選択されるとこのイベントがトリガーされます。
- Web フォームの検証では、フィールド内の変更のみが検知されます。つまりフィールドの値が変更されていない場合は、isvalid イベントはトリガーされません (初回時を除く)。これは、Web トランザクションにおけるクライアント側の検証における動作と同じです。
- IsValid イベント内のメッセージは、ErrorViewer コントロールで表示されます。
IsValid 検証は、フォーカスが "先に" 進む場合にのみ実行されます。Shift-Tab を使用するか、または手動で現在選択されているコントロールよりも前にある別のコントロールをクリックした場合、IsValid イベントはトリガーされません。
1.Isvalid イベントが Web トランザクションにおける項目属性に関連付けられている場合は、入力されたフィールドが有効な場合にイベントがトリガーされます。この場合、GeneXus のルール、参照整合性などは、IsValid イベントの前にトリガーされます。
たとえば、TeacherId は Course のトランザクションにおける外部キーです。TeacherId が入力されると、参照整合性のチェック結果が正しい場合は、その後、IsValid イベントがトリガーされます。
Event teacherId.IsValid
&window.Height = 100
&window.Width = 200
&window.Object = TeacherView.Create(TeacherId)
&window.Open()
EndEvent
2.フォーム内に &a、&b、&c がある場合、ユーザーが &a にあるカーソルをマウスで &c フィールドに移動させるとどうなるでしょうか。
この場合、初回は &a.isvalid および &b.isvalid イベントがトリガーされます。次回以降、&a が明確に変化した場合、&a.isvalid のみトリガーされます。
3.フォーム内に &a、&b、&c がある場合に、ユーザーが &c にあるカーソルをマウスで &a フィールドに移動させるとどうなるでしょうか。
この場合はイベントはトリガーされません (逆順に移動する場合はトリガーされません)。
1.フォーム内に &CollegeId 変数があるとします。フィールドに値を入力した後、大学の情報を示す Web コンポーネントを作成するとします。
Event &CollegeId.IsValid
webComp1.Object = CollegeInfo.Create(&CollegeId)
EndEvent
IsValid イベントは、ほかのイベントと同様に以下を考慮してトリガーされます。
- イベント内のコードがクライアント側で完全に評価可能である場合、クライアント側で実行されます。開始、Refresh、Load イベントはトリガーされません。
- イベント内のコードがデータベースサーバー側で評価される必要がある場合、Web サーバー側で実行されます。開始、Refresh、Load イベントは通常どおりの順序でトリガーされます。
どちらの場合でも、イベントのトリガーは AJAX を使用して解決します。
詳細はこちらを参照してください。
ほとんどの場合、フィールドの検証に IsValid イベントが使用されており、次の例のとおり setfocus メソッドと組み合わされます:
Event &StudentId.IsValid
If &StudentId.IsEmpty()
Msg('StudentId mandatory field')
&StudentId.SetFocus()
EndIf
EndEvent
Web アプリケーションにおける動作は、Win アプリケーションにおける動作とは異なります。Win アプリケーションでは、0 以外の &StudentId が入力されるまでフィールドを出ることはできません。
Web アプリケーションでは次のとおりです:
1.ユーザーが [ &StudentId ] フィールドに 0 を入力すると、条件 (if &StudentId.IsEmpty()) が TRUE の評価となり、その後、メッセージが表示されます。フォーカスは [ &StuentId ] フィールドに設定されます。
2.ユーザーがフィールドを出ようとする (ここでは値を変更せず、フィールドは空のまま) と、フォーカスもフィールドから外れます。これは、フィールド内の変更のみが Web フォームの検証で検知されるためです。
このため、通常、setfocus コマンドは IsValid の Web イベントで使用できません。
|