7.9.1 CALL のパラメータ

EXIT_USED

FUNCTION

IF_ERROR

MENU_USED

NUM_LEN

ONENTRY

ONEXIT

PARM

PASS_DS

PASS_LST

PGM

PGM_EXCH

PROCESS

WEBROUTINE

PGM

呼び出す3GLプログラムの名前を指定します。このパラメータは修飾名です。このコマンドでは、プログラム名またはプロセス名(ただし、いずれか一方)を指定する必要があります。必要に応じて、プログラムが存在するライブラリを指定することもできます。ライブラリ名を指定しない場合、ジョブの実行時ライブラリ・リストでプログラムを検索するよう指定するライブラリ*LIBLが使用されます。

CALLコマンドでライブラリ名を使用することは、お勧めしません。詳細については、「I/Oコマンドでのファイル名の指定」を参照してください。

移植性に関する考慮事項

3GLプログラムの呼び出しは、既存のRDMLコードとの互換性を保つ目的で、IBM iのRDMLXプログラムでのみサポートされます。そのため、RDMLフィールドおよびリストは、3GLプログラムの呼び出しに使用される可能性のあるPARM、PGM_EXCH、PASS_DS、およびPASS_LISTパラメータでのみサポートされます。

Visual LANSAコード内で使用すると、ビルド警告が生成され、実行時にエラーが発生します。この機能を使用するコードは、この環境で実行されないように条件付けすることができます。

詳細については、『LANSAアプリケーション設計ガイド』「3GLプログラム/DLL/共用オブジェクトの呼び出し」を参照してください。

PROCESS

呼び出すLANSAプロセスの名前を指定します。3GLプログラム名またはプロセス名(ただし、いずれか一方)を指定する必要があります。

ファンクションを呼び出すときに「直接」呼び出しを使用することで、パフォーマンス上大きな利点が得られます。

直接呼び出しを使用するには、このパラメータで実際のプロセス名の代わりに*DIRECTを指定し、FUNCTIONパラメータでファンクション名を指定します。

注:

FUNCTION

任意で、指定されたプロセス内の、呼び出すファンクションを指定します。このパラメータを指定しない場合、デフォルト値*MENUが使用されます。この場合、指定されたプロセスのメイン・メニューがユーザーに表示され、ユーザーは目的のファンクションを選択することができます。

PARM

任意指定のパラメータです。指定した場合、呼び出されるプログラムに渡されるパラメータのリストが定義されます。これらのパラメータは、呼び出されるプログラムで予期されるパラメータと一致している必要があります。これは、LANSAで検査されません。詳細については、「引用符および引用文字列」を参照してください。このパラメータでは、拡張可能なグループ式を使用できます。

移植性に関する考慮事項

現在のVisual LANSAではサポートされていません。また、今後のリリースにおいてもサポートされる予定はありません。

EXIT_USED

別のプロセスを呼び出す場合のみ有効です。このパラメータは、別のプログラムを呼び出すときは無視されます。呼び出されたプロセスが、[終了]ファンクション・キーまたはEXITコマンドによって終了した場合の処理を指定します。EXIT_USEDパラメータは、呼び出されたプロセスが[終了]ファンクション・キーまたはEXITコマンドによって終了した場合のみ有効になります。

*EXITを指定すると、このファンクションはそれ自体を終了し、LANSAシステム全体を終了するよう要求します。

*MENUを指定すると、このファンクションはそれ自体を終了し、プロセスのメイン・メニューを再表示するよう要求します。

*NEXTを指定すると、制御が次のコマンドに渡されます。

*RETURNを指定すると、プログラム・メインラインでは制御が呼び出し元に戻され、サブルーチンでは制御が呼び出し元ルーチンまたはプログラム・メインラインに戻されます。

上記の値をどれも使用しない場合は、制御を渡す先の有効なコマンド・ラベルを指定してください。

WEBROUTINE

