Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92137
  • 博文数量: 39
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-30 17:39
文章分类

全部博文(39)

文章存档

2011年(1)

2009年(21)

2008年(17)

我的朋友

分类:

2009-03-04 16:41:28

  PROGRAM BCALVC_PRINT.
  CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED.

DATA: OK_CODE LIKE SY-UCOMM,
      G_MAX TYPE I VALUE 100,
      GT_SFLIGHT TYPE TABLE OF SFLIGHT,
      G_REPID LIKE SY-REPID,
      GS_PRINT    TYPE LVC_S_PRNT,
      GS_LAYOUT   TYPE LVC_S_LAYO,
      MYCONTAINER TYPE SCRFNAME VALUE 'BCALVC_EVENT1_CONT1',
* reference to custom container: neccessary to bind ALV Control
      CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      GRID1  TYPE REF TO CL_GUI_ALV_GRID,
      EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.


* § Step 1. Define a (local) class for event handling
****************************************************************
* LOCAL CLASSES: Definition
****************************************************************
*===============================================================
* class c_event_receiver: local class to handle print events...
*    - PRINT_TOP_OF_PAGE (page header)
*    - PRINT_END_OF_PAGE (page footer)
*    - PRINT_TOP_OF_LIST (list header)
*    - PRINT_END_OF_LIST (list footer)
*
* Definition:
* ~~~~~~~~~~~
CLASS LCL_EVENT_RECEIVER DEFINITION.

  PUBLIC SECTION.
* § 2. Define a method for each print event you need.
    METHODS:
    HANDLE_TOP_OF_PAGE
        FOR EVENT PRINT_TOP_OF_PAGE OF CL_GUI_ALV_GRID,

    HANDLE_END_OF_PAGE
        FOR EVENT PRINT_END_OF_PAGE OF CL_GUI_ALV_GRID,

    HANDLE_TOP_OF_LIST
        FOR EVENT PRINT_TOP_OF_LIST OF CL_GUI_ALV_GRID,

    HANDLE_END_OF_LIST
        FOR EVENT PRINT_END_OF_LIST OF CL_GUI_ALV_GRID.

  PRIVATE SECTION.
    DATA: PAGENUM TYPE I.

ENDCLASS.
*
* c_event_receiver (Definition)
*===============================================================


