SFLMSGを使って、何か、アプリケーションに使えないかな。というわけで、試してみました。大抵は、メニューなどでプログラムメッセージを表示するのに使うものですね。まあ、なにに応用するかは、アナタ次第です。指定は簡単です。
画面ファイル:ZZI060D
わざと、メッセージの表示行を変更して、13行目からにしました。普通は、25 24行目ですね。
A CA03
A*-------------------------------------*
A R HED01
A*-------------------------------------*
A 80 ALARM
A KEEP
A BLINK
A OVERLAY
A PUTOVR
A 8 18'THIS IS A TEST OF SUBFILE MESSAGE -
A FUNCTION '
A*-------------------------------------*
A R SFLMSG SFL
A*-------------------------------------*
A SFLMSGRCD(13)
A KEYVAR SFLMSGKEY
A SFPGMQ SFLPGMQ(10)
A*-------------------------------------*
A R CTLMSG SFLCTL(SFLMSG)
A*-------------------------------------*
A OVERLAY
A SFLDSP
A SFLDSPCTL
A 65 SFLEND
A SFLINZ
A SFLSIZ(0011)
A SFLPAG(0010)
A SFPGMQ SFLPGMQ
RPG:ZZI060
エラーメッセージはわざと、CPFメッセージから出しました。また、メッセージ識別子をしてしないで、固定情報を表示する事も可能です。
H Y/ 1
FZZI060D CF E WORKSTN
F KINFDS INFDSP
I******************************************************
I* D E F I N E D A T A - S T R U C T U R E *
I******************************************************
IINFDSP DS
I 369 369 PUSHED
I*
IMSGF DS
I I 'QCPFMSG' 1 10 MSGFIL
I I '*LIBL' 11 20 MSGFLB
I*
I IDS
I B 1 40MSGLEN
I B 5 80TOPGCT
I*
IPBERR DS
I I 116 B 1 40BYTPRV
I I 0 B 5 80BYTAVA
I 9 15 ERRID
I 16 16 ERR###
I 17 116 ERRDTA
I SDS
I 1 10 PGMID
I******************************************************
I* D E F I N E C O N S T A N T *
I******************************************************
I X'33' C F3
C******************************************************
C* M A I N - R O U T I N E :
C******************************************************
C MOVE 'CPF0001' MSGID :
C MOVEL'TEST' MSG P :
C EXSR @SNDPM :
C* :
C MOVE 'CPF0002' MSGID :
C EXSR @SNDPM :
C* :
C MOVE 'CPF0003' MSGID :
C EXSR @SNDPM :
C* :
C MOVE 'CPF0005' MSGID :
C EXSR @SNDPM :
C* :
C MOVE 'CPF0006' MSGID :
C EXSR @SNDPM :
C* :
C MOVE 'CPF0007' MSGID :
C EXSR @SNDPM :
C* :
C MOVE 'CPF0008' MSGID :
C EXSR @SNDPM :
C* :
C MOVE 'CPF0010' MSGID :
C EXSR @SNDPM :
C* :
C MOVE 'CPF0011' MSGID :
C EXSR @SNDPM :
C* :
C MOVE 'CPF0190' MSGID :
C EXSR @SNDPM :
C* :
C MOVE 'CPF0191' MSGID :
C EXSR @SNDPM :
C* :
C MOVE 'CPF0192' MSGID :
C EXSR @SNDPM :
C* :
C F3 DOUEQPUSHED :
C* :
C WRITECTLMSG :MSG SFL
C EXFMTHED01 :OPTION ENTRY
C EXSR @RMVPM :
C* :
C END :
C* :
C MOVE *ON *INLR :
C RETRN :
C******************************************************
C* S U B - R O U T I N E :
C******************************************************
C*----------------------------------------------------*
C *INZSR BEGSR :
C*----------------------------------------------------*
C MOVE *ON *IN65 :
C MOVELPGMID SFPGMQ :FOR MSG SFL
C* :
C ENDSR :
C*----------------------------------------------------*
C @SNDPM BEGSR :
C*----------------------------------------------------*
C CALL 'QMHSNDPM' :
C PARM MSGID 7 :
C PARM MSGF :
C PARM MSG 78 :
C PARM 78 MSGLEN :
C PARM '*INFO' MSGTYP 10 :
C PARM '*' TOPGMQ 10 :
C PARM 0 TOPGCT :
C PARM KEYVAR 4 :
C PARM PBERR :
C* :
C MOVE *BLANK MSG :
C* :
C ENDSR :
C*----------------------------------------------------*
C @RMVPM BEGSR :
C*----------------------------------------------------*
C CALL 'QMHRMVPM' :
C PARM '*' TOPGMQ :
C PARM 0 TOPGCT :
C PARM *BLANK KEYVAR :
C PARM '*OLD ' CLEAR 10 :
C PARM PBERR :
C* :
C ENDSR :
最初は、アプリのプログラムでエラーメッセージを出す部分に、使おうとしていたのですが、「重大度」をメッセージファイルから取り出せないので、利用価値が余り無かったです。まあ、RTVMSGDもAPIから実行しても、問題ないのですけど。「重大度」は、エラー音(ALARM)を鳴らすか否かに使いたかったのです。仕方ないので、今までの、外サブで行きます。この外サブは、RTVMSGDして、メッセージの合成をしたデータと、アラームを鳴らすかいなか、のフラグを戻すものでした。これでいいや。このほかのエラーメッセージ関係のDDSキーワードも、今度試してみよう。
本来、コマンドSNDPGMMSGのCLPを作るところですが、(このコマンドはQCMDEXCで実行出来ないので)、でもそれでは面倒なので、APIを使ってみました。@SNDPMの中のQMHSNDPMです。
また、@RMVPMは、プログラムメッセージの消去です。ここは、気をつけないと、大事なメッセージまで消してしまうかもしれないので、注意して下さい。このサンプルは「修正」したほうが良いですね。このままでは、危険です。送信時のKEYVARを取って置いて、それを使って、CLEARに*BYKEYをセットして、消していくのが、安全ですね。
使えないと分かってしまい、なんかやる気を無くしました。この@RMVPMの修正は、また、気が向いたときにね。
1998/10/14 |