呼び出すWEBROUTINEの名前を指定します。別のWAMを指定することも可能です。その場合は、WAM名の後にWEBROUTINE名を指定し、その間をピリオドで区切ります (例 #MyWAM.MyWebRtn)。

サービス名も指定できます。その場合は、*SERVICE修飾子を接頭辞として使用します。

フィールドから値を取り込むことも可能です。その場合は、*EVALUATE修飾子を接頭辞として使用します。

ONENTRY

別のWEBROUTINEを呼び出す場合のみ有効です。WEBROUTINEについては、「WEBROUTINE」を参照してください。

受信フィールドとリストをターゲットWEBROUTINEにマッピングするために使用されます。

次のいずれかを指定できます。

*MAP_NONE (どのフィールドまたはリストもマッピングしない)

*MAP_ALL (要求されたフィールドとリストのみをすべてマッピング)

*MAP_LOCAL (WEBROUTINEのWEB_MAP上のフィールドとリストのみをマッピング)

*MAP_SHARED (WEBROUTINEレベルではなく、WAMレベルでWEB_MAPに指定されているフィールドやリストの対応付けだけを行う)

デフォルトは、*MAP_ALLです。

ONEXIT

別のWEBROUTINEを呼び出す場合のみ有効です。

ターゲットWEBROUTINEから送信フィールドをマッピングするために使用されます。

次のいずれかを指定できます。

*MAP_NONE (どのフィールドまたはリストもマッピングしない)

*MAP_ALL (要求されたフィールドとリストのみをすべてマッピング)

*MAP_LOCAL (WEBROUTINEのWEB_MAP上のフィールドとリストのみをマッピング)

*MAP_SHARED (WEBROUTINEレベルではなく、WAMレベルでWEB_MAPに指定されているフィールドやリストの対応付けだけを行う)

デフォルトは、*MAP_ALLです。

MENU_USED

別のプロセスを呼び出す場合のみ有効です。このパラメータは、別のプログラムを呼び出すときは無視されます。呼び出されたプロセスが、[メニュー]ファンクション・キーまたはMENUコマンドによって終了した場合の処理を指定します。MENU_USEDパラメータは、呼び出されたプロセスが[メニュー]/[キャンセル]ファンクション・キーまたはMENUコマンドによって終了した場合のみ有効になります。

*EXITを指定すると、このファンクションはそれ自体を終了し、LANSAシステム全体を終了するよう要求します。

*MENUを指定すると、このファンクションはそれ自体を終了し、プロセスのメイン・メニューを再表示するよう要求します。

*NEXTを指定すると、制御が次のコマンドに渡されます。

*RETURNを指定すると、プログラム・メインラインでは制御が呼び出し元に戻され、サブルーチンでは制御が呼び出し元ルーチンまたはプログラム・メインラインに戻されます。

上記の値をどれも使用しない場合は、制御を渡す先の有効なコマンド・ラベルを指定してください。

NUM_LEN

ユーザー・プログラムの呼び出し時にパラメータとして渡す数値フィールドまたは数値リテラルの長さを指定します。

デフォルト値*ALL15を指定すると、すべての数値パラメータがパック形式の数値型(15,N) (Nはデータ・ディクショナリまたはDEFINEコマンドで定義されている小数点以下桁数)の長さで渡されます。

*DEFINEDを指定すると、すべての数値パラメータが、データ・ディクショナリまたはDEFINEコマンドで定義されている長さで渡されます。

PGM_EXCH

PGMパラメータで指定されたプログラムがLANSA交換リストへのアクセスを要求するかどうかを指定します。通常、この交換リストは、LANSAのプロセスとファンクション間での情報交換のためにのみ使用されます。

このパラメータは、LANSAプロセスまたはファンクションの呼び出しを行う場合は意味がありません(すなわち、PROCESSまたはFUNCTIONパラメータが使用されます)。この状況では、パラメータ値に関わらず、パラメータが完全に無視されます。

デフォルト値*NOを指定すると、PGMパラメータで指定されたプログラム、またはそのプログラムが呼び出す可能性のあるプログラムは、LANSA交換リストへのアクセスを要求しません。

*YESを指定すると、PGMパラメータで指定されたプログラム、またはそのプログラムが呼び出す可能性のあるプログラムは、プログラムM@EXCHLを呼び出すことによりLANSA交換リストへのアクセスを要求します。

プログラムM@EXCHLの使用については、EXCHANGEコマンドおよび交換リストの処理に関するセクションで詳しく説明しています。

IF_ERROR

プログラムまたはプロセス/ファンクションを呼び出す場合に有効です。

このパラメータは、呼び出されたプログラムまたはプロセス/ファンクションがエラーで終了した場合の処理を指定します。

デフォルト値*ABORTを指定すると、このファンクション自体がエラーで終了します。

*NEXTを指定すると、制御が次のコマンドに渡されます。

*RETURNを指定すると、プログラム・メインラインでは制御が呼び出し元に戻され、サブルーチンでは制御が呼び出し元ルーチンまたはプログラム・メインラインに戻されます。

上記の値をどれも使用しない場合は、制御を渡す先の有効なコマンド・ラベルを指定してください。

PASS_DS

RDMLファンクションから別のRDMLファンクションまたは3GLプログラムに最大20個のデータ構造を渡すことができます。このパラメータを使用する前に、以下の点に注意してください。

各データ構造名は、LANSAに定義されている物理ファイルの名前で、操作可能な状態でなければなりません。

このパラメータを使用してLANSAファンクションを呼び出す場合は、CALL PROCESS(*DIRECT)を指定してください。

指定された物理ファイル内のフィールドを渡すには、ファンクション内のどこかでそのフィールドを参照する必要があります。参照しないと、フィールドが呼び出し元に渡されません。このことは、呼び出されるファンクションについても同様です。渡すことができるのはファイル内の実フィールドのみで、仮想フィールドは渡すことができません。

この点について十分に理解しておく必要があります。A、B、Cの3つの数値実フィールドが含まれるファイル定義があるとします。

RDMLファンクションを作成し、このファンクションでフィールドAおよびCを0に設定し、構造を受け取る別のRDMLファンクションを呼び出します。

呼び出されたファンクションがコマンド"IF (B = 17)"で始まっている場合、フィールドBには有効な数値データが保持されていないため、このファンクションは失敗します。フィールドBに有効な数値データが保持されていないのは、最初のファンクションでフィールドBの「参照」や「記述」をまったく行っていないためです。

この「参照」は、特定の"CHANGE FIELD(B) TO(0)"タイプのコマンドである必要はなく、任意のコマンドで任意の参照を行えます。必要なのは、フィールドBに「関心」があることをLANSAに伝えることです。そのため、もう一方のファンクションの呼び出し前後に、データ構造の隣接する記憶域にフィールドBの現行値をマッピングしたり、その記憶域からマッピングしたりする必要があります。

また、データ構造の、呼び出しファンクションのPASS_DSパラメータでの指定順序および呼び出されるファンクションのRCV_DSパラメータ(FUNCTIONコマンドを参照)での指定順序も重要です。データ構造の順序は、呼び出されるファンクションおよび呼び出しファンクションにおいて同じでなければなりません。同じでないと、エラーが発生する可能性があります。

特に交換リストとデータ構造の両方に同じフィールドがある場合は、この機能をEXCHANGEコマンドのデータ転送機能と組み合わせて使用しないでください。

3GLプログラムを呼び出す場合、データ構造が、RDML CALLコマンドで定義されている順序で受け取り、パラメータとして定義されている必要があります。

3GL呼び出しでは、パラメータ(PARM)、データ構造(PASS_DS)、および作業リスト(PASS_LST)を使用できます。パラメータは常に最初に渡され、次にすべてのデータ構造、すべての作業リストの順に渡されます。

3GLに関する豊富な経験がない限り、この機能を3GLプログラムと組み合わせて使用することはお勧めしません。

PASS_LST

RDMLファンクションまたは3GLプログラムに最大20個の作業リスト名を渡すことができます。このパラメータを使用する前に、以下の点に注意してください。

指定する各作業リストは、ファンクション内で定義されている作業リストでなければなりません。

このパラメータを使用してRDMLファンクションを呼び出す場合は、CALL PROCESS(*DIRECT)を指定してください。

呼び出しファンクション/プログラムと呼び出されるファンクション/プログラムの両方で、作業リストが同じ属性で定義されていなければなりません。そうしないと、エラーが発生する可能性があります。

また、作業リストの、CALLコマンドのPASS_LSTパラメータでの指定順序および呼び出されるファンクションのRCV_LISTでの指定順序も重要です。作業リストの順序は、呼び出されるファンクションおよび呼び出しファンクションにおいて同じでなければなりません。同じでないと、エラーが発生する可能性があります。

3GLプログラムを呼び出す場合、受け取りデータ構造が、RDML CALLコマンドで定義されている順序で受け取り、パラメータとして定義されている必要があります。

3GL呼び出しでは、パラメータ(PARM)、データ構造(PASS_DS)、および作業リスト(PASS_LST)を使用できます。パラメータは常に最初に渡され、次にすべてのデータ構造、すべての作業リストの順に渡されます。

IBM i では、実際には、各作業リストは、以下の3つの3GLレベルのパラメータとして渡されます。

1.   IBM i で、作業リストを最大サイズで表す記憶域

2.   リスト領域に存在するリスト項目の数を表す数値(IBM i パック数字(7,0))

3.   呼び出し元で処理される「現行」のリスト項目を表す数値(IBM i パック数字(7,0))

3GLに関する豊富な経験がない限り、この機能を3GLプログラムと組み合わせて使用することはお勧めしません。