7.63.1 FUNCTION のパラメータ
OPTIONS |
|---|
最大9個のオプションを指定できます。このパラメータで指定できる値は以下のとおりです。
*NOMESSAGES
プログラムに対し、呼び出し元からのメッセージの経路付けや呼び出し元への経路付けが要求されません(失敗しない場合)。このオプションを指定すると、コンパイル済みRDMLファンクションで使用される開始時および終了時のリソースを低減することができます。
このオプションを指定した場合、保留中の開発者メッセージは検査されません。これにより、開発者サービスが実行されている実稼動環境において頻繁に使用/呼び出されるファンクションのパフォーマンスを高めることができます。
*DEFERWRITE
移植性に関する考慮事項 | Visual LANSAコードで使用した場合は無視され、アプリケーションには何の効果もありません。 |
このプログラム内でDISPLAY、REQUEST、またはPOP_UPコマンドに情報を提供するIBM i表示ファイルで常にDFRWRT(*YES) パラメータが使用されます。このオプションを指定すると、プログラムがデバイスの応答を待機する時間を短縮できます。
POP_UPコマンドを使用するプログラムや、リモートで接続されたデバイスと情報をやり取りするプログラムでは、このオプションを使用してください。
*HEAVYUSAGEおよび*LIGHTUSAGE
関連付けられたプロセスで使用されるオプションに関わらず、コンパイル済みRDMLファンクションでは、HEAVY使用 (高使用頻度) オプションまたは LIGHT使用 (低使用頻度) オプションが使用されます。
高使用頻度オプションおよび低使用頻度オプションの詳細については、「6.1.5 使用頻度」を参照してください。
デフォルトでは、RDMLXファンクションは、呼び出し間で状態を維持することに注意してください。状態を維持しない場合は、*DYNAMICのコンポーネントを使用してください。
*DBOPTIMIZEまたは*DBOPTIMISE
移植性に関する考慮事項 | Visual LANSAおよびRDMLXコードで使用した場合は無視され、アプリケーションには何の効果もありません。 |
RDMLファンクションは、I/Oモジュールによってデータベース・ファイルにアクセスせず、直接I/O技術によってOPTIMIZEデータベース・アクセスを行います。
このオプションを指定すると、アプリケーションのパフォーマンスが高まりますが、多数の検討事項および制約が適用されます。
このオプションを使用する前に、『LANSA/AD ユーザーガイド』の「*DBOPTIMIZE/*DBOPTIMIZE_BATCH の使用」を読むことを強くお勧めします。
*DBOPTIMIZE_BATCHまたは*DBOPTIMISE_BATCH
移植性に関する考慮事項 | Visual LANSAおよびRDMLXコードで使用した場合は無視され、アプリケーションには何の効果もありません。 |
RDMLファンクションは、I/Oモジュールによってデータベース・ファイルにアクセスせず、大量の更新または削除操作を含むバッチ処理に最適な直接I/O技術によってOPTIMIZEデータベース・アクセスを行います。
このオプションを指定すると、バッチ・アプリケーションのパフォーマンスが高まりますが、多数の検討事項および制約が適用されます。
このオプションを使用する前に、『LANSA/AD ユーザーガイド』の「*DBOPTIMIZE/*DBOPTIMIZE_BATCH の使用」を読むことを強くお勧めします。
*PGMCOMMIT
移植性に関する考慮事項 | Visual LANSAおよびRDMLXコードで使用した場合は無視され、アプリケーションには何の効果もありません。ビルド警告が生成されます。 |
あらゆるタイプの更新処理のためにこのRDMLファンクションが開いたすべてのファイルに対して個々のプログラム・レベルのコミット制御が要求されます。
このオプションを指定すると、コミット制御の状況/自動コミット・オプションに関する個々のデータベース・ファイルの定義またはRDMLコマンドが上書きされて置き換えられます。
また、オペレーティング・システムのコミット制御機能は、RDMLファンクションによって自動的に開始/終了します。詳細については、『LANSA/AD ユーザーガイド』の「ユーザー出口 F@BGNCMT - コミット制御の開始」および「ユーザー出口 F@ENDCMT - コミット制御の終了」を参照してください。
ユーザーの責任において、適切なトランザクションの境界でCOMMITおよびROLLBACKコマンドを実行してください。
この機能は、主にバッチ処理を対象としています。
このオプションを使用する前に、『LANSA/AD ユーザーガイド』の「コミット制御を使用する」を十分に読むことを強くお勧めします。
*PGMCOMMITを指定すると、*DBOPTIMIZEオプションが実際に指定されているかどうかに関わらず、*DBOPTIMIZEが自動的に使用されます。
*NOPGMCOMMIT
移植性に関する考慮事項 | Visual LANSAおよびRDMLXコードで使用した場合は無視され、アプリケーションには何の効果もありません。ビルド警告が生成されます。 |
更新処理のタイプを問わず、このRDMLファンクションが開いたすべてのファイルに対して個々のプログラム・レベルのコミット制御は要求されません。
このオプションを指定すると、コミット制御の状況/自動コミット・オプションに関する個々のデータベース・ファイルの定義またはRDMLコマンドが上書きされて置き換えられます。
*NOPGMCOMMITを指定すると、*DBOPTIMIZEオプションが実際に指定されているかどうかに関わらず、*DBOPTIMIZEが自動的に使用されます。
*NOIGCCNV
移植性に関する考慮事項 | Visual LANSAコードで使用した場合は無視され、アプリケーションには何の効果もありません。 |
現在の言語の定義における「漢字変換を要求」フラグの設定に関係なく、このファンクションをサポートするために作成された表示ファイルに対して、 IGCCNV DDSキーワード(漢字変換用)は有効になりません。
通常、「漢字変換を要求」フラグが設定された言語では、ファンクション用に作成された表示ファイルに自動的にIGCCNV DDSキーワードが生成されます。
このオプションを指定すると、このファンクション用に生成されたすべての表示ファイルDDSで、IGCCNVキーワードの自動有効化が抑制されます。
*NO_RLTB_MIRROR
ファンクションが、右から左へ記述する言語でコンパイルされるかどうかに関わらず、このファンクションで、画面パネルおよびレポート・レイアウト上のフィールド位置の自動「ミラーリング」が有効になりません。
自動「ミラーリング」機能およびこのパラメータ値は、右から左へ記述する言語でコンパイルされるファンクションにのみ適用されます。その他すべての言語グループでは無視されます。
*DIRECT
このファンクションを別のファンクションから直接呼び出したり、このファンクションがプロンプト・キー要求に直接応じたりできるようになります。
注意:すべてのRDMLXファンクションは、*DIRECTを使用する必要があります。これにより、移植されたIBM i RDMLファンクションが固有なものになります。
このオプションを指定することにより、このファンクションを別の呼び出し元ファンクションから直接呼び出したり、このファンクションがプロンプト・キー要求に直接応じたりできるようになります。
この段階では、これがこのファンクションを呼び出す完全に有効な方法かどうかは重要ではありません。このオプションは、単に、必要に応じてファンクションを直接呼び出すことができることを示すものです。
すべてのファンクションに、このオプションが指定されたFUNCTIONコマンドを含めることをお勧めします。また、このオプションの提供前に作成されたアプリケーション・テンプレートは、このオプションを使用するFUNCTIONコマンドを自動的に生成するように変更してください。
ダイレクト・モード呼び出しの方法と、このタイプの呼び出し操作の使用時に適用される制約の詳細については、CALLコマンドのセクションを参照してください。
*CLOSE_DISPLAY
移植性に関する考慮事項 | Visual LANSAコードで使用した場合は無視され、アプリケーションには何の効果もありません。 |
ファンクションがHEAVY使用(高使用頻度)プロセス、すなわち*HEAVYUSAGEファンクションとしてアクティブなままでも、終了時に表示ファイルが閉じ、再度アクティブになったときに再度開きます。
このオプションは、主に、最新でない「復元」画面や「瞬間的」な画面に悩まされるポップアップ・ウィンドウのプロンプト・キー・ファンクションで使用するためのものです。
このオプションを指定した場合、すべてのブラウズ・ リストが、ファンクションの開始または再開ごとに明示的にクリア(CLR_LISTコマンド)されます。これにより、カウンター・フィールドは、リスト内の現在の項目数に合わせて(表示ファイルが前回の終了時に閉じているため) 0にリセットされます。
*MLOPTIMIZEまたは*MLOPTIMISE
移植性に関する考慮事項 | Visual LANSAおよびRDMLXコードで使用する場合は無視されます。 |
多言語サポート(区画レベルで定義)を使用するRDMLファンクションは、5言語以下の多言語アプリケーション・サポート用に最適化されます。
このオプションを指定すると、一般にサポートされる言語が5言語未満のアプリケーションのパフォーマンスを高めることができます。
RDMLファンクションをコンパイルすると、メイン・プログラム・オブジェクトになります。
RDMLファンクションが多言語区画にある場合は、「追加の」プログラム・オブジェクトも生成されます。
コンパイル済みのメインRDMLファンクションは、言語による動的な変更の影響を受けるすべての「リテラル」値を保持するための記憶域を宣言します。
コンパイル済みのメインRDMLファンクションが呼び出されると、このファンクションは、現在の言語に適したリテラル値で記憶域を初期化する追加のプログラムを呼び出します。
メイン・プログラムでは、1つの言語セットに十分な記憶域を宣言するだけで済むため、これは、非常に多数の言語が使用される場合に効果的な方法です。
追加のプログラムが呼び出されると、このプログラムは、すべての言語に十分な記憶域を一時的に使用し、適切な言語の詳細をメイン・プログラムの記憶域にコピーしてから終了します。
このとき、余分な(不要になった)言語の記憶域がすべて解放されます。
この方法には、2つの欠点もあります。1つは、2つのコンパイル済みオブジェクトを生成する必要があるため、RDMLファンクションのコンパイル時間が長くなることです。もう1つは、メインRDMLファンクションで、ファンクションの起動時に追加の初期化プログラムを呼び出す必要があることです。
*MLOPTIMIZE (または*MLOPTIMISE)を使用すると、RDMLファンクションで追加の初期化ファンクションを使用せずに済みます。すべての言語に必要な記憶域がメイン・プログラムで宣言され、現在の言語に使用される記憶域がメイン・プログラムで初期化されます。
ファンクションで*MLOPTIMIZEを使用すると、メイン・プログラムで必要な記憶域は大きくなりますが、コンパイル時およびファンクションの呼び出し時に使用されるリソースは少なくなります。
より大きな記憶域が使用されることから、*MLOPTIMIZEは、5言語未満の言語をサポートするファンクションでのみ使用することをお勧めします。
ただし、5という値は推奨される数に過ぎません。このオプションは、アプリケーション設計者の判断で、さらに多くの言語をサポートするファンクションで使用することもできます。
*MLOPTIMIZEについて、以下の点にも注意してください。
- OS/400 V2R1 (またはそれ以上)を使用している必要があります。
- アプリケーションは、多言語対応の区画内に存在している必要があります。
上記の条件が満たされていない状況で*MLOPTIMIZEを使用しても問題はありませんが、警告メッセージが発行され、*MLOPTIMIZE要求は無視されます。
*ALP_SYSTEM_VARIABLE
このファンクションは、(英数字変数のみを対象とした)システム変数評価ファンクションになります。このオプションを指定する場合は、オプション*DIRECTも指定してください。
*NUM_SYSTEM_VARIABLE
このファンクションは、(数値システム変数のみを対象とした)システム変数評価ファンクションになります。このオプションを指定する場合は、オプション*DIRECTも指定してください。
*ALP_FIELD_VALIDATE
このファンクションは、(英数字フィールドのみを対象とした)複雑ロジック検査ファンクションになります。
詳細については、『LANSA/AD ユーザーガイド』の「複雑なロジック検査」を参照してください。このオプションを指定する場合は、オプション*DIRECTも指定してください。
*NUM_FIELD_VALIDATE
このファンクションは、(数値フィールドのみを対象とした)複雑ロジック検査ファンクションになります。
詳細については、『LANSA/AD ユーザーガイド』の「複雑なロジック検査」を参照してください。このオプションを指定する場合は、オプション*DIRECTも指定してください。
*ALP_FIELD_VALIDATEおよび*NUM_FIELD_VALIDATEに関する技術ノート
複雑ロジック妥当性検査ファンクションでは、フィールド長および小数点以下桁数が異なるフィールドを処理できますが、タイプは同じでなければなりません。FUNCTIONコマンドで*ALP_FIELD_VALIDATEオプションを指定すると、これが英数字フィールドの妥当性検査を行うファンクションであることが示されます。また、FUNCTIONコマンドで*NUM_FIELD_VALIDATEオプションを指定した場合は、数値フィールドの妥当性検査を行うファンクションであることが示されます。
妥当性検査ファンクション内でフィールド名、フィールド長、およびフィールド値にアクセスするには、データ・ディクショナリに以下のフィールドが定義されている必要があります。
- VALFLD$NM A(10):妥当性検査対象のフィールドの名前
- VALFLD$LN P(7,0):妥当性検査対象のフィールドの長さ
- VALFLD$DP P(7,0):妥当性検査対象のフィールドの小数点以下桁数 VALFLD$AV A(256) 現在のフィールド値(英数字フィールドおよび*Char/*String フィールドの最初の 256 バイトのみ)
注意:特別な値 *SQLNULL は、CALLBACK ファンクション内で *Char/*String フィールドとして評価されません。これは、VALFLD$AV のタイプが *Alpha だからです。
- VALFLD$AV A(256):現在のフィールド値(英数字フィールド)
- VALFLD$NV P(30,9):現在のフィールド値(数値フィールド)
- VALFLD$RT A(1):戻りコード
この実装により、事実上、有効桁数が21桁を超える数値フィールドの妥当性検査が行えなくなることに注意してください。
ファンクション内でオプション*ALP_FIELD_VALIDATEまたは*NUM_FIELD_VALIDATEを使用した場合、計算された戻りコードがフィールドVALFLD$RTに返されます。これは妥当性検査ファンクションによって返され、値は'1' (正常)または'0' (異常)です。
ファンクションに*ALP_FIELD_VALIDATEまたは*NUM_FIELD_VALIDATEのいずれかのオプションを指定した場合、以下の内容は技術上の制約ではなく、設計上の制約です。この機能を正しく使用するために、以下に注意してください。
- 複雑ロジック妥当性検査ファンクション内では、DISPLAY、REQUEST、またはPOP_UPコマンドを使用できません。
- 複雑な検証処理が必要な場合であっても、ファンクション内から他のプロセス/ファンクションを呼び出す(CALL)ことはできません。ただし、3GLプログラムを呼び出すことは可能です。
- アクション・バー・プロセス内に、複雑ロジック妥当性検査ファンクションを記述できません。これは、アクション・バー内からこれらのファンクションを参照できないということではなく、アクション・バー・タイプのプロセスの一部として複雑ロジック・ファンクションを定義できないということです。
- 複雑ロジック妥当性検査ファンクションには、オプションRCV_DSまたはRCV_LISTを指定できません。
- 連携するプロセスにパラメータを渡すことはできません。
- 交換リストは使えません。これにより、妥当性検査の独立性を高め、モジュール性を保証しています。
- 再帰的なファンクション呼び出しを記述することは可能ですが、実行の段階で失敗します。例えば、ファイルAへの挿入中に呼び出された妥当性検査ファンクションがファイルBにデータを挿入しようとすると、それ自体が呼び出されて再帰的な状況になり、失敗する可能性があります。
- 複雑ロジック妥当性検査ファンクションでは、オプション*DBOPTIMIZEおよび*NOMESSAGESを使用することをお勧めします。使用頻度の高い妥当性検査ファンクションでは、*HEAVYUSAGEの使用を検討することもできます。
- 多言語アプリケーションで使う場合は、ぜひとも*MLOPTIMIZE オプションを指定することを推奨します。
*MINI_SCREEN
移植性に関する考慮事項 | アプリケーションがIBM i ベースで、画面パネル・サイズが標準的な24行×80列よりも小さい「小型」または「パームトップ」デバイスで使用する場合を除き、このオプションを使用しないでください。 通常のフル・パネルのDISPLAYまたはREQUESTコマンドが含まれるファンクションでは、このオプションを使用しないでください。 GUI 対応のファンクションでは、このオプションを使用しないでください。Visual LANSAコード内で使用すると無視され、ビルド警告が生成されます。 |
このファンクション内で使用されるPOP_UPコマンドが、IBM iシステムに接続される「小型画面」表示デバイス用になります。このオプションを指定すると、POP_UPコマンド・ファンクションの通常のアクティブ化方法が以下のように変更されます。
- 境界線が表示されません。
- 1 行目の1列目の位置までウィンドウを左寄せできます。
- 境界線のないウィンドウにより、一般的なポップアップ・ウィンドウではなく、「小型」全画面パネルの表示が生成されます。
- ポップアップ・ウィンドウ内に表示されるブラウズ・リストでは、すべてのフィールドの欄見出しがブランクで上書きされ、ブラウズ・リストと見出し領域が通常の分割線によって区切られません。
そのため、手作業で定義したテキストを「見かけ上の」欄見出しとして指定することができます。この機能は、ブラウズ・リスト内のすべてのフィールドで欄見出しがブランクに上書きされている場合のみ使用されます。また、通常の分割線を、画面パネル内でブラウズ・リストを「押し下げる」目標位置として使用できないため、画面ペインターでまったく新しいテキスト行を挿入することは困難です。新しいテキスト行を挿入するには、RDMLエディターに戻り、FIELDSリストの末尾で見出し領域に「ダミー」フィールドを定義して、画面ペインターを再度呼び出します。これにより、ダミー・フィールドが配置され、画面パネル内でブラウズ・リストが「押し下げ」られます。その後、作成した新しい行に必要なテキスト/フィールドを追加/移動します。また、「ダミー」フィールドを削除することもできます。
この機能を大規模に使用する場合は、"ET" (テンプレートの実行)エディター・アクションから呼び出せるようにアプリケーション・テンプレートを構成することを強くお勧めします。このようなテンプレートを使用すれば、ブラウズ・リスト部分を必要な開始行まで押し下げ、見出し領域にフィールド/テキストを挿入するための十分なスペースを確保するための1つ以上の初期「ダミー」フィールドを含む、すべての「小型画面」用の「標準レイアウト」を構成することができます。
*OS400_EXT_PRINT
移植性に関する考慮事項 | Visual LANSAおよびRDMLXコードではサポートされません。使用すると、ビルド警告が生成されます。 |
LANSAにより、RDMLファンクション用のIBM i 固有の外部プリンター・ファイルが生成され、使用されます。このオプション単独では利点がありませんが、RDMLファンクション内でユーザー定義レポート属性を使用するために指定する必要があります。
このオプションを指定すると、ファンクションがIBM i プラットフォームに依存するようになります。
*OS400_EXT_PRINTを指定する場合、以下のような制約が適用されます。
- *DIRECT も指定する必要があります。
- SKIP コマンドを使用することはできません。
- レポート番号1のみを使用できます。
上記の制約に従わないと、構文検査時に致命的エラーが発生します。
ユーザー定義レポート属性および外部プリンター・ファイルの詳細については、『LANSA/AD ユーザーガイド』の「ユーザー定義レポート属性」を参照してください。
*BUILTIN
このファンクションは組み込み関数になります。
詳細については、「独自の組み込み関数の作成」を参照してください。このオプションを指定する場合は、*DIRECTも指定してください。
*STRICT_NULL_ASSIGN
非NULL可能フィールドに*SQLNULLを割り当てるとエラーになります。
デフォルトの動作はこれほど厳密ではなく、*SQLNULL値を非NULL可能フィールドに割り当てると、*NULLとして扱われます。各フィールド・タイプにおける*NULL値の定義については、「7.12.1 CHANGE のパラメータ」を参照してください。
厳密なNULLの割り当てとデフォルトの動作の詳細については、「SQL Nullが可能なフィールドの割り当て、条件、式」を参照してください。
RCV_DS |
|---|
ファンクションが受け取ることのできる、最大20のデータ構造名を指定できます。このパラメータを使用する際は、以下の点に注意してください。
各データ構造名は、LANSAに定義されている物理ファイルの名前でなければなりません。
このパラメータを使用する場合は、FUNCTION OPTIONS(*DIRECT)を指定する必要があります。
特別な*EXCHANGEオプションが使用されている場合を除き、データ構造を受け取るファンクションには、コンパイル中にプロセス・メニュー(またはアクション・バー)から直接アクセスできないことを示すフラグが立てられます。
このようなファンクションは、プロセス・メニューまたはアクション・バーから直接呼び出すのではなく、正しいデータ構造を(正しい順序で)渡す別のファンクションから呼び出す必要があります。
指定された物理ファイル内のフィールド(すなわちデータ構造)を受け取るには、ファンクション内のどこかでそのフィールドを参照する必要があります。参照しないと、フィールドを受け取ることができません。このことは、呼び出し元ファンクションにも当てはまります。ファイルから渡すことができるのは実フィールドのみで、仮想フィールドは渡すことができません。
また、データ構造の、CALLコマンドのPASS_DSパラメータでの指定順序および呼び出されるファンクションのFUNCTIONコマンドの RCV_DSパラメータでの指定順序も重要です。データ構造の順序は、呼び出されるファンクションおよび呼び出し元ファンクションにおいて同じでなければなりません。同じでないと、エラーが発生する可能性があります。
同様に、データ構造のレイアウトが変更された場合、変更されたデータ構造が操作可能になった後に、RCV_DSまたはPASS_DSパラメータでそのデータ構造を参照するすべてのファンクションを再コンパイルする必要があります。
RCV_DSパラメータの最初の引数として、*EXCHANGEという特殊なオプションを使用できます(RCV_DS(*EXCHANGE CUSMST PRODMST)など)。これは、指定されたデータ構造が渡され、実際のパラメータとしてではなく、「交換リスト」タイプの構造を介して戻されることを示します。
この機能は非常に特殊で、以下の条件に正確に適合しているファンクションでのみ使用するように設計されています。ファンクションが以下の条件に正確に適合していない限り、このオプションを使用しないでください。
- ファンクションがメニューまたはアクション・バーから直接呼び出されること。この機能は、このようなファンクションが、EXCHANGEコマンドによって多数のフィールドを交換しなくても、ファンクション間で一連のデータ構造を「交換」できるようにするために用意されたものです。
- ファンクションが他のファンクションから呼び出されないこと。呼び出し元が通常の方法でデータ方法を直接渡せる場合は、このオプションを使用する必要はありません。
RCV_DS(*EXCHANGE) を使用するファンクションでは、以下のような処理ロジックが使用されます。
- ファンクションが開始されると、「交換領域」でデータ構造が(指定順序ではなくデータ構造名で)検索されます。一致するデータが見つかると、その内容がデータ構造にコピーされます。一致するデータが見つからなかった場合は、データ構造の内容は変更されません。
- その後、「交換領域」のすべてのデータ構造がクリアされます。
- ファンクションは、通常の処理に進みます。
- ファンクションが (その方法を問わず) 正常終了すると、RCV_DS パラメータで指定されたすべてのデータ構造の内容が「交換領域」に戻されます。
このオプションを使用する際の技術上の検討事項は以下のとおりです。
- 交換領域を検索、クリア、および変更するのは、RCV_DS(*EXCHANGE .....)を使用しているファンクションのみです。このオプションを使用していないファンクションは、交換領域に何の影響も与えません。
- 交換領域の最大長は9999バイトです。合計長がこの制限を超える一連のデータ構造を使用しようとすると、アプリケーションが失敗します。
- 交換領域への実際の保管は、M@EXCHDSという付属プログラムによって実行されます。IBM i オペレーティング・システム環境でのパフォーマンスを最適化し、PAG (プロセス・アクセス・グループ)の「穴」を避けるために、このプログラムには、LANSAの呼び出し前(システムのサイン・オン中など)に使用可能な「開く」および「閉じる」オプションが用意されています。この「開く」および「閉じる」オプションでは LANSAの規則に従い、開く場合はCALL M@EXCHDS (X'00')、閉じる場合はCALL M@EXCHDS (X'FF')が実行されます。明らかに、閉じる操作によって交換領域はクリアされます。LANSA RDMLファンクション内からM@EXCHDSを呼び出さないでください。これらのタイプの呼び出しは、実際にこの機能を使用するために必要なものではなく、その使用を最適化するためのものです。
- RCV_DS(*EXCHANGE ....) は、通常の RCV_DS(.....) パラメータほど効率的ではありませんが、EXCHANGE コマンドで多数のフィールドを処理するよりも効率的です。
RCV_LIST |
|---|
最大 20 個の作業リスト名を指定できます。このパラメータを使用する際は、以下の点に注意してください。
指定する各作業リストは、ファンクション内で定義されていなければなりません。
このパラメータを使用する場合は、FUNCTION OPTIONS(*DIRECT)を指定する必要があります。
作業リストを受け取るファンクションには、コンパイル時にメイン・メニューからアクセスできないことを示すフラグが立てられます。このようなファンクションは、メニューからではなく、正しい作業リストを渡す別のファンクションから呼び出す必要があります。
呼び出されるファンクションと呼び出し元ファンクションの両方で、作業リストに同じ属性が定義されている必要があります。そうでないと、エラーが発生します。
また、作業リストの、呼び出し元ファンクションのPASS_LSTパラメータでの指定順序および呼び出されるファンクションのRCV_LISTでの指定順序も重要です。作業リストの順序は、呼び出されるファンクションおよび呼び出し元ファンクションにおいて同じでなければなりません。同じでないと、エラーが発生する可能性があります。
TRIGGER |
|---|
このファンクションが、データ・ディクショナリ・フィールドまたはデータベース・ファイルの「トリガー」として機能することを指定すために使用します。
デフォルト値 *NONE を指定した場合、このファンクションはトリガー・ファンクションではありません。
*FIELD を指定した場合、このファンクションはデータ・ディクショナリ・レベルのトリガーとして機能します。関連付けるデータ・ディクショナリ・フィールドもこのパラメータで指定する必要があります。
*FILE を指定した場合、このファンクションはデータベース・レベルのトリガーとして機能します。関連付けるデータベース・ファイル名もこのパラメータで指定する必要があります。指定するファイルは物理ファイルでなければなりません。
詳細については、「トリガー」を参照してください。
ファンクションをトリガー・ファンクションとして定義する場合、以下のガイドラインに従う必要があります。
- パラメータ 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) ことはできません。これは、意図的に適用されている設計/使用上の制約で、将来的なバージョンで排除される可能性があります。
- 組み込み関数 CALL_SERVER_FUNCTION を使用してスーパーサーバー経由でファンクションを呼び出す場合、リスト#TRIG_LISTをサーバー・ファンクションに渡さないでください。
- アクション・バー・プロセス内でトリガー・ファンクションを定義することはできません。これは、アクション・バー内からこれらのファンクションを参照できないということではなく、アクション・バー・タイプのプロセスの一部としてトリガー・ファンクションを定義できないということです。
- 関連付けられたプロセスではパラメータを使用できません。
- 交換リストは使えません。これは、トリガー・ファンクションの設計および使用における独立性とモジュール性を確保するために意図的に適用されている設計/使用上の制約です。
ファンクションをトリガー・ファンクションとして定義する場合、多くの状況で以下のガイドラインに従う必要があります。
- 「トリガー」を読んで、トリガーの定義方法と使用方法を理解してください。
- オプション *NOMESSAGES および *MLOPTIMIZE を使用してください。
- オプション *HEAVYUSAGE および *DBOPTIMIZE の使用を検討することもできます。
- 直接または間接を問わず、トリガーがリンクされている、またはリンクされるデータベース・ファイルにアクセスしないでください。
- トリガーが頻繁かつ継続的に呼び出される場合は、リソースを大量に消費する操作は避けてください。このような操作を実行すると、関連付けられたファイルへのアクセス速度が低下します。
- 再帰的なファンクション呼び出しを記述することは可能ですが、実行の段階で失敗します。例えば、ファイルAへの挿入中に呼び出されたフィールド・トリガー・ファンクションがファイルBにデータを挿入しようとすると、それ自体が呼び出されて再帰的な状況になり、失敗します。