トリガー・ファンクションの作成

LANSA

トリガー・ファンクションの作成


ファンクションをトリガー・ファンクションとして定義するには、FUNCTIONコマンドでTRIGGERパラメータを使用します。

ファンクションをデータ・ディクショナリ・レベルのトリガーとして動作させる場合は、このパラメータの最初の部分に*FIELDと入力し、2番目の部分に、関連付けるデータ・ディクショナリ・フィールド名を入力します。

ファンクションをデータベース・レベルのトリガーとして動作させる場合は、パラメータの最初の部分に*FILEと入力し、2番目の部分に、関連付けるデータベース・ファイル名を入力します。指定するファイルは物理ファイルでなければなりません。

新しいトリガー・ファンクションを容易に定義できるよう、LANSAには、トリガー・ファンクションの土台として使用できる以下のアプリケーション・テンプレートが付属しています。

BBFLDTRIG

フィールド・レベルのトリガー・ファンクション

BBFILTRIG

ファイル・レベルのトリガー・ファンクション

 

ファンクションをトリガー・ファンクションとして定義するときは、以下のガイドラインに従う必要があります

·         パラメータRCV_LIST(#TRIG_LIST)を使用してください。

·         パラメータRCV_DSは使用しないでください。

·         オプション*DIRECTも使用してください。

·         オプションxxx_SYSTEM_VARIABLEまたはxxx_FIELD_VALIDATEは使用しないでください。

·         リスト#TRIG_LISTは、DEF_LISTコマンドでDEF_LIST NAME(#TRIG_LIST) TYPE(*WORKING) ENTRYS(2)として定義されていなければなりません。また、このリストには、FIELDSパラメータのフィールドを含めないでください。必要なフィールドは自動的に追加されます。

·         DISPLAY、REQUEST、またはPOP_UPコマンドは使用できません。これは、意図的に適用されている設計/使用上の制約で、将来的なバージョンで排除される可能性があります。

·         別のプロセス/ファンクションに対する呼び出し(CALL)が存在してはなりません。これは、意図的に適用されている設計/使用上の制約で、将来的なバージョンで排除される可能性があります。

·         アクション・バー・プロセス内でトリガー・ファンクションを定義することはできません。これは、アクション・バー内からトリガー・ファンクションを参照できないということではなく、アクション・バー・タイプのプロセスの一部としてトリガー・ファンクションを定義できないということです。

·         関連付けられたプロセスではパラメータを使用できません。

·         交換リストは使えません。これは、トリガー・ファンクションの設計および使用における独立性とモジュール性を確保するために意図的に適用されている設計/使用上の制約です。

ファンクションをトリガー・ファンクションとして定義する場合、多くの状況で以下のガイドラインに従う必要があります。

·         「フィールドの妥当性検査/トリガー」および「トリガー・ファンクション」を参照して、トリガーの定義方法および使用方法を理解してください。

·         オプション*NOMESSAGESおよび*MLOPTIMIZEを使用してください。

·         オプション*HEAVYUSAGEおよび*DBOPTIMIZEの使用を検討することもできます。

·         直接または間接を問わず、トリガーが関連付けられているデータベース・ファイル、または今後関連付けられるデータベース・ファイルにアクセスしないでください。

·         トリガーが頻繁かつ継続的に呼び出される場合は、リソースを大量に消費する操作は避けてください。このような操作を実行すると、関連付けられたファイルへのアクセス速度が低下します。無理のない範囲で、トリガーによって別のトランザクションを「送信」して、イベントのソースが大幅に遅れないようにしてください。

·         再帰的なファンクション呼び出しを記述することは可能ですが、実行の段階で失敗します。例えば、ファイルAへの挿入中に呼び出されたフィールド・トリガー・ファンクションがファイルBにデータを挿入しようとすると、それ自体が再帰的に呼び出される状況に陥り、失敗する可能性があります。

Ýトリガー・ファンクション