Login

Login to view more content!!!





Lost Password?
No account yet? Register

Registered Access

Related Items

Home arrow Sample Code arrow ABAP OO arrow ABAP OO Example - Display table and show details
ABAP OO Example - Display table and show details PDF Print E-mail
User Rating: / 1
PoorBest 
Written by Anon.   
Monday, 19 March 2007

This tiny program just displays the T001 table using grid control and all its default features.

    Events:
  • print events (see above)
  • double_click
  • toolbar
  • user_command
  • context_menu_request
    Used object:
  • cl_gui_alv_grid
  • cl_gui_splitter_container
  • cl_gui_container
  • cl_gui_dialogbox_container
  • cl_alv_event_toolbar_set (in event handler)
  • cl_ctmenu (in event handler)

  GUI Status 'SCREEN_100' has 3 functions: BACK, EXIT and CANCEL of Type 'E' (Exit command), assigned to standard buttons: F3 ShF3 F12.
Screen 100 is empty:

PROCESS BEFORE OUTPUT.
MODULE status_0100.
PROCESS AFTER INPUT.
MODULE cancel AT EXIT-COMMAND.

 

program z.
* The context menu for the 2nd column does the same
* as "Plants List" button
* Context menus for other columns remain unchanged.

*---------------------------------------------------------------------*
* Constants *
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
* Types *
*---------------------------------------------------------------------*
class lcl_event_receiver definition deferred.
class cl_gui_cfw definition load.
*---------------------------------------------------------------------*
* Data *
*---------------------------------------------------------------------*
data: it_t001 type table of t001,
it_t001k type table of t001k.
*---------------------------------------------------------------------*
* Classes *
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
* Definitions *
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
class screen_init definition create private.
public section.
class-methods init_screen returning value(this)
type ref to screen_init.
methods: constructor,
show_details importing value(p_bukrs)
type t001-bukrs,
get_selected changing p_rows type lvc_t_row,
get_current_cell exporting p_col type i.
private section.
data: "---- main list
splitter type ref to cl_gui_splitter_container,
grid type ref to cl_gui_alv_grid,
gs_print type lvc_s_prnt,
gs_layout type lvc_s_layo,
"---- detail list in an amodal window
grid2 type ref to cl_gui_alv_grid,
gs_print2 type lvc_s_prnt,
gs_layout2 type lvc_s_layo,
dialogbox type ref to cl_gui_dialogbox_container,
e_handler type ref to lcl_event_receiver.
methods fill_grid.
endclass.
*---------------------------------------------------------------------*
class lcl_event_receiver definition.
public section.
* methods for double click.
methods: handle_double_click for event double_click
of cl_gui_alv_grid
importing e_row e_column,
handle_close for event close
of cl_gui_dialogbox_container
importing sender,
* methods for additional button on toolbar.
* add own button to toolbar.
handle_toolbar for event toolbar of cl_gui_alv_grid
importing e_object e_interactive,
* handle user command when user press additional button.
handle_user_command for event user_command
of cl_gui_alv_grid
importing e_ucomm,
* method for context menu.
handle_context_menu for event context_menu_request
of cl_gui_alv_grid
importing e_object,
* methods for print events.
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.
*---------------------------------------------------------------------*

*---------------------------------------------------------------------*
* Data *
*---------------------------------------------------------------------*
data this_screen type ref to screen_init.

*---------------------------------------------------------------------*
* Implementations *
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
class screen_init implementation.
*-------------------------------*
method init_screen.
data screen type ref to screen_init.
create object screen.
this = screen.
endmethod.
*-------------------------------*
method constructor.
data container type ref to cl_gui_container.
create object splitter
exporting parent = cl_gui_container=>screen0
rows = 1
columns = 1.
call method splitter->set_border
exporting border = cl_gui_cfw=>false.
call method splitter->set_column_mode
exporting mode = splitter->mode_absolute.
container = splitter->get_container( row = 1 column = 1 ).

create object grid exporting i_parent = container.
gs_layout-grid_title = 'Companies table T001.'.
* reserve two lines for the print_end_of_page event
gs_print-reservelns = 2.

