-
program bcalvc_print.
-
*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
-
* Purpose:
-
* ~~~~~~~~
-
* This program illustrates how the events for print processing
-
* - PRINT_TOP_OF_PAGE
-
* - PRINT_END_OF_PAGE
-
* - PRINT_TOP_OF_LIST
-
* - PRINT_END_OF_LIST
-
*
-
* are handled. The corresponding handler methods control the
-
* appearance of the list printed.
-
*-----------------------------------------------------------------
-
* To check program behavior
-
* ~~~~~~~~~~~~~~~~~~~~~~~~~
-
* Print the list shown (It has got only three pages).
-
* Remark: If you choose "Druckansicht" (preview?!) before printing,
-
* the output for event PRINT_END_OF_PAGE is left out due
-
* to scrolling.
-
* Create a spool entry and preview your printout by calling
-
* TA sp01 to reduce paper output please.
-
*-----------------------------------------------------------------
-
* Essential steps (Search for '§')
-
* ~~~~~~~~~~~~~~~
-
* 1. Define a (local) class for event handling
-
* 2. Define a method for each print event you need.
-
* 3. Implement your event handler methods. Use WRITE to provide output.
-
* 4. Link used print events and event handler methods.
-
* 5. In case of PRINT_END_OF_PAGE, you must set 'reservelns' to
-
* the number of reserved lines at the end of a page.
-
*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
-
-
*********
-
* Predefine a local class for event handling to allow the
-
* declaration of a reference variable.
-
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(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.
-
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
-
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.
阅读(1404) | 评论(0) | 转发(0) |