当前位置: 首页 > news >正文

SAP 使用cl_gui_timer自动刷新屏幕的用法详解 <转载>

原文链接:https://blog.csdn.net/SAPmatinal/article/details/130483382
SAP 使用cl_gui_timer自动刷新屏幕的用法详解

这个类在初始化的时候会设置一个定时间隔,每隔这个时间就会触发一次FINISHED事件。利用这个类的特性,可以实现很多东西,让程序自动化起来

比如定时刷新ALV,但是这个事件不能触发PBO ,此时需要去强制触发PAI,让程序走一次PBO,如果不涉及屏幕字段啥的,只是刷新ALV就不必要了,直接调用REFRESH就行了
在这里插入图片描述
正常结果屏幕刷新

*&---------------------------------------------------------------------*
*& Report Y_XB_TEST1
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT Y_XB_TEST1 NO STANDARD PAGE HEADING.CLASS lcl_event_handler DEFINITION DEFERRED.DATA: go_timer    TYPE REF TO cl_gui_timer,go_evt_hndl TYPE REF TO lcl_event_handler,gv_datum    TYPE sy-datum,gv_uzeit    TYPE sy-uzeit.*&---------------------------------------------------------------------**&      START-OF-SELECTION*&---------------------------------------------------------------------*START-OF-SELECTION.gv_datum = sy-datum.gv_uzeit = sy-uzeit.PERFORM list_output.PERFORM init_timer.*&---------------------------------------------------------------------**&      USER-COMMAND*&---------------------------------------------------------------------*AT USER-COMMAND.IF sy-ucomm = 'RFSH'.sy-lsind = sy-lsind - 1.PERFORM list_output.ENDIF.*&---------------------------------------------------------------------**&      CLASS lcl_event_handler DEFINITION*&---------------------------------------------------------------------*CLASS lcl_event_handler DEFINITION.PUBLIC SECTION.METHODS:handle_timer FOR EVENT finished OF cl_gui_timer.ENDCLASS.                    "lcl_event_handler DEFINITION
*&---------------------------------------------------------------------*
*&      CLASS lcl_event_handler IMPLEMENTATION
*&---------------------------------------------------------------------*
CLASS lcl_event_handler IMPLEMENTATION.METHOD handle_timer.CALL METHOD cl_gui_cfw=>set_new_ok_codeEXPORTINGnew_code = 'RFSH'.CALL METHOD go_timer->run "必须重新激活定时器EXCEPTIONSOTHERS = 9.ENDMETHOD.                 "handle_timer
ENDCLASS.                    "lcl_event_handler IMPLEMENTATION*&---------------------------------------------------------------------**&      Form  INIT_TIMER*&---------------------------------------------------------------------*FORM init_timer.CHECK go_timer IS INITIAL.CREATE OBJECT go_timerEXCEPTIONSOTHERS = 9.CREATE OBJECT go_evt_hndl.SET HANDLER go_evt_hndl->handle_timer FOR go_timer.go_timer->interval = 5.  "设置间隔为10CALL METHOD go_timer->run "激活定时器EXCEPTIONSOTHERS = 9.ENDFORM.                    " INIT_TIMER
*&---------------------------------------------------------------------*
*& Form LIST_OUTPUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM list_output .DATA: datediff TYPE p,timediff TYPE p DECIMALS 2.datediff = sy-datum - gv_datum.timediff = ( sy-uzeit - gv_uzeit ) / 60.WRITE: /5 '本次开始时间:' ,AT 30 gv_datum , AT 45 gv_uzeit.WRITE: /5 '本次运行时长:' ,AT 30 datediff LEFT-JUSTIFIED,AT 38 '天' ,at 45 timediff LEFT-JUSTIFIED ,AT 51 '分'.
ENDFORM.

layout CALL SCREEN 屏幕刷新

