屏幕DSPF
SAUTREFTST.DSPF
A**************************************************************************
A* AUTHOR: WITT *
A* DESCRIPTION: A SAMPLE OF AUTO REFRESH DSPF *
A* ORG SOURCE: http://blog.chinaunix.net/uid-7185891-id-2066091.html *
A* DATE WRITTEN: 2024-08-13 *
A**************************************************************************
A DSPSIZ(24 80 *DS3)
A CF12(12)
A CF05(05)
A R RCD
A N50 INVITE
A 4 13DATE
A EDTCDE(Y)
A 4 31TIME
A 10 26'相隔'
A REFSH 3Y 0O 10 33EDTCDE(3)
A 10 38'秒自动刷新'
A 11 26'本次刷新时间'
A ZDATE 26 O 11 41
A 51 23 13'F5 =自动刷新'
A N51 23 13'F5 =禁止刷新'
A 23 33'F12 =退出'
A R SXW
A WINDOW(8 8 6 20 *NOMSGLIN *NORSTCSR)
A SXSJ 3Y 0B 3 14EDTCDE(3)
A COMP(GT 0)
A 5 2'ENTRY =确定'
A 3 1'刷新时间:'
A 6 1'时间需要大于0'
A DSPATR(HI)
A 30 DSPATR(ND)
RPG程序写法之一
PAUTREFTST.RPGLE
**********************************************************************
* AUTHOR: WITT *
* DESCRIPTION: A SAMPLE OF AUTO REFRESH DSPF *
* ORG SOURCE: http://blog.chinaunix.net/uid-7185891-id-2066091.html*
* DATE WRITTEN: 2024-08-13 *
**********************************************************************
* 1.自动刷新屏幕需要将DSPF文件定义为USROPN,因为每次
* 规定刷新时间时需要使用重订向来指定。
* 2. DSPF文件需要定义一个INFDS,因为当DSPF文件被指定
* 刷新时间后,一旦到达刷新时间系统会将文件的状态码置
* 显示时时间超时,这时需要将显示文件重新输出一次,
* 这样就达到了刷新的效果。
*
FSAUTREFTSTCF E WORKSTN MAXDEV(*FILE)
F INFDS(INFDS)
F USROPN
D
DOVRDSPF C 'OVRDSPF FILE(SAUTREFTST)'
DINFDS DS
D STATUS 11 15S 0
D ERRID 46 52A
D SFLLOC 378 379B 0
DTT S Z INZ
C*初始化时没有刷新时间
C CLOSE SAUTREFTST
C EVAL QCMD=OVRDSPF+' WAITRCD(5)'
C CALL 'QCMDEXC' QCMDEXC
C OPEN SAUTREFTST
C EVAL *IN50='0'
C EVAL REFSH =5
C*显示
C AGN TAG
C*EXFMT
C* WRITE FOOT
C TIME TT
C MOVE TT ZDATE
C*将记录写入界面
C WRITE RCD
C*读取界面的记录:需要刷新读取文件,不需要刷新读取记录
C N50 READ SAUTREFTST 9699
C 50 READ RCD
C*POST文件,当系统自动将文件从队列中取出时,表示需要刷新。
C POST SAUTREFTST
C*ERROR为CPF4737表示"WAIT TIME EXCEEDED FOR READ FROM WORKSTN
C*所以需要从新写入记录或文件
C IF (STATUS = 1331 OR STATUS=1299)
C AND ERRID = 'CPF4737'
C GOTO AGN
C ENDIF
C*F12=EXIT
C IF *IN12='1'
C GOTO EXIT
C ENDIF
C*指定刷新时间
C IF *IN05
C EVAL *IN50=NOT *IN50
C IF NOT *IN50
C*设置需要刷新的时间长度
C EXFMT SXW
C CLOSE SAUTREFTST
C EVAL REFSH =SXSJ
C EVAL QCMD=OVRDSPF+' WAITRCD('+%CHAR(SXSJ)+')'
C CALL 'QCMDEXC' QCMDEXC
C EVAL *IN51='0'
C EVAL SXSJ =0
C OPEN SAUTREFTST
C GOTO AGN
C*不刷新
C ELSE
C CLOSE SAUTREFTST
C EVAL REFSH =999
C EVAL QCMD=OVRDSPF+' WAITRCD(*NOMAX)'
C CALL 'QCMDEXC' QCMDEXC
C EVAL *IN51='1'
C OPEN SAUTREFTST
C GOTO AGN
C ENDIF
C ENDIF
C
C GOTO AGN
C EXIT TAG
C EVAL *INLR='1'
C QCMDEXC PLIST
C PARM QCMD 200
C PARM 200 QLEN 15 5
RPG程序写法之一的运行效果
RPG程序写法之二
这里没有使用OVRDSPF重定向显示文件去设置超时时长,而是直接用命令设置DSPF的超时时长
CHGDSPF FILE(SAUTREFTST) WAITRCD(1)
PAUTREFSIM.RPGLE
**********************************************************************
* AUTHOR: WITT *
* DESCRIPTION: A SAMPLE OF AUTO REFRESH DSPF *
* DATE WRITTEN: 2024-08-15 *
**********************************************************************
FSAUTREFTSTCF E WORKSTN MAXDEV(*FILE)
DSYSTIME S Z INZ
C
C DOW NOT *IN12
C TIME SYSTIME
C MOVE SYSTIME ZDATE
C WRITE RCD
C READ SAUTREFTST 9699
C ENDDO
C
C ENDPGM TAG
C MOVE *ON *INLR
RPG程序写法之二的运行效果