call method me->fill_grid.

create object e_handler.
set handler e_handler->handle_toolbar for grid.
set handler e_handler->handle_user_command for grid.
set handler e_handler->handle_context_menu for grid.
set handler e_handler->handle_double_click for grid.
set handler e_handler->handle_top_of_list for grid.
set handler e_handler->handle_top_of_page for grid.
set handler e_handler->handle_end_of_list for grid.
set handler e_handler->handle_end_of_page for grid.
* call method 'set_toolbar_interactive' to raise event toolbar.
call method grid->set_toolbar_interactive.
endmethod.
*-------------------------------*
method show_details.
data grid_title type lvc_title.
concatenate 'Plants for' p_bukrs into grid_title
separated by space.
* create dialogbox to show detail list (if not already existent)
if dialogbox is initial.
gs_layout2-grid_title = grid_title.
* reserve two lines for the print_end_of_page event
gs_print-reservelns = 2.
* create dialogbox container as dynpro-instance
* when the user switches to another screen, it is
* destroyed by lifetime mangagement of cfw
create object dialogbox
exporting
top = 50
left = 150
lifetime = cntl_lifetime_dynpro
caption = gs_layout2-grid_title
width = 800
height = 200.
create object grid2
exporting i_parent = dialogbox.
* register abap oo event 'close'. it is not necessary to register this
* event at the frontend (this is done during creation).
set handler e_handler->handle_close for dialogbox.
call method grid2->set_table_for_first_display
exporting i_structure_name = 'T001K'
is_print = gs_print2
is_layout = gs_layout2
changing it_outtab = it_t001k.
call method cl_gui_control=>set_focus exporting control = grid2.
else.
call method:
dialogbox->set_caption exporting caption = grid_title,
dialogbox->set_visible exporting visible = 'x',
grid2->set_gridtitle exporting i_gridtitle = grid_title,
grid2->refresh_table_display.
endif.
endmethod.
*-------------------------------*
method fill_grid.
select * from t001 into table it_t001.
call method grid->set_table_for_first_display
exporting i_structure_name = 'T001'
is_print = gs_print
is_layout = gs_layout
changing it_outtab = it_t001.
endmethod.
*-------------------------------*
method get_selected.
call method grid->get_selected_rows
importing et_index_rows = p_rows.
endmethod.
*-------------------------------*
method get_current_cell.
call method grid->get_current_cell importing e_col = p_col.
endmethod.
endclass.
*---------------------------------------------------------------------*
class lcl_event_receiver implementation.
* event handler methods for toolbar event.
*-------------------------------*
method handle_toolbar.
data: ls_toolbar type stb_button.
*....................................................................
* e_object of event toolbar is of type ref to cl_alv_event_toolbar_set.
* this class has got one attribute, namely mt_toolbar, which
* is a table of type ttb_button. one line of this table is
* defined by the structure stb_button (see data declaration above).
* a remark to the flag e_interactive:
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* 'e_interactive' is set, if this event is raised due to
* the call of 'set_toolbar_interactive' by the user.
* you can distinguish this way if the event was raised
* by yourself or by alv
* (e.g. in method 'refresh_table_display').
* an application of this feature is still unknown... :-)