****************************************************************
* LOCAL CLASSES: Implementation
****************************************************************
*===============================================================
* class c_event_receiver (Implementation)
*
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
*§ 3. Implement your event handler methods. Use WRITE to provide output.
  METHOD HANDLE_TOP_OF_PAGE.
    DATA: TABLENAME(30TYPE C.
    PERFORM GET_TABLENAME CHANGING TABLENAME.
    WRITE: /,'Event: PRINT_TOP_OF_PAGE'(001),
             'Table: '(002),TABLENAME.

  ENDMETHOD.                           "handle_top_of_page
*-------------------------------------------
  METHOD HANDLE_END_OF_PAGE.
    DATA: TABLENAME(30TYPE C.

    PERFORM GET_TABLENAME CHANGING TABLENAME.
    ADD 1 TO PAGENUM.
    WRITE: /,'Event: PRINT_END_OF_PAGE'(003),
             TEXT-002,TABLENAME,
             'Number of pages so far: '(004), PAGENUM.

  ENDMETHOD.                           "handle_end_of_page
*-------------------------------------------
  METHOD HANDLE_TOP_OF_LIST.
    DATA: TABLENAME(30TYPE C.
    CLEAR PAGENUM.
    PERFORM GET_TABLENAME CHANGING TABLENAME.
    WRITE: /,'Event: PRINT_TOP_OF_LIST'(005),
             TEXT-002,TABLENAME.

  ENDMETHOD.                           "handle_top_of_list
*-------------------------------------------
  METHOD HANDLE_END_OF_LIST.
    DATA: TABLENAME(30TYPE C.
    PERFORM GET_TABLENAME CHANGING TABLENAME.
    WRITE: /,'Event: PRINT_END_OF_LIST'(006),
             TEXT-002,TABLENAME.

  ENDMETHOD.                           "handle_end_of_list
*-------------------------------------------
ENDCLASS.
*
* c_event_receiver (Implementation)
*===================================================================

START-OF-SELECTION.
  SELECT * FROM SFLIGHT INTO TABLE GT_SFLIGHT UP TO G_MAX ROWS.
*
END-OF-SELECTION.
  G_REPID = SY-REPID.
  CALL SCREEN 100.

*---------------------------------------------------------------------*
*       MODULE PBO OUTPUT                                             *
*---------------------------------------------------------------------*
MODULE PBO OUTPUT.
  SET PF-STATUS 'MAIN100'.
  SET TITLEBAR 'MAIN100'.
  IF CUSTOM_CONTAINER IS INITIAL.
* create a custom container control for our ALV Control
    CREATE OBJECT CUSTOM_CONTAINER
        EXPORTING
            CONTAINER_NAME = MYCONTAINER
        EXCEPTIONS
            CNTL_ERROR = 1
            CNTL_SYSTEM_ERROR = 2
            CREATE_ERROR = 3
            LIFETIME_ERROR = 4
            LIFETIME_DYNPRO_DYNPRO_LINK = 5.
    IF SY-SUBRC NE 0.
* add your handling, for example
      CALL FUNCTION 'POPUP_TO_INFORM'
           EXPORTING
                TITEL = G_REPID
                TXT2  = SY-SUBRC
                TXT1  = 'The control could not be created'(010).
    ENDIF.
* create an instance of alv control
    CREATE OBJECT GRID1
          EXPORTING I_PARENT = CUSTOM_CONTAINER.
*
* Set a titlebar for the grid control
*
    GS_LAYOUT-GRID_TITLE = 'Flights'(100).

* § 5. In case of PRINT_END_OF_PAGE, you must set 'reservelns' to
*      the number of reserved lines at the end of a page.
*
* reserve two lines for the PRINT_END_OF_PAGE event
*
    GS_PRINT-RESERVELNS = 2.


********
* ->Create Object to receive events and link them to handler methods.
* When the ALV Control raises the event for the specified instance
* the corresponding method is automatically called.
*

********

* § 4. Link used print events and event handler methods.
    CREATE OBJECT EVENT_RECEIVER.
    SET HANDLER EVENT_RECEIVER->HANDLE_TOP_OF_LIST FOR GRID1.
    SET HANDLER EVENT_RECEIVER->HANDLE_TOP_OF_PAGE FOR GRID1.
    SET HANDLER EVENT_RECEIVER->HANDLE_END_OF_LIST FOR GRID1.
    SET HANDLER EVENT_RECEIVER->HANDLE_END_OF_PAGE FOR GRID1.
*
  CALL METHOD GRID1->SET_TABLE_FOR_FIRST_DISPLAY
         EXPORTING I_STRUCTURE_NAME = 'SFLIGHT'
                   IS_PRINT         = GS_PRINT
                   IS_LAYOUT        = GS_LAYOUT
         CHANGING  IT_OUTTAB        = GT_SFLIGHT.

  ENDIF.
* Controls are not integrated into the TAB-Order
* Call "set_focus" if you want to make sure that 'the cursor'
* is active in your control.
  CALL METHOD CL_GUI_CONTROL=>SET_FOCUS EXPORTING CONTROL = GRID1.

* Control Framework flushes at the end of PBO automatically!
ENDMODULE.
*---------------------------------------------------------------------*
*       MODULE PAI INPUT                                              *
*---------------------------------------------------------------------*
MODULE PAI INPUT.
  CASE OK_CODE.
    WHEN 'EXIT'.
      PERFORM EXIT_PROGRAM.
  ENDCASE.
  CLEAR OK_CODE.
ENDMODULE.
*---------------------------------------------------------------------*
*       FORM EXIT_PROGRAM                                             *
*---------------------------------------------------------------------*
FORM EXIT_PROGRAM.
  CALL METHOD CUSTOM_CONTAINER->FREE.
  CALL METHOD CL_GUI_CFW=>FLUSH.
  IF SY-SUBRC NE 0.
* add your handling, for example
    CALL FUNCTION 'POPUP_TO_INFORM'
         EXPORTING
              TITEL = G_REPID
              TXT2  = SY-SUBRC
              TXT1  = 'Error in Flush'(009).
  ENDIF.
  LEAVE PROGRAM.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  GET_TABLENAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_TABLENAME  text
*----------------------------------------------------------------------*
FORM GET_TABLENAME CHANGING P_TABLENAME.
  DATA: LT_FIELDCAT TYPE STANDARD TABLE OF LVC_S_FCAT,
        LS_FIELDCAT TYPE LVC_S_FCAT.

  CALL METHOD GRID1->GET_FRONTEND_FIELDCATALOG
                IMPORTING ET_FIELDCATALOG = LT_FIELDCAT.


  CALL METHOD CL_GUI_CFW=>FLUSH.
  IF SY-SUBRC <> 0.
    P_TABLENAME = 'No tablename in fieldcatalog!'(008).
    CALL FUNCTION 'POPUP_TO_INFORM'
         EXPORTING
              TITEL = G_REPID
              TXT2  = P_TABLENAME
              TXT1  = 'Error in Flush'(011).
  ELSE.
    READ TABLE LT_FIELDCAT INDEX 1 INTO LS_FIELDCAT.
    P_TABLENAME = LS_FIELDCAT-REF_TABLE.
  ENDIF.

ENDFORM.                               " GET_TABLENAME
阅读(822) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~