私はPGMB(CL)とPGMC(CL)から呼び出されるPGMA(RPGLE)を持っています。 PGMBはPGMAを2つのparmsで呼び出し、PGMCはPGMAを3つのparmsで呼び出します。AS400のプログラム間でオプションのparmを渡す
これはPGMAでどう対処しますか?私はオプション(* Nopass)3番目のparm(これはオプションです)を試しましたが、それは私が推測する手順のためだけです。 PGMAの*エントリのPLISTにこのオプションを入れることはできません。
私はPGMB(CL)とPGMC(CL)から呼び出されるPGMA(RPGLE)を持っています。 PGMBはPGMAを2つのparmsで呼び出し、PGMCはPGMAを3つのparmsで呼び出します。AS400のプログラム間でオプションのparmを渡す
これはPGMAでどう対処しますか?私はオプション(* Nopass)3番目のparm(これはオプションです)を試しましたが、それは私が推測する手順のためだけです。 PGMAの*エントリのPLISTにこのオプションを入れることはできません。
Options(*nopass)
は、プログラムと手順の両方で動作します。 *ENTRY PLIST
をdcl-pi
に置き換える傾向がありますが、PLIST
を使用してもパラメータを任意に設定できます。
ので、最善の方法:
ctl-opt Main(MyProgram);
...
dcl-proc MyProgram;
dcl-pi *n ExtPgm('MYPROGRAM');
parm1 Char(10);
parm2 Char(10);
optparm Char(10) options(*nopass);
end-pi;
...
// to process optional parm
if %parms() >= %parmnum(optparm);
// do something with optparm;
endif;
end-proc;
リニア主な仕様がなければあなたはこのようなプログラムの本体にPIを追加します。ここでは
dcl-pi MyProgram ExtPgm('MYPROGRAM');
parm1 Char(10);
parm2 Char(10);
optparm Char(10) options(*nopass);
end-pi;
...
// to process optional parm
if %parms() >= %parmnum(optparm);
// do something with optparm;
endif;
はV5バージョン
ですd MyProgram pr ExtPgm('MYPROGRAM')
d parm1 10a
d parm2 10a
d optparm 10a options(*nopass)
d
d MyProgram pi
d parm1 10a
d parm2 10a
d optparm 10a options(*nopass)
*
/free
if %parms() >= 3;
// do something with optparm
endif;
PLISTを使用している場合でも機能しますが、その場合はファクタ1にエントリを含めることはできません。 2.これは固定形式のプログラムでのみ許可されています。通常、状況を忠実に扱うことなく新しい固定形式のコードを書いていないので、これを最後続オプションとして分類します。
C *Entry PLIST
C input1 PARM parm1
C input2 PARM parm2
C PARM optparm
C*
C if %parms() >= 3
C* do something with optparm
C endif
注:彼らはもはや必要とされているように私は私の自由な形式の手順インタフェースの例に任意のプロトタイプを追加しませんでした。しかし、プログラムを別のRPG IVプログラムまたはプロシージャーで呼び出すことができる場合は、そのプロトタイプを含むコピーブックを作成し、それを元のプログラムおよび呼び出しプログラムに組み込むことが最善です。これにより、プロトタイプが呼び出し元と一致することが保証されます。
これらのすべてのケースでは、渡されないパラメータは使用できないことを理解することが重要です。したがって、プログラムの初めに、私はif %parms() >= ...
構造を持つすべてのオプションのparmsをテストし、parmが渡されていれば、プログラムで定義した変数にそのparmを渡します。存在しない場合は、デフォルト値になります。上の固定フォーマットの例は、v3r2/v3r6以降のRPG IVのすべてのバージョンで有効です。ご使用のRPGのバージョンに%parms()ビルトインがない場合は、プログラム状況データ構造のフィールドを使用して、パラメーターの数を判別することができます。 %parms()が1990年代半ばのRPG IVの2番目のリリースで導入されたので、これは本当に過去に戻っています。
* ENTRY PLISTを使用すると、すべてのパラメータが自動的にオプションです。
オプションのparmsをコード化する必要があります。オーバーロード機能はLEでコード化しなければなりません。 – danny117
オプションのparmsは、渡されないとmchエラーを生成します。エラーを処理する場合は、plilを渡すことができます。 – danny117
@ danny117これは、渡されなかったparmで何かをしようとする場合にのみ当てはまります。これが 'if%parms()> =%parmnum(optparm)'の理由です。 – jmarkmurphy
CLP内のコードです。バージョン5では? – danny117