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 を指定しておかないと
表示されたメッセージは一瞬のうちに消えてしまう。
