METHOD build_alv.
*<-------------------------------------------
DATA: lr_column_1 TYPE REF TO cl_salv_column_list,
lr_column_2 TYPE REF TO cl_salv_column_list.
DATA: lo_events TYPE REF TO cl_salv_events_table.
* ------------------
* Create ALV screens
TRY.
* Splitter - it is neccessary to specify the default_screen as parent
gr_splitter = NEW #( parent = cl_gui_container=>default_screen
no_autodef_progid_dynnr = abap_true
rows = 2
columns = 1 ).
* Container 1 for header
gr_container_1 = gr_splitter->get_container( row = 1
column = 1 ).
* Container 2 for detail
gr_container_2 = gr_splitter->get_container( row = 2
column = 1 ).
*<< ALV1 - gt_alv_1 is the table with the data
cl_salv_table=>factory( EXPORTING r_container = gr_container_1
IMPORTING r_salv_table = gr_salv_1
CHANGING t_table = gt_alv_1 ).
* Set ALV functions - should you wish to include any
gr_salv_func_1 = gr_salv_1->get_functions( ).
gr_salv_func_1->set_all( abap_true ).
* Set display settings as usual
DATA(lr_display_1) = gr_salv_1->get_display_settings( ).
* Selection - set as usual
gr_salv_1->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>multiple ).
* Layout - set as usual
DATA(ls_key_1) = VALUE salv_s_layout_key( report = sy-cprog
handle = '0001' ).
DATA(lr_layout_1) = gr_salv_1->get_layout( ).
lr_layout_1->set_key( ls_key_1 ).
*<< ALV_2 - details - gt_alv_2 is the table with data for the second ALV
cl_salv_table=>factory( EXPORTING r_container = gr_container_2
IMPORTING r_salv_table = gr_salv_2
CHANGING t_table = gt_alv_2 ).
* ALV functions
gr_salv_2->get_functions( )->set_all( abap_true ).
* Display settings - set as usual
DATA(lr_display_2) = gr_salv_2->get_display_settings( ).
* Layout - set as usual
DATA(ls_key_2) = VALUE salv_s_layout_key( report = sy-cprog
handle = '0002' ).
* Set columns
* Set hotspot on particular column
DATA(lr_columns_1) = gr_salv_1->get_columns( ).
lr_columns_1->set_optimize( abap_true ).
lr_column_1 ?= lr_columns_1->get_column( 'TANUM' ).
lr_column_1->set_cell_type( if_salv_c_cell_type=>hotspot ).
* ALV events - the implementation of the on link click event follows further in the post
lo_events = gr_salv_1->get_event( ).
SET HANDLER alv_1_on_link_click FOR lo_events.
*<< Display ALV_1
gr_salv_1->display( ).
*<< Display ALV_2,
gr_salv_2->display( ).
*<< Have to be to display ALV in full screen mode
WRITE: space.
CATCH cx_salv_msg cx_salv_not_found cx_salv_data_error cx_salv_access_error INTO DATA(lx_alv).
DATA(lv_message) = lx_alv->get_text( ).
raise_sy( ).
ENDTRY.
ENDMETHOD.
METHOD alv_1_on_link_click.
*<-------------------------------------------
DATA: ls_alv_1 LIKE LINE OF gt_alv_1,
ls_alv_2 LIKE LINE OF gt_alv_2,
ls_data LIKE LINE OF go-data_t,
ls_tai LIKE LINE OF ls_data-tai_t.
* -------------------
*<< Get the data of the selected row and select data for second ALV accordingly to your needs
READ TABLE gt_alv_1 INTO ls_alv_1 INDEX row.
CHECK sy-subrc = 0.
READ TABLE go-data_t INTO ls_data
WITH KEY key_s-tanum = ls_alv_1-tanum.
CHECK sy-subrc = 0.
REFRESH gt_alv_2.
LOOP AT ls_data-tai_t INTO ls_tai.
MOVE-CORRESPONDING ls_tai TO ls_alv_2.
APPEND ls_alv_2 TO gt_alv_2.
ENDLOOP.
gr_salv_1->refresh( ).
* Second ALV will refresh its data based on the changed data table
gr_salv_2->refresh( ).
ENDMETHOD.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
8 | |
6 | |
5 | |
4 | |
4 | |
4 | |
4 | |
3 | |
2 | |
2 |