Today, I want to share with you on how to handle oop alv using events specifically if front-end data has been changed. I.e sorted, deleted or filtered. On the following scenario below, I am going to present to you my own approach on how to deal with issues regarding alv front-end changes.
Steps:
1. Create a wrapper class for " set_table_for_first_display " method of cl_gui_alv_grid to handle "changing" internal table - meaning every time there are changes on the alv front-end, we will be able to capture and to read the appropriate record or data being clicked (hotpost_click event), changed (user_command event), etc.
2. Create a constructor (class' method called during creation of an object - typically for initialization of attributes) for your wrapper class for us to be able to send the cl_gui_alv_grid object coming from our main program. Our main program should act as a caller for the wrapper class by passing the appropriate parameters for "set_table_for_first_display_ method as shown below:
variant-report = sy-repid. "to save the alv layout
variant-username = sy-uname. "to save the alv layout
variant-variant = alv_var. "layout name
CREATE OBJECT obj_alv_pir01
EXPORTING
i_object = grid1
.
CALL METHOD obj_alv_pir01->set_table_for_first_display
EXPORTING
is_layout = wa_alv_layout
is_variant = variant "to show the alv layout button
i_save = 'A' "to show the alv layout button
CHANGING
it_outtab = tb_final
it_fieldcatalog = tb_fieldcat
3. In our wrapper class, declare a static attribute for our internal table that will handle the it_outtab of "set_table_for_first_display" method. Note: parameter "changing" means that changes of an it_table inside the called method will reflect also to the it_table of the calling program.
4. Inside our event, let us take event USER_COMMAND, we should do the below code in ordfer for us to capture the appropriate line of records being selected from the ALV front-end. "NO matter what happens to the front-end data will also reflect to our static table as shown below":
DATA lt_selected_rows TYPE lvc_t_roid .
DATA ls_selected_row TYPE lvc_s_roid .
CALL METHOD grid_object->get_selected_rows
IMPORTING
et_row_no = lt_selected_rows .
READ TABLE lt_selected_rows INTO ls_selected_row INDEX 1 .
IF sy-subrc ne 0 .
MESSAGE s000(su) WITH 'Select a row!'(203) .
EXIT.
ENDIF .
READ TABLE ZCL_ALV_PIR01=>tb_final INDEX ls_selected_row-row_id INTO l_wa_final.
That's it! If you have any clarification, please don't hesitate to post a comment.
Have a nice day!
No comments:
Post a Comment