□ Tips : 如何利用Subfile message 顯示訊息?
---------------------------------------
QDDSSRC SFLMSGD
A CA03
A*-------------------------------------*
A R HED01
A*-------------------------------------*
A 80 ALARM
A KEEP
A BLINK
A OVERLAY
A PUTOVR
A 1 2'SFLMSGD'
A 1 30'Subfile Message Test'
A 1 72DATE
A EDTCDE(Y)
A USER 10A O 2 2
A 2 72TIME
A EDTWRD(' : : ')
A 8 18'This is a test of subfile message -
A function '
A 21 67'Vengoal Chang'
A DSPATR(HI)
A*-------------------------------------*
A R SFLMSG SFL
A*-------------------------------------*
A* SFLMSGRCD specify message show from line XX
A SFLMSGRCD(23)
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(0002)
A SFPGMQ SFLPGMQ
QRPGLESRC SFLMSGR
H DEBUG OPTION(*SRCSTMT:*NODEBUGIO)
H DATEDIT(*YMD/)
FSFLMSGD CF E WORKSTN
F INFDS(INFDSP)
D******************************************************
D* D E F I N E D A T A - S T R U C T U R E *
D******************************************************
D INFDSP DS
D PUSHED 369 369
D* 指定 MESSAGE FILE
D* MESSAGE FILE 可以 CRTMSGF 自行建立
D* 以 WRKMSGF 按 F6 加入訊息
D MSGF DS
D MSGFIL 1 10 INZ('QCPFMSG')
D MSGFLB 11 20 INZ('*LIBL')
D*
D DS INZ
D MSGLEN 1 4B 0
D TOPGCT 5 8B 0
D*
D PBERR DS
D BYTPRV 1 4B 0 INZ(116)
D BYTAVA 5 8B 0 INZ(0)
D ERRID 9 15
D ERR### 16 16
D ERRDTA 17 116
D******************************************************
D* D E F I N E PROGRAM STATUS PARM *
D******************************************************
D SDS
D PGMID 1 10
D WRSTN 244 253
D USER 254 263
D******************************************************
D* D E F I N E C O N S T A N T *
D******************************************************
D F3 C CONST(X'33')
C******************************************************
C* M A I N - R O U T I N E :
C******************************************************
* 將 MSGID 改為自行加入的 MSGID
C MOVE 'CPF0001' MSGID :
C MOVEL(P) 'TEST' MSG :
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 DOUEQ PUSHED :
C*
C WRITE CTLMSG :MSG SFL
C EXFMT HED01 :OPTION ENTRY
C EXSR @RMVPM :
C*
C END :
C*
C MOVE *ON *INLR :
C RETURN :
C******************************************************
C* S U B - R O U T I N E :
C******************************************************
C*----------------------------------------------------*
C *INZSR BEGSR :
C*----------------------------------------------------*
C MOVE *ON *IN65 :
C MOVEL PGMID 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
A blog about IBM i (AS/400), MQ and other things developers or Admins need to know.
星期二, 10月 31, 2023
2000-10-04 如何利用Subfile message 顯示訊息?
2000-05-02 如何讓 AS/400 自動更新畫面訊息 ?(Auto display update screen)
如何讓 AS/400 自動更新畫面訊息 ?(Auto display update screen)
--------------------------------
1. 於 畫面 DDS 中指定 INVITE keyword
2. CRTDSPF 指定參數 WAITRCD(seconds) 設定畫面自動更新時間
3. 於程式中設定檔案參數 MAXDEV(*FILE)
4. 設定 Time out procedure
5. 使用 Write, Read opcode ; 不要使用 EXFMT opcode
且 Read "filename", not Read "record-format"
--------------------------------
QDDSSRC -- MARQUEE DSPF
CRTDSPF (MARQUEE) WAITRCD(3)
A PRINT
A INVITE
A INDARA
A CA03(03)
A*-------------------------------------*
A R FMT01
A*-------------------------------------*
A 1 2'MARQUEE'
A 1 27'Refresh information per 3'
A 1 72DATE
A EDTCDE(Y)
A USER 10A O 2 2
A 2 72TIME
A EDTWRD(' : : ')
*
A TEXT 30A B 14 25
*
A 23 2'F3=EXIT'
A 22 23'Don''t touch the keyboard!'
DSPATR(RI)
A 24 67'Vengoal Chang'
DSPATR(HI)
QRPGLESRC -- MARQUEER RPGLE
H option(*srcstmt)
Fmarquee CF E WORKSTN MAXDEV(*file)
F INFDS(INFDS)
F IndDs(INDDS)
D******************************************************
D* D E F I N E PROGRAM STATUS PARM *
D******************************************************
D SDS
D PGMID 1 10
D WRSTN 244 253
D USER 254 263
D******************************************************
D* D E F I N E C O N S T A N T *
D******************************************************
D F3KEY C CONST(X'33')
D******************************************************
D* D E F I N E D A T A - S T R U C T U R E *
D******************************************************
D INFDS DS
D KEY 369 369
D MajorCode 401 402
D MinorCode 403 404
* INDDS using with INDARA in DSPF DDS file level defined
D IndDs DS 99
D F3 3 3N
D ds
D TimeDate 14 0
D Time60 6 0 overlay(TimeDate: 1)
D Date80 8 0 overlay(TimeDate: 7)
C******************************************************
C* M A I N - R O U T I N E :
C******************************************************
C* *IN03 DOUEQ *ON
C F3 DOUEQ *ON
C write FMT01
C read marquee
C Select
* --------------------------------------------------------------
* - Handle time-out condition
* --------------------------------------------------------------
C When MajorCode = '03' and
C MinorCode = '10'
C time TimeDate
C movel Time60 text
C Other
C EndSl
C EndDo
C MOVE *ON *INLR
C RETURN
2000-03-20 如何在 AS/400 應用程式中抓取游標位置 ?
如何在 AS/400 應用程式中抓取游標位置 ?
AS/400 系統無法像 PC 軟體直接追蹤使用者敲擊哪一鍵, AS/400 是於終端機
將透過按 "執行鍵(ENTER)"整個劃面資料送出至 AS/400 的, AS/400 處理完資
料後, 再將結果畫面送回終端機, 故 AS/400 應用程式中抓取游標位置, 須按
按 "執行鍵(ENTER)", 才能得到游標位置.
方法有兩種 :
一 : 於程式中畫面檔案宣告 INFDS 取其欄位值加以計算得知,
二 : 直接於畫面檔案 DDS 中加入 RTNCSRLOC Keyword , 取其系統傳回值,
而 RTNCSRLOC Keyword 有二種指定方式,
一種為取 游標位置 RTNCSRLOC(*WINDOW &ROWN &COLN),
另一種取欄位名稱 RTNCSRLOC(&RCDNAM &FLDNAM &CSRLOC)
--------------------------------
以下是畫面及程式 Source,
DSPF : CSRPOSD
A PRINT
A INDARA
A CA03(03)
A*-------------------------------------*
A R FMT01
A*-------------------------------------*
A RTNCSRLOC(&RCDNAM &FLDNAM -
A &CSRLOC)
A RTNCSRLOC(*WINDOW &ROWN -
A &COLN)
A FLDNAM 10A H
A RCDNAM 10A H
A CSRLOC 4S 0H
A ROWN 3S 0H
A COLN 3S 0H
A*
A 1 2'CSRPOSD'
A 1 30'Cursor Position Test'
A 1 72DATE
A EDTCDE(Y)
A USER 10A O 2 2
A 2 72TIME
A EDTWRD(' : : ')
A 7 38'LINE'
A 7 47'COLUMN'
A 8 27'INFDS ==>'
A V1LIN 3S 0O 8 38DSPATR(HI)
A V1COL 3S 0O 8 49DSPATR(HI)
A 10 2'RTNCSRLOC(*WINDOW &ROWN &COLN) ==>'
A ROW 3S 0O 10 38DSPATR(HI)
A COL 3S 0O 10 49DSPATR(HI)
A 12 2'RTNCSRLOC(&RCDNAM &FLDNAM &CSRLOC)'
A V1RCD 10A O 12 38DSPATR(HI)
A V1FLD 10A O 12 49DSPATR(HI)
A V1CSR 4S 0O 12 60DSPATR(HI)
*
A 14 27'TEXT ==>'
A TEXT 30A B 14 38
*
A 23 2'F3=EXIT'
A 22 23'MOVE YOUR CURSOR AND PRESS ENTER'
DSPATR(RI)
A 24 67'Vengoal Chang'
DSPATR(HI)
RPGLE : CSRPOSR
FCSRPOSD CF E WORKSTN
F INFDS(INFDS)
D******************************************************
D* D E F I N E PROGRAM STATUS PARM *
D******************************************************
D SDS
D PGMID 1 10
D WRSTN 244 253
D USER 254 263
D******************************************************
D* D E F I N E C O N S T A N T *
D******************************************************
D F3 C CONST(X'33')
D******************************************************
D* D E F I N E D A T A - S T R U C T U R E *
D******************************************************
D INFDS DS
D KEY 369 369
D LINCLM 370 371
D DS
D DSWRK 1 2B 0
D DSWRKB 2 2
C******************************************************
C* M A I N - R O U T I N E :
C******************************************************
C *IN03 DOUEQ *ON
C EXFMT FMT01
C *IN03 IFEQ *OFF
C*
C Z-ADD 0 DSWRK
C MOVEL LINCLM DSWRKB
C Z-ADD DSWRK V1LIN
C*
C Z-ADD 0 DSWRK
C MOVE LINCLM DSWRKB
C Z-ADD DSWRK V1COL
C*
C Eval ROW = ROWN
C Eval COL = COLN
C*
C MOVEL RCDNAM V1RCD
C MOVEL FLDNAM V1FLD
C Z-ADD CSRLOC V1CSR
C*
C END
C END
C*
C MOVE *ON *INLR
C RETURN
參考文件 :
ILE RPG for AS/400 Reference, SC09-2508-11,
DDS for display files, SC41-5712
訂閱:
文章 (Atom)