ABAP实现ALV表头的DEMO

来源:互联网 发布:中讯软件集团 编辑:程序博客网 时间:2024/05/21 06:15
*&---------------------------------------------------------------------*
*& Report  Z_ALV_DEMO
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*


REPORT  Z_ALV_DEMO NO STANDARD PAGE HEADING.






TABLES ZEMP_TEST.


DATA: IT_ZEMP TYPE STANDARD TABLE OF ZEMP_TEST,
      IW_ZEMP TYPE ZEMP_TEST.




TYPE-POOLS : SLIS.
DATA :
       IT_EVENT TYPE SLIS_T_EVENT, "不能有表头,否则会RUNTIME ERROR
       IT_LISTHEADER TYPE SLIS_T_LISTHEADER.


PARAMETERS P_DEPT TYPE ZEMP_TEST-EDEPT.


START-OF-SELECTION.


  PERFORM FRM_GET_EVENT.


  PERFORM FRM_GET_DATA.


  PERFORM FRM_COMMENT_BUILD.


  PERFORM FRM_ALV_DISPLAY.


*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .


  SELECT *
    FROM ZEMP_TEST
    INTO TABLE IT_ZEMP
   WHERE EDEPT = P_DEPT.


  IF SY-SUBRC <> 0.
    MESSAGE S001(00) WITH '不存在符合条件的数据' DISPLAY LIKE 'E'.
    STOP.
  ENDIF.


ENDFORM.                    " FRM_GET_DATA








*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_ALV_DISPLAY .
  DATA LW_REPID TYPE SY-REPID.
  LW_REPID = SY-REPID.


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
*     I_INTERFACE_CHECK                 = ' '
*     I_BYPASSING_BUFFER                = ' '
*     I_BUFFER_ACTIVE                   = ' '
     I_CALLBACK_PROGRAM                = LW_REPID
*     I_CALLBACK_PF_STATUS_SET          = ' '
*     I_CALLBACK_USER_COMMAND           = ' '
*     I_CALLBACK_TOP_OF_PAGE            = ' '
*     I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*     I_CALLBACK_HTML_END_OF_LIST       = ' '
     I_STRUCTURE_NAME                  = 'ZEMP_TEST'
*     I_BACKGROUND_ID                   = ' '
     I_GRID_TITLE                      = 'ALV DEMO'
*     I_GRID_SETTINGS                   =
*     IS_LAYOUT                         =
*     IT_FIELDCAT                       =
*     IT_EXCLUDING                      =
*     IT_SPECIAL_GROUPS                 =
*     IT_SORT                           =
*     IT_FILTER                         =
*     IS_SEL_HIDE                       =
*     I_DEFAULT                         = 'X'
*     I_SAVE                            = ' '
*     IS_VARIANT                        =
     IT_EVENTS                         = IT_EVENT
*     IT_EVENT_EXIT                     =
*     IS_PRINT                          =
*     IS_REPREP_ID                      =
*     I_SCREEN_START_COLUMN             = 0
*     I_SCREEN_START_LINE               = 0
*     I_SCREEN_END_COLUMN               = 0
*     I_SCREEN_END_LINE                 = 0
*     I_HTML_HEIGHT_TOP                 = 0
*     I_HTML_HEIGHT_END                 = 0
*     IT_ALV_GRAPHICS                   =
*     IT_HYPERLINK                      =
*     IT_ADD_FIELDCAT                   =
*     IT_EXCEPT_QINFO                   =
*     IR_SALV_FULLSCREEN_ADAPTER        =
*   IMPORTING
*     E_EXIT_CAUSED_BY_CALLER           =
*     ES_EXIT_CAUSED_BY_USER            =
    TABLES
      T_OUTTAB                          = IT_ZEMP
*   EXCEPTIONS
*     PROGRAM_ERROR                     = 1
*     OTHERS                            = 2
            .
  IF SY-SUBRC <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


ENDFORM.                    " FRM_ALV_DISPLAY
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_EVENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_GET_EVENT .


