CALLの動的引数
SBMJOB時のCALL 引数その1
の続きで、V7R5 の新機能、CALL
コマンドの動的引数で、明示的に SBMJOB
した場合どうなるか?試してみました。
CLサンプルソースは以下の通り
USC_SBMJ21
PGM
DCL VAR(&@PSTR1 ) TYPE(*CHAR) LEN(01 ) /* 文字列 */
DCL VAR(&@PSTR2 ) TYPE(*CHAR) LEN(50 ) /* 文字列 */
DCL VAR(&@PDEC1 ) TYPE(*DEC ) LEN(08 0) /* 数値 */
CHGVAR VAR(&@PSTR1 ) VALUE('+
U+
')
CHGVAR VAR(&@PSTR2 ) VALUE('+
ABCDEFGHIJ+
KLMNOPQRST+
abcdefghij+
klmnopqrst+
uvwxyzZYXW+
')
CHGVAR VAR(&@PSTR2 ) VALUE('+
ABCDEFGHIJ+
KLMNOPQRST+
abcdefghij+
klmnopqrst+
uvwxyzZYXW+
')
CHGVAR VAR(&@PDEC1 ) VALUE(+
12345678+
)
SBMJOB CMD( +
CALL USC_SBMJ22 +
PARM( +
(&@PDEC1 (*DEC 8 0)) +
(&@PSTR1 (*CHAR 01)) +
(&@PSTR2 (*CHAR 50)) +
) +
) JOBQ(QBATCH)
USC_SBMJ22
PGM PARM( +
&@PDEC1 +
&@PSTR1 +
&@PSTR2 +
) +
DCL VAR(&@PSTR1 ) TYPE(*CHAR) LEN(01 ) /* 文字列 */
DCL VAR(&@PSTR2 ) TYPE(*CHAR) LEN(50 ) /* 文字列 */
DCL VAR(&@PDEC1 ) TYPE(*DEC ) LEN(08 0) /* 数値 */
/* DCL VAR(&@PDEC1 ) TYPE(*DEC ) LEN(15 5) */ /* 数値 */
DMPCLPGM
SNDPGMMSG MSG('&@PSTR1 を参照 ')
IF COND(&@PSTR1 *EQ ' ') THEN(DO)
ENDDO
SNDPGMMSG MSG('&@PSTR2 を参照 ')
IF COND(&@PSTR2 *EQ ' ') THEN(DO)
ENDDO
SNDPGMMSG MSG('&@PDEC1 を参照 ')
IF COND(&@PDEC1 *EQ 12345678) THEN(DO)
SNDUSRMSG MSG('&@PDEC1 を参照出来た ') MSGTYPE(*INFO) +
TOUSR(USHIDAY)
ENDDO
結果は、良い感じに変数が渡っています。V7R5 からはこれまでの TYPE(*DEC) LEN(15 5)
縛りから開放されますね。因みに (&@PSTR3 (*CHAR 32767))
のCL文字列最大長でも正常に動作しました。
最新ほやほやの機能すぎて、開発側としては、まだ使いづらいですが、ロジックの見通しが良くなっていく事には変わりありませんので、歓迎です!
CLダンプ_QPPGMDMP
変数 タイプ 長さ 値 16 進値
*...+....1....+....2....+ * . . . + . . . . 1 . . . . + . . . . 2 . . .
&@PDEC1 *DEC 8 0 12345678
&@PDEC2 *DEC 1 1 0.1
&@PSTR1 *CHAR 1 'U' E4
&@PSTR2 *CHAR 50 'ABCDEFGHIJKLMNOPQRSTabcde' C1C2C3C4C5C6C7C8C9D1D2D3D4D5D6D7D8D9E2E381828
+26 'fghijklmnopqrstuvwxyzZYXW' 86878889919293949596979899A2A3A4A5A6A7A8A9E9E
&@PSTR3 *CHAR 32767 'X*X* ' E75CE75C4040404040404040404040404040404040404
+26 ' ' 404040404040404040404040404040404040404040404
+51 ' ' 404040404040404040404040404040404040404040404