Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

[ Image Added |../../index.htm#lansa/crfile8_001.htm]
現在地:

Anchor
CRFILE8_001
CRFILE8_001
Anchor
_Toc130907478
_Toc130907478
12.4.1 RDML ファンクション

次のシステム変数 *SYDN を評価するファンクションは、システム評価ファンクションの最もシンプルな例だと考えてください。
FUNCTION  OPTIONS(*DIRECT *ALP_SYSTEM_VARIABLE *NOMESSAGES)
CHANGE     FIELD(#SYSVAR$AV) TO('SYD0386')

...

  • DISPLAY、REQUEST、POP_UPの各コマンドは使えません。
  • 複雑な検証処理が必要な場合であっても、ファンクション内から他のプロセス/ファンクションを呼び出す(CALL)ことはできません。ただし、3GLプログラムを呼び出すことは可能です。
  • アクション・バー・プロセス中に、システム変数評価ファンクションを記述することはできません。ただし、これはアクション・バー・プロセスから参照することを禁じているのではなく、アクション・バー型のプロセスの一部としては定義できない、という意味です。
  • システム変数評価ファンクションにRCV_DSオプションやRCV_LISTオプションを指定することはできません。
  • 連携するプロセスにパラメータを渡すことはできません。
  • 交換リストは使えません。これにより、評価ファンクションの独立性を高め、モジュール性を保証しています。システム変数はLANSAのあらゆる箇所から参照されうるので、参照の際、交換リストに格納された情報が必要であるとすれば、実装が非常に困難になってしまいます。
  • 再帰的なファンクション呼び出しを記述することは可能ですが、実行の段階で失敗します。例えばシステム変数*TESTとその評価ファンクションFUNC01を定義したとします。FUNC01が*TESTを直接に参照する、または妥当性規則や省略値の形で間接的に参照する場合、自分自身を再帰的に呼び出す形になって、実行は失敗します。 特に省略値にからんで、思いがけない形で再帰が現れる場合があります。例えばデータ・ディクショナリに#TESTというフィールドが定義されており、その省略値が*TESTであるとしましょう。FUNC01が#TESTフィールドを参照しようとすると、#TESTの省略値を設定する初期化処理が必要となり、その中で再びFUNC01を呼び出すことになります。これは再帰的であり、しかもその再帰は永久に続きます。
  • システム変数評価ファンクションには、*DBOPTIMIZEオプション、*NOMESSAGESオプションの指定を推奨します。頻繁に使うファンクションには、*HEAVYUSAGEオプションも指定するとよいでしょう。
  • この機能を、多言語アプリケーションで使う場合は、ぜひとも*MLOPTIMIZEオプションを指定することを推奨します。

[ Image Added |../../index.htm#lansa/crfile8_001.htm]