AS400 RPGLE 利用DSPF读取超时实现屏幕自动刷新

屏幕DSPF        

SAUTREFTST.DSPF

     A**************************************************************************
     A*  AUTHOR:       WITT                                                    *
     A*  DESCRIPTION:  A SAMPLE OF AUTO REFRESH DSPF                           *
     A*  SOURCE LINK:  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                        *
      * SOURCE LINK:  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程序写法之二的运行效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值