RPG からコマンドや CLP を実行するのには、多くの人は QCMDEXC
を重い浮かべるであろう。
しかし、QCMDEXC
は、いちいち長さの指定の必要があるので、面倒でもある。
また、コマンドや CLP を実行したときが成功であるのか、エラーであるのかを
判別しにくい。
ここでは最新の方法として C/400 で頻繁に使用される system 関数を呼び出す方法を紹介しよう。
system 関数であれば、コマンド長の指定が必要ないし、エラーであったときの
MSGID
を非常に簡単に取り出すことができるのである。
この方法は米国でも繰り返し紹介されているテクニックとして有名である。
0001.00 H DATEDIT(*YMD/) BNDDIR('QC2LE') DFTACTGRP(*NO) 0002.00 F******** SYSTEM 関数によるコマンドの実行 ***************************** 0003.00 F* 0004.00 F********************************************************************** 0005.00 D CMD PR 10I 0 EXTPROC('system') 0006.00 D CMDSTR * VALUE 0007.00 D OPTIONS(*STRING) 0008.00 D RC S 10I 0 0009.00 D MSGID S 7 IMPORT('_EXCP_MSGID') 0010.00 D TRUE C 0 0011.00 /FREE 0012.00 RC = CMD('DSPLIBL *PRINT'); 0013.00 /END-FREE 0014.00 C RC IFNE TRUE 0015.00 C MSGID DSPLY ANS 1 0016.00 C END 0017.00 C MOVE *ON *INLR
system 関数によって DSPLIBL *PRINT
を実行するための記述は、かくも簡単に
見やすいものとなる。
エラーが発生したら MSGID
には CPFメッセージ識別コードが入る。
Cライブラリーを使用しているが
BNDDIR('QC2LE') DFTACTGRP(*NO)
を指定しているので CRTRPGMOD + CRTPGM
として C関数ライブラリーをバインド指定する
必要はない。CRTBNDRPG
で十分である。