• 具备自动刷新功能的 SAP ABAP ALV 报表


    该报表主要结构如下,完整代码见文末。

    • f_call_rfc_wait: 发起异步调用,等待 1 秒钟,来模拟每隔 1 秒刷新屏幕的效果。

    • f_display_data: ALV 常规操作,调用函数 REUSE_ALV_LIST_DISPLAY 显示 ALV 数据。

    • f_read_data: 调用函数 THUSRINFO,返回的结果作为 ALV 的数据源。该函数返回当前系统登录的用户名列表:

    完整代码:

    REPORT ZALV_AUTO_REFRESH.
    DATA :
      gt_user LIKE uinfo OCCURS 0 WITH HEADER LINE. " User info in SM04
    
    *---------------------------------------------------------------------*
    START-OF-SELECTION.
    
      PERFORM f_read_data.
    
      PERFORM f_display_data.
    
    *---------------------------------------------------------------------*
    *       Form  F_LIRE_DATA
    *---------------------------------------------------------------------*
    FORM f_read_data.
    
      REFRESH gt_user.
    
    * Get User's info
      CALL FUNCTION 'THUSRINFO'
           TABLES
                usr_tabl = gt_user.
    
    * Wait in a task
      PERFORM f_call_rfc_wait.
    
    ENDFORM.                               " F_READ_DATA
    *---------------------------------------------------------------------*
    *      Form  F_DISPLAY_DATA
    *---------------------------------------------------------------------*
    FORM f_display_data.
    
      DEFINE m_sort.
        add 1 to ls_sort-spos.
        ls_sort-fieldname = &1.
        append ls_sort to lt_sort.
      END-OF-DEFINITION.
    
      DEFINE m_event_exit.
        clear ls_event_exit.
        ls_event_exit-ucomm = &1.
        ls_event_exit-after = 'X'.
        append ls_event_exit to lt_event_exit.
      END-OF-DEFINITION.
    
      DATA :
        ls_layout     TYPE slis_layout_alv,
        lt_sort       TYPE slis_t_sortinfo_alv,
        ls_sort       TYPE slis_sortinfo_alv,
        lt_event_exit TYPE slis_t_event_exit,
        ls_event_exit TYPE slis_event_exit.
    
    * Build Sort Table
      m_sort 'ZEIT'.
    
    * Build Event Exit Table
      m_event_exit '&NTE'.                 " Refresh
    
      ls_layout-zebra = 'X'.
      ls_layout-colwidth_optimize = 'X'.
    
      CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
           EXPORTING
                i_callback_program      = sy-cprog
                i_callback_user_command = 'USER_COMMAND'
                is_layout               = ls_layout
                i_structure_name        = 'UINFO'
                it_sort                 = lt_sort
                it_event_exit           = lt_event_exit
           TABLES
                t_outtab                = gt_user.
    
    ENDFORM.                               " F_DISPLAY_DATA
    *---------------------------------------------------------------------*
    *       FORM USER_COMMAND                                             *
    *---------------------------------------------------------------------*
    FORM user_command USING i_ucomm     TYPE syucomm
                            is_selfield TYPE slis_selfield.     "#EC CALLED
    
      CASE i_ucomm.
        WHEN '&NTE'.
          PERFORM f_read_data.
          is_selfield-refresh = 'X'.
          SET USER-COMMAND '&OPT'.         " Optimize columns width
      ENDCASE.
    
    ENDFORM.                               " USER_COMMAND
    *---------------------------------------------------------------------*
    *      Form  F_CALL_RFC_WAIT
    *---------------------------------------------------------------------*
    FORM f_call_rfc_wait.
    
      DATA lv_mssg(80).                                         "#EC NEEDED
    
    * Wait in a task
      CALL FUNCTION 'RFC_PING_AND_WAIT' STARTING NEW TASK '001'
        PERFORMING f_task_end ON END OF TASK
        EXPORTING
          seconds               = 1        " Refresh time
          busy_waiting          = space
        EXCEPTIONS
          RESOURCE_FAILURE      = 1
          communication_failure = 2  MESSAGE lv_mssg
          system_failure        = 3  MESSAGE lv_mssg
          OTHERS                = 4.
    
    ENDFORM.                               " F_CALL_RFC_WAIT
    *---------------------------------------------------------------------*
    *      Form  F_TASK_END
    *---------------------------------------------------------------------*
    FORM f_task_end USING u_taskname.
    
      DATA lv_mssg(80).                                         "#EC NEEDED
    
    * Receiving task results
      RECEIVE RESULTS FROM FUNCTION 'RFC_PING_AND_WAIT'
        EXCEPTIONS
          RESOURCE_FAILURE      = 1
          communication_failure = 2  MESSAGE lv_mssg
          system_failure        = 3  MESSAGE lv_mssg
          OTHERS                = 4.
    
      CHECK sy-subrc EQ 0.
      SET USER-COMMAND '&NTE'.             " Refresh
    
    ENDFORM.                               " F_TASK_END
    *************** END OF PROGRAM Z_ALV_AUTO_REFRESH *********************
    

    更多Jerry的原创文章,尽在:"汪子熙":

  • 相关阅读:
    代码演示C#各版本新功能
    有关taro的路由的问题
    优秀的基于VUE移动端UI框架合集
    前端开发应该关注的前沿技术
    let与const的区别
    vue2.0 watch里面的 deep和immediate作用
    Flink MiniCluster 启动流程
    Windows把执行命令值赋值给变量
    Ubuntu时间比正常时间多8小时,设置重启以后时间又多8小时解决办法
    Windows下使用命令实现类似awk命令
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/14800919.html
Copyright © 2020-2023  润新知