Page History
...
- このオプション (FUNCTION OPTIONS(*DIRECT) など) は、プロセス・メニューから直接アクセス可能なメイン制御ファンクションではなく、「サブルーチン」として使用することを想定したファンクション内で使用してください。このファンクションを呼び出すときは、必ずCALL PROCESS(*DIRECT) オプションを使用してください。
- このパフォーマンス上の利点は、FUNCB をプロンプト・ファンクションとして使用 (すなわち、F4=プロンプト・キー要求として機能) しても得られます。FUNCB にデータ・ディクショナリ内のフィールドを関連付けるときは、実際のプロセス名 (TEST) を指定するのではなく、プロセス名を *DIRECT として指定してください。
- すべてのファンクションで FUNCTION OPTIONS(*DIRECT) を指定しても問題ありません。このオプションを使用するファンクションとこのオプションを使用しないファンクションは同等であり、プロセス・メニューからこのようなファンクションへのアクセスに制約はありません。
- FUNCTION OPTIONS(*DIRECT) を使用しないファンクションでは、関連付けられる RPG プログラム、表示装置ファイル・オブジェクト、および多言語拡張プログラムの名前は、それぞれ F@innnnn、@innnnn、および F@innnnnML になります。ここで、"innnnn" は、LANSAによって割り当てられる内部ファンクション識別子です。この割り当てでは、ファンクション名が重複しないよう考慮されます。
- FUNCTION OPTIONS(*DIRECT) を使用するファンクションでは、結果的に生成されるオブジェクト名は、@fffffff、@fffffff、および @fffffffML です。ここで、fffffff は、ファンクションの名前 (1~7文字) です。そのため、FUNCTION OPTIONS(*DIRECT) を使用するときは、固有のファンクション名を使用する必要があります。
- *DIRECT 機能を使用する場合、いくつかの制約があります。
- FUNCA と FUNCB 間のすべての情報交換は、交換リストによって行う必要があります。パラメータはサポートされないため、使用できません。これは、すべての構文検査によって検査されます。
- ファンクション名 FUNCB は、区画内で固有である必要があります。これについても、すべての構文検査によって検査されます。
- FUNCB では、TRANSFER のような「回避的」制御コマンドは使用できません。これは、この構造では、要求を処理するためのプロセス・コントローラ (TEST) がないためです。そのため、必ず [キャンセル]/[メニュー] ファンクション・キーまたは CANCEL/MENU コマンド、[終了] ファンクション・キーまたは EXIT コマンド、あるいは RETURN コマンドを使用してください。
- FUNCB をアクション・バー・プロセスに含めないでください。このタイプのアクション・バー・ファンクションの呼び出しが使用されるのは稀です。アクション・バー・ファンクションから別のプログラムを呼び出す場合、呼び出されるプログラムでは、ユーザーとのやり取りを、アクション・バーの表示および処理を混乱させる可能性のある全画面表示の DISPLAYやREQUEST コマンドではなく、POP_UP で行ってください。
- FUNCB は、FUNCA の論理「サブルーチン」のように機能します。
- FUNCB には、特定の OPTIONS(*HEAVYUSAGE) または (*LIGHTUSAGE) ディレクティブが必要です。これが指定されていない場合、親プロセスTESTの使用オプションではなく、呼び出し元ファンクションの使用オプションが適用されます。
- CALL PROCESS(*DIRECT) オプションの導入により、以前は LANSA で推奨されていなかった大量の呼び出しが可能になりました。他のファンクションの大量呼び出しを実装するときは、交換リストのサイズを考慮してください。このような状況では、交換リストに多数のフィールドが存在すると、パフォーマンスのオーバーヘッドが生じる可能性があります。
交換オプションを使用する代わりに、ファンクション間でデータ構造 (CALL....PASS_DS(#dddddd)) を受け渡しするオプションを検討してください。
- FUNCA と FUNCB 間のすべての情報交換は、交換リストによって行う必要があります。パラメータはサポートされないため、使用できません。これは、すべての構文検査によって検査されます。
ユーザー・プログラムの呼び出し |
|---|
- 呼び出されるプログラムまたはプロセスに渡すパラメータとして、フィールド名、英数字リテラル、数値リテラル、システム変数、またはプロセス・パラメータを使用できます。
- プログラムを保持するライブラリとして特別な値 *LIBL を指定する場合、そのプログラムがファンクションの実行時にユーザーのライブラリ・リストに含まれていなければなりません。
- パラメータが英数字の場合、パラメータは、常に、データ・ディクショナリまたは DEFINE コマンドで定義されている長さでユーザー・プログラムに渡されます。
- パラメータが数値の場合、パラメータは、NUM_LEN パラメータで定義されている長さのパック 10 進数フィールドで渡されます。デフォルト値 *ALL15 を指定すると、すべての数値パラメータが 15 桁のパック10 進数フィールドで渡されます。渡される小数点以下桁数は、フィールドおよびシステム変数におけるそれぞれのフィールド定義に従います。数値リテラルの場合、小数点以下桁数は、リテラルに指定された数に一致します(すなわち、12.34 はパック 10 進数 (15,2) として渡され、132 はパック 10 進数 (15,0) として渡されます)。
- *DEFINED を指定すると、すべての数値パラメータが、データ・ディクショナリまたは DEFINE コマンドで定義された長さと小数点以下桁数のパック 10 進数フィールドで渡されます。
- ユーザー・プログラムから戻されるパラメータは、パラメータがフィールドの場合のみファンクションにマッピングされます。これにより、ユーザー・プログラムでシステム変数、英数字リテラル、数値リテラル、またはプロセス・パラメータの内容を変更できなくなります。