版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
执行report,输入要查看的process type:
得到执行结果:
source code:
PROGRAM bcalvc_print.
PARAMETERS: type TYPE crmt_process_type OBLIGATORY DEFAULT 'OPSM'.
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',
lt_callbacks_hdr TYPE crmt_event_callbacks,
lt_out TYPE STANDARD TABLE OF crm_event_callbacks,
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.
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.
CLASS lcl_event_receiver IMPLEMENTATION.
*§ 3. Implement your event handler methods. Use WRITE to provide output.
METHOD handle_top_of_page.
DATA: tablename(30) TYPE 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(30) TYPE 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(30) TYPE 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(30) TYPE 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.
CALL FUNCTION 'CRM_EVENT_FILTER_PROC_TYPE_OW'
EXPORTING
iv_proc_type = type
IMPORTING
et_callbacks_hdr = lt_callbacks_hdr.
lt_out = lt_callbacks_hdr.
*
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).
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 = 'CRM_EVENT_CALLBACKS'
is_print = gs_print
is_layout = gs_layout
CHANGING
it_outtab = lt_out.
ENDIF.
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