* append a separator to normal toolbar
clear ls_toolbar.
move 3 to ls_toolbar-butn_type.
append ls_toolbar to e_object->mt_toolbar.
* append an icon to show booking table
clear ls_toolbar.
move 'PLANTS' to ls_toolbar-function.
move '@A8@' to ls_toolbar-icon. "ICON_PLANT
move 'show plants list' to ls_toolbar-quickinfo.
move 'Plants for the Company' to ls_toolbar-text.
move ' ' to ls_toolbar-disabled.
append ls_toolbar to e_object->mt_toolbar.
endmethod.
* event handler methods for user_command event.
*-------------------------------*
method handle_user_command.
data: wa_t001 like line of it_t001,
wa_t001k like line of it_t001k,
lt_rows type lvc_t_row,
ls_selected_line type lvc_s_row.
case e_ucomm.
when 'PLANTS' "from additional button
or 'MPLANTS'. "from context menu
call method this_screen->get_selected changing p_rows = lt_rows.
call method cl_gui_cfw=>flush.
loop at lt_rows into ls_selected_line.
read table it_t001 index ls_selected_line-index into wa_t001.
select * from t001k into table it_t001k
where bukrs = wa_t001-bukrs.
call method this_screen->show_details
exporting p_bukrs = wa_t001-bukrs.
endloop.
endcase.
endmethod.
* event handler methods for context_menu_request event.
*-------------------------------*
method handle_context_menu.
data: lt_std_fcodes type ui_functions,
lt_std_fc_get type ui_funcattr,
std_fc type uiattentry,
lt_own_fcodes type ui_functions,
li_sel_col type i. "selected column
*....................................................................
* e_object of event context_menu_request is of type ref to cl_ctmenu.

* query which column was selected.
call method this_screen->get_current_cell
importing p_col = li_sel_col.
call method cl_gui_cfw=>flush.
check sy-subrc = 0.

* change menu only for 2nd column
check li_sel_col = 2.

* add new function code
append 'MPLANTS' to lt_own_fcodes.
call method e_object->add_function exporting
fcode = 'MPLANTS'
text = 'Display Plants'.

* build table for standard functions
call method e_object->get_functions
importing fcodes = lt_std_fc_get.
loop at lt_std_fc_get into std_fc.
append std_fc-fcode to lt_std_fcodes.
endloop.

* disable all standard functions and show new function
call method: e_object->disable_functions
exporting fcodes = lt_std_fcodes,
e_object->enable_functions
exporting fcodes = lt_own_fcodes,
cl_gui_cfw=>flush.
endmethod.
* event handler methods for dbl-click event.
*-------------------------------*
method handle_double_click.
data: wa_t001 like line of it_t001,
wa_t001k like line of it_t001k.
read table it_t001 index e_row-index into wa_t001.
select * from t001k into table it_t001k
where bukrs = wa_t001-bukrs.
call method this_screen->show_details
exporting p_bukrs = wa_t001-bukrs.
endmethod.
*-------------------------------*
method handle_close.
* set dialogbox invisible
* (the dialogbox is destroyed outomatically when the user
* switches to another dynpro).
call method sender->set_visible exporting visible = space.
* in this example closing the dialogbox leads
* to make it invisible. it is also conceivable to destroy it
* and recreate it if the user doubleclicks a line again.
* displaying a great amount of data has a greater impact on performance.
endmethod.

*------------------------------------------------------------
* event handler methods for print events. use write to provide output.
*-------------------------------*
method handle_top_of_page.
add 1 to pagenum.
write: / 'event: print_top_of_page #', pagenum,
' program:', sy-cprog.
call method cl_gui_cfw=>flush.
endmethod.
*-------------------------------*
method handle_end_of_page.
write: / 'event: print_end_of_page #', pagenum,
' program:', sy-cprog.
call method cl_gui_cfw=>flush.
endmethod.
*-------------------------------*
method handle_top_of_list.
write: / 'event: print_top_of_list, program:', sy-cprog.
call method cl_gui_cfw=>flush.
endmethod.
*-------------------------------*
method handle_end_of_list.
write: / 'event: print_end_of_list, program:', sy-cprog.
call method cl_gui_cfw=>flush.
endmethod.
endclass.
*---------------------------------------------------------------------*

*---------------------------------------------------------------------*
* Program execution *
*---------------------------------------------------------------------*
load-of-program.
call screen 100.

*---------------------------------------------------------------------*
* Dialog Modules PBO *
*---------------------------------------------------------------------*
module status_0100 output.
set pf-status 'SCREEN_100'.
set titlebar 'TIT_100'.
this_screen = screen_init=>init_screen( ).
endmodule.
*---------------------------------------------------------------------*
* Dialog Modules PAI *
*---------------------------------------------------------------------*
module cancel input.
leave program.
endmodule.
*----------------------------------------------------------------------*

Related Items:

 
< Prev   Next >

Google Search

Google Ads