Magicエンジンが[イベント]ロジックユニットとして定義されている一連の処理コマンドを実行する前に、終了するレベルを指定します。
N=なし
どのレベルに対しても終了処理を行わず、イベントが発生したコントロールの編集モード内でロジックユニットの処理を実行します。
E=編集
イベントは、タスクに対しイベント処理を行うロジックユニットを実行する前に現在のコントロールの編集モードを抜けるように指示します。これは、イベントのロジックユニットが実行される際に、コントロールの入力内容値によって対応する項目が更新されることを意味します。全てのイベントのロジックユニットが実行された後と、タスクは編集モードに戻ります。
このイベントを処理する場合、Magicエンジンは以下の順番に処理を実行します。
編集モードを終了します。
編集項目の内容を更新します。
更新された項目に関係する全ての値を再計算します。
データが変更されたら[項目変更]ロジックユニットを実行します。
[イベント]ロジックユニットを実行します。
コントロールの編集モードに戻ります。
実行されたロジックユニット内でコントロール項目を参照する場合、その項目は編集された値として参照されます。
[強制終了]におけるこのレベルは、現在のコントロールに新しく入力された値を参照する必要があるイベントを処理する場合に有効です。たとえば、特定のコントロールに対する[ズーム]イベントを処理したい場合で、ズームのロジックユニットから呼び出されたタスク内で新しく入力された値を参照したい場合、[ズーム]イベントをトリガとするユーザ定義イベントを作成して[強制終了]特性を「編集」に設定してください。
このオプションはエディット、リッチエディット、および複数選択の[リストボックス]コントロールで有効で、編集状態の時に項目の内容と異なる値の場合に更新されます。
注意: |
[強制終了]特性が「なし」に設定され、イベントを処理するロジックユニットで現在の項目を更新する場合、更新される値はコントロールからタブ移動した場合のみ表示されます。これは、コントロールが最後に編集した値によって編集モードを維持しているからです。しかし、[強制終了]が「編集」に設定されると、エンジンが編集モードを一旦抜けて、再度入るのため、新しい編集モードは新しく更新された値を表示します。 |
C=コントロール
イベントは、タスクに対しイベント処理を行うロジックユニットを実行する前に現在のコントロールを抜けるように指示します。
このイベントを処理する場合、Magicエンジンは以下の順番に処理を実行します。
編集モードを終了します。
編集項目の内容を更新します。
更新された項目に関係する全ての値を再計算します。
[項目変更]ロジックユニットを実行します。
[コントロール検証]と[コントロール後]のロジックユニットを実行します。
[イベント]ロジックユニットを実行します。
[コントロール前]ロジックユニットを実行します。
コントロールの編集モードに戻ります。
一旦イベント処理が完了すると、タスクは同じコントロールに戻ります。これは、Magicエンジンが現在のコントロールに対する全てのコントロールレベルのロジックユニットを実行することを意味しています。すなわち、コントロールを抜けるため[コントロール検証]、[コントロール後]を実行し、再入力するため[コントロール前]を実行します。
R=レコード更新前
イベントは、タスクにイベントを処理するために対応するロジックユニットを処理する前に現在のレコードを抜けるように指示します。ユーザイベントはイベント処理を終了して、動作中のトランザクションでレコードを更新します。一旦この手続きが完了すると、タスクは同じレコードに戻り[レコード前]を実行します。
言い換えると、データベースを更新する直前に[レコード後]が実行されます。一旦処理が終了すると、レコードはデータベースで更新されます。
このイベントを処理する場合、Magicエンジンは以下の順番に処理を実行します。
編集モードを終了します。
編集項目の内容を更新します。
更新された項目に関係する全ての値を再計算します。
[項目変更]ロジックユニットを実行します。
[コントロール検証]及び[コントロール後]のロジックユニットを実行します。
レコードが変更された場合、[レコード後]ロジックユニットを実行します。
[イベント]ロジックユニットを実行します。
レコードが更新された場合、テーブルを更新します。
[レコード前]ロジックユニットを実行します。
[コントロール前]ロジックユニットを実行します。
コントロールの編集モードに戻ります。
イベントレベルが実行された場合、レコードはまだ更新されていないため、イベントレベルからレコードを参照してもレコードがまだ更新されていないものと見なされます。
イベント処理が終了された直後にレコードが現在のトランザクションで更新させたい場合は、[強制終了]特性を「レコード更新前」に設定してください。
注意: |
[強制終了]特性が「レコード更新前」に設定されると、エンジンがレコードを抜けて、トランザクション内でレコードを更新するとき、実行するロジックユニットで実行されるいかなる[項目更新]処理コマンドも実行されます。 |
P=レコード更新後
イベントはタスクが終了するように指示します。そして、イベントを処理するために対応するロジックユニットを実行する前に、現在のレコードを更新します。このオプションは、「レコード更新前」と似ています。しかし、「レコード更新後 」の場合は、エンジンは最初にデータベース内のレコードを更新して、更新されたレコードに再度入り、その[レコード前]ロジックユニットを実行します。このため、トリガとなるイベントのロジックユニットのみ実行します。
このようなイベントを処理する場合、以下の処理を実行します。
編集モードを終了します。
項目を更新します。
更新された項目をもとに再計算処理が実行されます。
[項目変更]ロジックユニットを実行します。
[コントロール検証]及び[コントロール後]のロジックユニットを実行します。
レコードが修正されていた場合、[レコード後]ロジックユニットを実行します。
レコードが修正されていた場合、レコードを更新します。
[レコード前]ロジックユニットを実行します。
[イベント]ロジックユニットを実行します。+
[コントロール前]ロジックユニットを実行します。
イベントレベルが実行された場合、レコードはすでに更新されているので、イベントレベルからレコードを参照すると、更新された内容として参照できます。
[イベント]ロジックユニットが現在のレコードを参照する他のタスクを呼び出すように設定されていて、レコードはそのタスクが呼び出される前にデータベース内で修正される必要がある場合、[強制終了]特性を「レコード更新後」に設定されたイベントが利用できます。この方法は、呼び出されたタスクが新しく更新されたレコードを取得します。
注意: |
イベントの[強制終了]特性を「レコード更新後」に設定した場合、現在のレコード上で実行されるロジックユニットを通して行われる、いかなる[項目更新]処理コマンドもレコードが更新された後で実行され、ユーザによって暗黙的か明示的のどちらかによってにエンジンがレコードを再度抜けた後でのみデータベースに反映されます。 メインプログラムでは、対応するロジックユニット検索する時にMagic xpaが(プログラムではなく)ユーザイベントの公開名を使用するため、ユーザイベントに公開名を定義しておく必要があります。 |