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 で十分である。