* EVENTS
*SLIS_EV_ITEM_DATA_EXPAND  TYPE SLIS_FORMNAME VALUE 'ITEM_DATA_EXPAND',
*SLIS_EV_REPREP_SEL_MODIFY TYPE SLIS_FORMNAME VALUE 'REPREP_SEL_MODIFY',
*SLIS_EV_CALLER_EXIT_AT_START TYPE SLIS_FORMNAME VALUE 'CALLER_EXIT',
*SLIS_EV_USER_COMMAND       TYPE SLIS_FORMNAME VALUE 'USER_COMMAND',
*SLIS_EV_TOP_OF_PAGE        TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE',
*SLIS_EV_DATA_CHANGED       TYPE SLIS_FORMNAME VALUE 'DATA_CHANGED',
*SLIS_EV_TOP_OF_COVERPAGE  TYPE SLIS_FORMNAME VALUE 'TOP_OF_COVERPAGE',
*SLIS_EV_END_OF_COVERPAGE  TYPE SLIS_FORMNAME VALUE 'END_OF_COVERPAGE',
*SLIS_EV_FOREIGN_TOP_OF_PAGE TYPE SLIS_FORMNAME
*                                       VALUE 'FOREIGN_TOP_OF_PAGE',
*SLIS_EV_FOREIGN_END_OF_PAGE TYPE SLIS_FORMNAME
*                                       VALUE 'FOREIGN_END_OF_PAGE',
*SLIS_EV_PF_STATUS_SET      TYPE SLIS_FORMNAME VALUE 'PF_STATUS_SET',
*SLIS_EV_LIST_MODIFY        TYPE SLIS_FORMNAME VALUE 'LIST_MODIFY',
*SLIS_EV_TOP_OF_LIST        TYPE SLIS_FORMNAME VALUE 'TOP_OF_LIST',
*SLIS_EV_END_OF_PAGE        TYPE SLIS_FORMNAME VALUE 'END_OF_PAGE',
*SLIS_EV_END_OF_LIST        TYPE SLIS_FORMNAME VALUE 'END_OF_LIST',
*SLIS_EV_AFTER_LINE_OUTPUT TYPE SLIS_FORMNAME VALUE 'AFTER_LINE_OUTPUT',
*SLIS_EV_BEFORE_LINE_OUTPUT TYPE SLIS_FORMNAME VALUE
*                                                 'BEFORE_LINE_OUTPUT',
*SLIS_EV_SUBTOTAL_TEXT      TYPE SLIS_FORMNAME VALUE 'SUBTOTAL_TEXT',
*SLIS_EV_GROUPLEVEL_CHANGE  TYPE SLIS_FORMNAME VALUE
*                                                  'GROUPLEVEL_CHANGE',
*SLIS_EV_CONTEXT_MENU       TYPE SLIS_FORMNAME VALUE 'CONTEXT_MENU'.


  DATA: FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'FRM_TOP_OF_PAGE'.


  DATA L_EVENTS TYPE SLIS_ALV_EVENT.


  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      I_LIST_TYPE     = 0
    IMPORTING
      ET_EVENTS       = IT_EVENT
    EXCEPTIONS
      LIST_TYPE_WRONG = 1
      OTHERS          = 2.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY
        NUMBER SY-MSGNO
          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
* 在事件(字段名:NAME)为"TOP_OF_PAGE"的行中
*将FORM名(字段名:FORM)设为"FRM_TOP_OF_PAGE"
* 这样,系统就会自动PERFORM FRM_TOP_OF_PAGE.
  CLEAR L_EVENTS.
  READ TABLE IT_EVENT
        WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
        INTO L_EVENTS.


  IF SY-SUBRC = 0.
    MOVE FORMNAME_TOP_OF_PAGE TO L_EVENTS-FORM.
    MODIFY IT_EVENT FROM L_EVENTS INDEX SY-TABIX.
  ELSE.
    L_EVENTS-FORM = FORMNAME_TOP_OF_PAGE.
    L_EVENTS-NAME = FORMNAME_TOP_OF_PAGE.
    APPEND L_EVENTS TO IT_EVENT.
  ENDIF.


ENDFORM.                    " FRM_GET_EVENT


*&---------------------------------------------------------------------*
*&      Form  FRM_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*       表头
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM  FRM_TOP_OF_PAGE.
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY       = IT_LISTHEADER
      I_LOGO                   = 'ENJOYSAP_LOGO'
*     I_END_OF_LIST_GRID       =
*     I_ALV_FORM               =
      .
* "TCODE:OAOR,CLASS
* NAME:PICTURES,CLASS TYPE :OT,执行,可以看到所有的PICTURE


ENDFORM.                    "FRM_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*&      Form  FRM_COMMENT_BUILD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_COMMENT_BUILD .
  DATA LW_LISTHEADER TYPE SLIS_LISTHEADER.


  CLEAR: IT_LISTHEADER, LW_LISTHEADER.


  LW_LISTHEADER-TYP  = 'H'.
  LW_LISTHEADER-INFO = 'ALV DEMO'.
  APPEND LW_LISTHEADER TO IT_LISTHEADER.


  CLEAR LW_LISTHEADER.
  LW_LISTHEADER-TYP  = 'S'.
  LW_LISTHEADER-KEY  = '用户:'.
  LW_LISTHEADER-INFO = SY-UNAME.
  APPEND LW_LISTHEADER TO IT_LISTHEADER.


  CLEAR LW_LISTHEADER.
  LW_LISTHEADER-TYP  = 'S'.
  LW_LISTHEADER-KEY  = '日期:'.
  LW_LISTHEADER-INFO = SY-DATUM.
  APPEND LW_LISTHEADER TO IT_LISTHEADER.


ENDFORM.                    " FRM_COMMENT_BUILD