トリガーが呼び出されるタイミング
OPEN/CLOSE前
OPEN/CLOSE前のトリガーは、ファイル(またはそのビュー)を開く/閉じる直前に呼び出されます。
OPEN前のトリガーは、別のビューによって開かれていないファイルまたはビューを開くときに呼び出されます。
すなわち、ロジックが「ビュー1を開く」、「ビュー2を開く」の順に定義されている場合(ビュー1およびビュー2はどちらも同じファイルに基づく)、トリガーは、ビュー1を開くときに呼び出されますが、ビュー2を開くときには呼び出されません。
CLOSE前のトリガーは、別のビューによって開かれていないファイルまたはビューを閉じるときに呼び出されます。
すなわち、ロジックが「ビュー1を閉じる」、「ビュー2を閉じる」の順に定義されている場合(ビュー1およびビュー2はどちらも同じファイルに基づく)、トリガーは、ビュー2を閉じるときに呼び出されますが、ビュー1を閉じるときには呼び出されません。
OPEN/CLOSE後
「前」オプションと同様ですが、ファイルを閉じる試行に成功した直後に呼び出されます。
READ前
ファイルからのレコードの読み取りを試行する直前に呼び出されます。入力前のトリガーは、ファイルの「情報」にアクセスできないため(情報がまだ入力されていない)、このトリガーは慎重に使用してください。このモードでは、ファイルへのアクセスに使用されるキーにアクセスできないため、このような操作を前提としたトリガーを設計しないでください。
READ後
レコードがファイルから正常に読み取られた後、レコードの詳細が呼び出し元ファンクションに渡される直前に呼び出されます。仮想フィールド・ロジックは、この段階までに完了しています。
INSERT前
ファイルへの新規レコードの挿入を試行する直前に呼び出されます。以下の点に注意してください。
· 要求元がCHECK_ONLY(*YES)を指定した場合でも、トリガーは実行されます。
· トリガーが実行されても、挿入に失敗することがあります(重複キー・エラーなど)。INSERT前のトリガーによってデータベースを変更しないでください。データベースを変更する場合は、トリガーを「INSERT後」の位置に移動してください。
· トリガーの呼び出し時には、すべての仮想ロジックが完了しています。
INSERT後
ファイルへの新規レコードの挿入直後に呼び出されます。以下の点に注意してください。
· 要求元がCHECK_ONLY(*YES)を指定した場合、トリガーは実行されません。
· 呼び出し時には、すべてのバッチ制御ロジックが実行されています。
· AUTOCOMMITが指定されている場合、トリガーの呼び出し前にコミットが実行されます。
UPDATE前
ファイル内の既存レコードの更新を試行する直前に呼び出されます。以下の点に注意してください。
· 要求元がCHECK_ONLY(*YES)を指定した場合でも、トリガーは実行されます。
· トリガーが実行されても、更新に失敗することがあります(重複キー・エラーなど)。UPDATE前のトリガーによってデータベースを変更しないでください。データベースを変更する場合は、トリガーを「UPDATE後」の位置に移動してください。
· トリガーの呼び出し時には、すべての仮想ロジックが完了しています。
UPDATE後
ファイル内の既存レコードの更新直後に呼び出されます。以下の点に注意してください。
· 要求元がCHECK_ONLY(*YES)を指定した場合、トリガーは実行されません。
· 呼び出し時には、すべてのバッチ制御ロジックが実行されています。
· AUTOCOMMITが指定されている場合、トリガーの呼び出し前にコミットが実行されます。
DELETE前
ファイル内の既存レコードの削除を試行する直前に呼び出されます。以下の点に注意してください。
· 要求元がCHECK_ONLY(*YES)を指定した場合でも、トリガーは実行されます。
· (非常に稀ですが)トリガーが実行されても、削除に失敗することがあります。DELETE前のトリガーによってデータベースを変更しないでください。データベースを変更する場合は、トリガーを「DELETE後」の位置に移動してください。
DELETE後
ファイル内の既存レコードの削除直後に呼び出されます。以下の点に注意してください。
· 要求元がCHECK_ONLY(*YES)を指定した場合、トリガーは実行されません。
· 呼び出し時には、すべてのバッチ制御ロジックが実行されています。
· AUTOCOMMITが指定されている場合、トリガーの呼び出し前にコミットが実行されます。