CLP や C/400の実行中にステータス・メッセージや完了メッセージを表示することは
簡単にできるが RPG の実行中に完了メッセージやステータス・メッセージを表示するためには
ちょっとした注意が必要となる。
ここでのRPGサンプル・ソースは実行キーを押す都度にメッセージが次々と表示されるものである。
0001.00 H DFTNAME(TESTMSG) DATEDIT(*YMD/) 0002.00 F********** 完了メッセージの表示 ******************************** 0003.00 FTESTMSGFM CF E WORKSTN 0004.00 F***************************************************************** 0005.00 D MSR S 80 DIM(3) CTDATA PERRCD(1) 0006.00 D MS S 4S 0 0007.00 D SNDPGMMSG C CONST('QSYS/QMHSNDPM') 0008.00 D QCPFMSG C CONST('QCPFMSG QSYS ') 0009.00 D MSGDTALEN S 10I 0 INZ(40) 0010.00 D PGMSTKCNT S 10I 0 INZ(0) 0011.00 0012.00 D APIERR DS 0013.00 D GETBYT 1 4B 0 INZ(160) 0014.00 D AVLBYT 5 8B 0 INZ(0) 0015.00 D MSGID 9 15 0016.00 D MSGDTA 17 160 0017.00 0018.00 C*( 初期画面 ) 0019.00 C*----------------------------------------------------+ 0020.00 C START TAG 0021.00 C EXFMT DSPHEAD 0022.00 C*----------------------------------------------------+ 0023.00 C SETOFF 99 0024.00 C*( CF03 )- 終了 0025.00 C *IN03 IFEQ *ON 0026.00 C SETON LR 0027.00 C RETURN 0028.00 C END 0029.00 C*( 実行キー ) 0030.00 C ADD 1 MS 0031.00 C MS IFGE 4 0032.00 C Z-ADD 1 MS 0033.00 C ENDIF 0034.00 C EXSR SNDMSG 0035.00 C GOTO START 0036.00 C****************************************************** 0037.00 C *INZSR BEGSR 0038.00 C****************************************************** 0039.00 C Z-ADD 0 MS 0040.00 C ENDSR 0041.00 C****************************************************** 0042.00 C SNDMSG BEGSR 0043.00 C****************************************************** 0044.00 C MOVEL QCPFMSG MSGFILLIB 0045.00 C MOVEL MSR(MS) MSGDTA 0046.00 C*----------------------------------------------------+ 0047.00 C CALL SNDPGMMSG 0048.00 C PARM 'CPF9897' MSGID 7 0049.00 C PARM MSGFILLIB 20 0050.00 C PARM MSGDTA 0051.00 C PARM MSGDTALEN 0052.00 C PARM '*STATUS ' MSGTYPE 10 0053.00 C PARM '*EXT ' PGMQUE 10 0054.00 C PARM PGMSTKCNT 0055.00 C PARM MSGKEY 4 0056.00 C PARM APIERR 0057.00 C*----------------------------------------------------+ 0058.00 C ENDSR 0059.00 ** MSR 0060.00 1 レコードが追加されました。 0061.00 1 レコードが変更されました。 0062.00 1 レコードが削除されました。
サブ・ルーチン : SNDMSG
の中で API : QMHSNDPM
を使ってステータス・メッセージ( *STATUS
)を出力している。
これは CLP で記述すると
SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&STSMSG) + TOPGMQ(*EXT) MSGTYPE(*STATUS)
を実行しているのと同じである。
*STATUS
メッセージを出力するには MSGF
と MSGID
を指定しなければならない。
CPF9897 は本文が512バイトの変数のみから成るメッセージであるので、これを利用すると
メッセージ・データとして任意の文字列を *STATUS
メッセージとして出力することができる。
0001.00 A*%%TS SD 20070731 210529 QTR REL-V5R4M0 5722-WDS 0002.00 A*-----------------------------------------------* 0003.00 A* SFLENT : サブ・ファイル入力 0004.00 A* 0005.00 A* 受注の入力 0006.00 A* 0007.00 A*-----------------------------------------------* 0008.00 A*%%EC 0009.00 A DSPSIZ(24 80 *DS3) 0010.00 A* MSGLOC(24) 0011.00 A PRINT 0012.00 A HELP 0013.00 A ALTHELP(CA01) 0014.00 A HLPPNLGRP(PGM201H QTROBJ/PG 0015.00 A HLPTITLE(' 受注の入力 ') 0016.00 A R DSPHEAD OVERLAY 0017.00 A*%%TS SD 20070713 162403 QTR REL-V5R4M0 5722-WDS 0018.00 A TEXT(' 初期画面 ') 0019.00 A CF03(03 ' 終了 ') 0020.00 A SETOF(99) 0021.00 A BLINK 0022.00 A H HLPARA(2 12 2 17) 0023.00 A HLPPNLGRP('PGM201/JUCNO' - 0024.00 A QTROBJ/PGM201H) 0025.00 A 1 27' 受注の入力 ' 0026.00 A DSPATR(HI) 0027.00 A 2 2' 受注 ' 0028.00 A JUCNO 5Y 0B 2 12TEXT(' 受注 ') 0029.00 A CHECK(RZ) 0030.00 A CHECK(ER) 0031.00 A 11 15' 必要な項目を打鍵して実行 0032.00 A して下さい。 ' 0033.00 A 23 2'F3= 終了 ' 0034.00 A COLOR(BLU)
表示画面(DSPF) でメッセージの出力に必要な記述は
0016.00 A R DSPHEAD OVERLAY
に記述されている OVERLAY
キー・ワードである。
同時に出力される画面レコードには必ず OVERLAY
を指定しておかないと
表示されたメッセージは一瞬のうちに消えてしまう。