DATA GO_TIMER TYPE REF TO CL_GUI_TIMER .
DATA: GV_INDEX TYPE N LENGTH 2 ,GV_TMP TYPE N LENGTH 2 ,GV_OKCODE TYPE SY-UCOMM .DATA: HH TYPE C LENGTH 2 , "记录时分秒FF TYPE C LENGTH 2 ,MM TYPE C LENGTH 2 .
CLASS LCL_EVENT_HANDLER DEFINITION.PUBLIC SECTION.METHODS:HANDLE_TIMER FOR EVENT FINISHED OF CL_GUI_TIMER.
ENDCLASS.                    "lcl_event_handler DEFINITION
*&---------------------------------------------------------------------*
*&      CLASS lcl_event_handler IMPLEMENTATION
*&---------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER IMPLEMENTATION.METHOD HANDLE_TIMER.PERFORM FRM_PROCESS_TIMER.ENDMETHOD.                 "handle_timer
ENDCLASS.                    "lcl_event_handler IMPLEMENTATION
DATA GO_EVT_HNDL TYPE REF TO LCL_EVENT_HANDLER .INITIALIZATION .START-OF-SELECTION  .CALL SCREEN 0100 .
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_TIMER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_PROCESS_TIMER .CALL METHOD CL_GUI_CFW=>SET_NEW_OK_CODE "强制触发PAIEXPORTINGNEW_CODE = 'RFSH'.CALL METHOD GO_TIMER->RUN "EXCEPTIONSOTHERS = 9.ENDFORM.
*&---------------------------------------------------------------------*
*& Form INIT_TIMER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM INIT_TIMER .IF GO_TIMER IS INITIAL.CREATE OBJECT GO_TIMEREXCEPTIONSOTHERS = 9.CREATE OBJECT GO_EVT_HNDL.SET HANDLER GO_EVT_HNDL->HANDLE_TIMER FOR GO_TIMER.GO_TIMER->INTERVAL = 1.  "设置间隔为1CALL METHOD GO_TIMER->RUN "激活定时器EXCEPTIONSOTHERS = 9.ELSE .CALL METHOD GO_TIMER->RUN "重新激活定时器EXCEPTIONSOTHERS = 9.ENDIF .
ENDFORM.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.SET PF-STATUS 'STATUS_0100'.
* SET TITLEBAR 'xxx'.PERFORM INIT_TIMER .
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.CASE GV_OKCODE.WHEN 'BACK'.LEAVE TO SCREEN 0 .WHEN  'RFSH'.GV_INDEX = GV_INDEX + 1 .CLEAR GV_TMP.GV_TMP = GV_INDEX DIV 3600 . "获取小时HH = GV_TMP .CLEAR  GV_TMP .GV_TMP = GV_INDEX DIV 60 . "获取分钟FF = GV_TMP .CLEAR GV_TMP .GV_TMP  = GV_INDEX MOD 60 . "获取秒MM = GV_TMP .WHEN OTHERS.ENDCASE.
ENDMODULE.
http://www.lryc.cn/news/212013.html

相关文章:

  • golang中的Interface接口 类型断言、接口赋值、空接口的使用、接口嵌套
  • 使用设计模式省去大量的if-elsef分支
  • Tomcat安装与配置文件解读
  • 计算机网络重点概念整理-第一章 计算机网络概述【期末复习|考研复习】
  • Day 11 python学习笔记
  • HarmonyOS鸿蒙原生应用开发设计- 图标库
  • 微软bing大声朗读文档或网页卡顿老是中断,用离线的huihui就很流畅但没那么自然
  • Java VMTranslator Part I
  • ES6带来那些js新特性?
  • js数组深拷贝汇总
  • 错误 LNK1112 模块计算机类型“x64”与目标计算机类型“X86”冲突
  • java八股文(基础篇)
  • window系统修改rabbitmq 默认端口
  • 七人拼团模式:颠覆你的购物观念,499元产品让你赚翻天!
  • 【机器学习合集】模型设计之卷积核设计 ->(个人学习记录笔记)
  • JS实现用户二次确认后再提交表单
  • 1992-2021年全国各省经过矫正的夜间灯光数据(GNLD、VIIRS)
  • JMeter的使用——傻瓜式学习【中】
  • MyBaties存储和查询json格式的数据(实体存储查询版本)
  • 动态规划14:一和零
  • C#WPF嵌入字体实例
  • Linux——Linux权限
  • android中gradle的kotlin编译配置选项
  • 【知识串联】概率论中的值和量(随机变量/数字特征/参数估计)【考研向】【按概率论学习章节总结】(最大似然估计量和最大似然估计值的区别)
  • NOIP2023模拟6联测27 点餐
  • AMEYA360:类比半导体重磅发布车规级智能高边驱动HD7xxxQ系列
  • 【HarmonyOS】鸿蒙操作系统架构
  • JSON数据
  • 金融领域:怎么保持电力系统连续供应?
  • 批量重命名文件夹:用数字随机重命名法管理您的文件夹