技术开发 频道

ABAP实例:在SAP中设计自动刷新的报表代码

【IT168 技术文章】

    REPORT z_alv_auto_refresh.
    
*>*********************************************************************
    
* This report displays User's info (SM04) using the FM :              *
    * REUSE_ALV_LIST_DISPLAY                                              *
    
* The list is auto-refreshed (refresh time : 5 seconds)               *
    
*---------------------------------------------------------------------*

    TYPE
-POOLS: slis.                      " ALV Global Types

    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              
= 5        " 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 *********************
0
相关文章