7.27.3 DEF_MAP_EX とサービス・プログラム内でのプロシージャ呼び出し
DEF_MTH_EX で ENTRYPOINT が指定される場合、呼び出される外部メソッドはサービス・プログラム内のプロシージャです。
DEF_MAP_EX は、最大でも 1 つのみで FOR(*RESULT) を指定することができます。これは、サービス・プログラムのプロシージャに対し 1 つの戻り値しか許可されていないからです。ただし、サービス・プログラムのプロシージャすべてに戻り値がある訳ではないので、戻り値がまったく無い場合もあります。
関連付けられた DEF_MTH_EX などと共に DEF_MAP_EX を使用する場合、次の規則が適用されます。
- FOR 値は RDML からマッピングされたものと RDML へマッピングされたものの両方を制御し、パラメータの引き渡しを値か参照にするかも制御します。
- *INPUT の場合、値は外部メソッド呼び出し前に RDML からマップされ、パラメータは値によって引き渡されます。
- *BOTH の場合、値は外部メソッド呼び出し前に RDML からマップされ、パラメータは参照によって引き渡され、この値は外部メソッド呼び出し後に RDML 変数にマップされます。
- *OUTPUT の場合、パラメータは参照によって引き渡され、この値は外部メソッド呼び出し後に RDML 変数にマップされます。
重要な注意点:
TYPE(*SIGNED) FOR(*INPUT) はサポートされません。IBM i オペレーティング・システムは C をサポートせず、これに相当する、符号付き (Signed) の RPG が使用されます。これは値によって符号付きの RPG パラメータに引き渡されたものです。
例1:
値によってプロシージャに *USA 形式で引き渡される時間引数を定義
Def_Map_Ex Name(CloseTime) For(*INPUT) Type(*TIME) Format(*USA)
例2:
プロシージャに対する最大長が 999 文字の Null 値終了の文字列を、Null ターミネータは考慮せずに定義
Def_Map_Ex Name(Conditions) For(*RESULT) Type(*VARCHAR) Length(999) Format(*NTS)
例3:
プロシージャから戻される浮動の引数を定義
Def_Map_Ex Name(Tolerance) For(*OUTPUT) Type(*FLOAT) Length(4)