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 は、区画内で固有である必要があります。これについても、すべての構文検査によって検査されます。
Wiki Markup 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)) を受け渡しするオプションを検討してください。
...