*&---------------------------------------------------------------------* *& Include ZABAPGIT_POPUPS *&---------------------------------------------------------------------* "! various popups, static methods, no class/object state CLASS lcl_popups DEFINITION FINAL. PUBLIC SECTION. TYPES: BEGIN OF ty_popup, url TYPE string, package TYPE devclass, branch_name TYPE string, cancel TYPE abap_bool, END OF ty_popup. CONSTANTS c_new_branch_label TYPE string VALUE '+ create new ...' ##NO_TEXT. CLASS-METHODS: popup_package_export EXPORTING ev_package TYPE devclass ev_folder_logic TYPE string RAISING lcx_exception, popup_object RETURNING VALUE(rs_tadir) TYPE tadir RAISING lcx_exception, create_branch_popup EXPORTING ev_name TYPE string ev_cancel TYPE abap_bool RAISING lcx_exception, run_page_class_popup EXPORTING ev_name TYPE string ev_cancel TYPE abap_bool RAISING lcx_exception, repo_new_offline RETURNING VALUE(rs_popup) TYPE ty_popup RAISING lcx_exception, branch_list_popup IMPORTING iv_url TYPE string iv_default_branch TYPE string OPTIONAL iv_show_new_option TYPE abap_bool OPTIONAL RETURNING VALUE(rs_branch) TYPE lcl_git_branch_list=>ty_git_branch RAISING lcx_exception, repo_popup IMPORTING iv_url TYPE string iv_package TYPE devclass OPTIONAL iv_branch TYPE string DEFAULT 'refs/heads/master' iv_freeze_package TYPE abap_bool OPTIONAL iv_freeze_url TYPE abap_bool OPTIONAL iv_title TYPE clike DEFAULT 'Clone repository ...' RETURNING VALUE(rs_popup) TYPE ty_popup RAISING lcx_exception ##NO_TEXT, popup_to_confirm IMPORTING titlebar TYPE clike text_question TYPE clike text_button_1 TYPE clike DEFAULT 'Yes' icon_button_1 TYPE icon-name DEFAULT space text_button_2 TYPE clike DEFAULT 'No' icon_button_2 TYPE icon-name DEFAULT space default_button TYPE char1 DEFAULT '1' display_cancel_button TYPE char1 DEFAULT abap_true RETURNING VALUE(rv_answer) TYPE char1 RAISING lcx_exception, popup_to_inform IMPORTING titlebar TYPE clike text_message TYPE clike RAISING lcx_exception, popup_to_create_package EXPORTING es_package_data TYPE scompkdtln ev_create TYPE boolean RAISING lcx_exception, popup_to_create_transp_branch IMPORTING it_transport_headers TYPE trwbo_request_headers RETURNING VALUE(rs_transport_branch) TYPE lif_defs=>ty_transport_to_branch RAISING lcx_exception lcx_cancel, popup_to_select_transports RETURNING VALUE(rt_trkorr) TYPE trwbo_request_headers, popup_select_obj_overwrite IMPORTING it_list TYPE lif_defs=>ty_results_tt RETURNING VALUE(rt_list) TYPE lif_defs=>ty_results_tt RAISING lcx_exception. PRIVATE SECTION. TYPES: ty_sval_tt TYPE STANDARD TABLE OF sval WITH DEFAULT KEY. TYPES: BEGIN OF t_popup_select_list, selected TYPE flag. INCLUDE TYPE lif_defs=>ty_result. TYPES END OF t_popup_select_list. TYPES: t_popup_select_list_tt TYPE STANDARD TABLE OF t_popup_select_list WITH DEFAULT KEY. CLASS-DATA: mtr_select_list TYPE REF TO t_popup_select_list_tt, mo_select_list_popup TYPE REF TO cl_salv_table. CLASS-METHODS: add_field IMPORTING iv_tabname TYPE sval-tabname iv_fieldname TYPE sval-fieldname iv_fieldtext TYPE sval-fieldtext iv_value TYPE clike DEFAULT '' iv_field_attr TYPE sval-field_attr DEFAULT '' CHANGING ct_fields TYPE ty_sval_tt, on_select_list_link_click FOR EVENT link_click OF cl_salv_events_table IMPORTING !row !column, on_select_list_function_click FOR EVENT added_function OF cl_salv_events_table IMPORTING !e_salv_function. ENDCLASS. CLASS lcl_popups IMPLEMENTATION. METHOD add_field. FIELD-SYMBOLS: LIKE LINE OF ct_fields. APPEND INITIAL LINE TO ct_fields ASSIGNING . -tabname = iv_tabname. -fieldname = iv_fieldname. -fieldtext = iv_fieldtext. -value = iv_value. -field_attr = iv_field_attr. ENDMETHOD. METHOD popup_object. DATA: lv_returncode TYPE c, lt_fields TYPE TABLE OF sval. FIELD-SYMBOLS: LIKE LINE OF lt_fields. add_field( EXPORTING iv_tabname = 'TADIR' iv_fieldname = 'OBJECT' iv_fieldtext = 'Type' CHANGING ct_fields = lt_fields ). add_field( EXPORTING iv_tabname = 'TADIR' iv_fieldname = 'OBJ_NAME' iv_fieldtext = 'Name' CHANGING ct_fields = lt_fields ). CALL FUNCTION 'POPUP_GET_VALUES' EXPORTING no_value_check = abap_true popup_title = 'Object' "#EC NOTEXT IMPORTING returncode = lv_returncode TABLES fields = lt_fields EXCEPTIONS error_in_fields = 1 OTHERS = 2. IF sy-subrc <> 0. lcx_exception=>raise( 'Error from POPUP_GET_VALUES' ). ENDIF. IF lv_returncode = 'A'. RETURN. ENDIF. READ TABLE lt_fields INDEX 1 ASSIGNING . ASSERT sy-subrc = 0. TRANSLATE -value TO UPPER CASE. rs_tadir-object = -value. READ TABLE lt_fields INDEX 2 ASSIGNING . ASSERT sy-subrc = 0. TRANSLATE -value TO UPPER CASE. rs_tadir-obj_name = -value. rs_tadir = lcl_tadir=>read_single( iv_object = rs_tadir-object iv_obj_name = rs_tadir-obj_name ). ENDMETHOD. METHOD popup_package_export. DATA: lv_returncode TYPE c, lt_fields TYPE TABLE OF sval. FIELD-SYMBOLS: LIKE LINE OF lt_fields. add_field( EXPORTING iv_tabname = 'TDEVC' iv_fieldname = 'DEVCLASS' iv_fieldtext = 'Package' CHANGING ct_fields = lt_fields ). add_field( EXPORTING iv_tabname = 'TDEVC' iv_fieldname = 'INTSYS' iv_fieldtext = 'Folder logic' iv_value = 'PREFIX' CHANGING ct_fields = lt_fields ). CALL FUNCTION 'POPUP_GET_VALUES' EXPORTING no_value_check = abap_true popup_title = 'Export package' "#EC NOTEXT IMPORTING returncode = lv_returncode TABLES fields = lt_fields EXCEPTIONS error_in_fields = 1 OTHERS = 2. IF sy-subrc <> 0. lcx_exception=>raise( 'Error from POPUP_GET_VALUES' ). ENDIF. IF lv_returncode = 'A'. RETURN. ENDIF. READ TABLE lt_fields INDEX 1 ASSIGNING . ASSERT sy-subrc = 0. TRANSLATE -value TO UPPER CASE. ev_package = -value. READ TABLE lt_fields INDEX 2 ASSIGNING . ASSERT sy-subrc = 0. TRANSLATE -value TO UPPER CASE. ev_folder_logic = -value. ENDMETHOD. "popup_package_export METHOD create_branch_popup. DATA: lv_answer TYPE c LENGTH 1, lt_fields TYPE TABLE OF sval. FIELD-SYMBOLS: LIKE LINE OF lt_fields. CLEAR: ev_name, ev_cancel. add_field( EXPORTING iv_tabname = 'TEXTL' iv_fieldname = 'LINE' iv_fieldtext = 'Name' iv_value = 'new-branch-name' CHANGING ct_fields = lt_fields ). CALL FUNCTION 'POPUP_GET_VALUES' EXPORTING popup_title = 'Create branch' IMPORTING returncode = lv_answer TABLES fields = lt_fields EXCEPTIONS error_in_fields = 1 OTHERS = 2 ##NO_TEXT. IF sy-subrc <> 0. lcx_exception=>raise( 'error from POPUP_GET_VALUES' ). ENDIF. IF lv_answer = 'A'. ev_cancel = abap_true. ELSE. READ TABLE lt_fields INDEX 1 ASSIGNING . ASSERT sy-subrc = 0. ev_name = lcl_git_branch_list=>complete_heads_branch_name( lcl_git_branch_list=>normalize_branch_name( -value ) ). ENDIF. ENDMETHOD. METHOD run_page_class_popup. DATA: lv_answer TYPE c LENGTH 1, lt_fields TYPE TABLE OF sval. FIELD-SYMBOLS: LIKE LINE OF lt_fields. CLEAR: ev_name, ev_cancel. add_field( EXPORTING iv_tabname = 'TEXTL' iv_fieldname = 'LINE' iv_fieldtext = 'Name' iv_value = 'lcl_gui_page_' CHANGING ct_fields = lt_fields ). CALL FUNCTION 'POPUP_GET_VALUES' EXPORTING popup_title = 'Run page manually' IMPORTING returncode = lv_answer TABLES fields = lt_fields EXCEPTIONS error_in_fields = 1 OTHERS = 2 ##NO_TEXT. IF sy-subrc <> 0. lcx_exception=>raise( 'error from POPUP_GET_VALUES' ). ENDIF. IF lv_answer = 'A'. ev_cancel = abap_true. ELSE. READ TABLE lt_fields INDEX 1 ASSIGNING . ASSERT sy-subrc = 0. ev_name = to_upper( -value ). ENDIF. ENDMETHOD. "run_page_class_popup METHOD repo_new_offline. DATA: lv_returncode TYPE c, lt_fields TYPE TABLE OF sval, lv_icon_ok TYPE icon-name, lv_button1 TYPE svalbutton-buttontext, lv_icon1 TYPE icon-name. FIELD-SYMBOLS: LIKE LINE OF lt_fields. add_field( EXPORTING iv_tabname = 'ABAPTXT255' iv_fieldname = 'LINE' iv_fieldtext = 'Name' CHANGING ct_fields = lt_fields ). add_field( EXPORTING iv_tabname = 'TDEVC' iv_fieldname = 'DEVCLASS' iv_fieldtext = 'Package' CHANGING ct_fields = lt_fields ). lv_icon_ok = icon_okay. lv_button1 = 'Create package' ##NO_TEXT. lv_icon1 = icon_folder. CALL FUNCTION 'POPUP_GET_VALUES_USER_BUTTONS' EXPORTING popup_title = 'New Offline Project' programname = sy-repid formname = 'PACKAGE_POPUP' ok_pushbuttontext = '' icon_ok_push = lv_icon_ok first_pushbutton = lv_button1 icon_button_1 = lv_icon1 second_pushbutton = '' icon_button_2 = '' IMPORTING returncode = lv_returncode TABLES fields = lt_fields EXCEPTIONS error_in_fields = 1 OTHERS = 2. IF sy-subrc <> 0. lcx_exception=>raise( 'Error from POPUP_GET_VALUES' ). ENDIF. IF lv_returncode = 'A'. rs_popup-cancel = abap_true. RETURN. ENDIF. READ TABLE lt_fields INDEX 1 ASSIGNING . ASSERT sy-subrc = 0. rs_popup-url = -value. READ TABLE lt_fields INDEX 2 ASSIGNING . ASSERT sy-subrc = 0. rs_popup-package = -value. TRANSLATE rs_popup-package TO UPPER CASE. ENDMETHOD. "repo_new_offline METHOD branch_list_popup. DATA: lo_branches TYPE REF TO lcl_git_branch_list, lt_branches TYPE lcl_git_branch_list=>ty_git_branch_list_tt, lv_answer TYPE c LENGTH 1, lv_default TYPE i, lv_head_suffix TYPE string, lv_head_symref TYPE string, lt_selection TYPE TABLE OF spopli. FIELD-SYMBOLS: LIKE LINE OF lt_selection, LIKE LINE OF lt_branches. lo_branches = lcl_git_transport=>branches( iv_url ). lt_branches = lo_branches->get_branches_only( ). lv_head_suffix = | ({ lcl_git_branch_list=>c_head_name })|. lv_head_symref = lo_branches->get_head_symref( ). LOOP AT lt_branches ASSIGNING . CHECK -name IS NOT INITIAL. " To ensure some below ifs IF -is_head = abap_true. IF -name = lcl_git_branch_list=>c_head_name. " HEAD IF -name <> lv_head_symref AND lv_head_symref IS NOT INITIAL. " HEAD but other HEAD symref exists - ignore CONTINUE. ELSE. INSERT INITIAL LINE INTO lt_selection INDEX 1 ASSIGNING . -varoption = -name. ENDIF. ELSE. INSERT INITIAL LINE INTO lt_selection INDEX 1 ASSIGNING . -varoption = -display_name && lv_head_suffix. ENDIF. IF lv_default > 0. " Shift down default if set lv_default = lv_default + 1. ENDIF. ELSE. APPEND INITIAL LINE TO lt_selection ASSIGNING . -varoption = -display_name. ENDIF. IF -name = iv_default_branch. IF -is_head = abap_true. lv_default = 1. ELSE. lv_default = sy-tabix. ENDIF. ENDIF. ENDLOOP. IF iv_show_new_option = abap_true. APPEND INITIAL LINE TO lt_selection ASSIGNING . -varoption = c_new_branch_label. ENDIF. CALL FUNCTION 'POPUP_TO_DECIDE_LIST' EXPORTING textline1 = 'Select branch' titel = 'Select branch' start_col = 30 start_row = 5 cursorline = lv_default IMPORTING answer = lv_answer TABLES t_spopli = lt_selection EXCEPTIONS not_enough_answers = 1 too_much_answers = 2 too_much_marks = 3 OTHERS = 4. "#EC NOTEXT IF sy-subrc <> 0. lcx_exception=>raise( 'Error from POPUP_TO_DECIDE_LIST' ). ENDIF. IF lv_answer = 'A'. " cancel RETURN. ENDIF. READ TABLE lt_selection ASSIGNING WITH KEY selflag = abap_true. ASSERT sy-subrc = 0. IF iv_show_new_option = abap_true AND -varoption = c_new_branch_label. rs_branch-name = c_new_branch_label. ELSE. REPLACE FIRST OCCURRENCE OF lv_head_suffix IN -varoption WITH ''. READ TABLE lt_branches WITH KEY display_name = -varoption ASSIGNING . IF sy-subrc <> 0. * branch name longer than 65 characters LOOP AT lt_branches ASSIGNING WHERE display_name CS -varoption. EXIT. " current loop ENDLOOP. ENDIF. ASSERT IS ASSIGNED. rs_branch = lo_branches->find_by_name( -name ). ENDIF. ENDMETHOD. METHOD repo_popup. DATA: lv_returncode TYPE c, lv_icon_ok TYPE icon-name, lv_icon_br TYPE icon-name, lt_fields TYPE TABLE OF sval, lv_uattr TYPE spo_fattr, lv_pattr TYPE spo_fattr, lv_button2 TYPE svalbutton-buttontext, lv_icon2 TYPE icon-name. FIELD-SYMBOLS: LIKE LINE OF lt_fields. IF iv_freeze_url = abap_true. lv_uattr = '05'. ENDIF. IF iv_freeze_package = abap_true. lv_pattr = '05'. ENDIF. IF iv_package IS INITIAL. " Empty package -> can be created lv_button2 = 'Create package' ##NO_TEXT. lv_icon2 = icon_folder. ENDIF. add_field( EXPORTING iv_tabname = 'ABAPTXT255' iv_fieldname = 'LINE' iv_fieldtext = 'Git clone URL' iv_value = iv_url iv_field_attr = lv_uattr CHANGING ct_fields = lt_fields ). add_field( EXPORTING iv_tabname = 'TDEVC' iv_fieldname = 'DEVCLASS' iv_fieldtext = 'Target package' iv_value = iv_package iv_field_attr = lv_pattr CHANGING ct_fields = lt_fields ). add_field( EXPORTING iv_tabname = 'TEXTL' iv_fieldname = 'LINE' iv_fieldtext = 'Branch' iv_value = iv_branch iv_field_attr = '05' CHANGING ct_fields = lt_fields ). lv_icon_ok = icon_okay. lv_icon_br = icon_workflow_fork. CALL FUNCTION 'POPUP_GET_VALUES_USER_BUTTONS' EXPORTING popup_title = iv_title programname = sy-repid formname = 'BRANCH_POPUP' ok_pushbuttontext = 'OK' icon_ok_push = lv_icon_ok first_pushbutton = 'Select branch' icon_button_1 = lv_icon_br second_pushbutton = lv_button2 icon_button_2 = lv_icon2 IMPORTING returncode = lv_returncode TABLES fields = lt_fields EXCEPTIONS error_in_fields = 1 OTHERS = 2. "#EC NOTEXT IF sy-subrc <> 0. lcx_exception=>raise( 'Error from POPUP_GET_VALUES' ). ENDIF. IF lv_returncode = 'A'. rs_popup-cancel = abap_true. RETURN. ENDIF. READ TABLE lt_fields INDEX 1 ASSIGNING . ASSERT sy-subrc = 0. rs_popup-url = -value. lcl_url=>name( rs_popup-url ). " validate READ TABLE lt_fields INDEX 2 ASSIGNING . ASSERT sy-subrc = 0. rs_popup-package = -value. TRANSLATE rs_popup-package TO UPPER CASE. READ TABLE lt_fields INDEX 3 ASSIGNING . ASSERT sy-subrc = 0. rs_popup-branch_name = -value. ENDMETHOD. METHOD popup_to_confirm. CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING titlebar = titlebar text_question = text_question text_button_1 = text_button_1 icon_button_1 = icon_button_1 text_button_2 = text_button_2 icon_button_2 = icon_button_2 default_button = default_button display_cancel_button = display_cancel_button IMPORTING answer = rv_answer EXCEPTIONS text_not_found = 1 OTHERS = 2. "#EC NOTEXT IF sy-subrc <> 0. lcx_exception=>raise( 'error from POPUP_TO_CONFIRM' ). ENDIF. ENDMETHOD. "popup_to_confirm METHOD popup_to_inform. DATA: lv_line1 TYPE char70, lv_line2 TYPE char70. lv_line1 = text_message. IF strlen( text_message ) > 70. lv_line2 = text_message+70. ENDIF. CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING titel = titlebar txt1 = lv_line1 txt2 = lv_line2. ENDMETHOD. " popup_to_inform. METHOD popup_to_create_package. CALL FUNCTION 'FUNCTION_EXISTS' EXPORTING funcname = 'PB_POPUP_PACKAGE_CREATE' EXCEPTIONS function_not_exist = 1 OTHERS = 2. IF sy-subrc = 1. * looks like the function module used does not exist on all * versions since 702, so show an error lcx_exception=>raise( 'Function module PB_POPUP_PACKAGE_CREATE does not exist' ). ENDIF. CALL FUNCTION 'PB_POPUP_PACKAGE_CREATE' CHANGING p_object_data = es_package_data EXCEPTIONS action_cancelled = 1. IF sy-subrc = 0. ev_create = abap_true. ELSE. ev_create = abap_false. ENDIF. ENDMETHOD. " popup_to_create_package METHOD popup_to_select_transports. DATA: lrs_trfunction TYPE trsel_trs_function, lv_types TYPE string, ls_ranges TYPE trsel_ts_ranges. " Fill all request types lv_types = 'KWTCOEMPDRSXQFG'. lrs_trfunction-sign = 'I'. lrs_trfunction-option = 'EQ'. WHILE lv_types <> space. lrs_trfunction-low = lv_types(1). APPEND lrs_trfunction TO ls_ranges-request_funcs. SHIFT lv_types. ENDWHILE. CALL FUNCTION 'TRINT_SELECT_REQUESTS' EXPORTING iv_username_pattern = sy-uname iv_via_selscreen = 'X' iv_complete_projects = '' "is_popup = '' iv_title = 'abapGit: Transport Request Selection' IMPORTING et_requests = rt_trkorr CHANGING cs_ranges = ls_ranges EXCEPTIONS action_aborted_by_user = 1 OTHERS = 2. ENDMETHOD. METHOD popup_to_create_transp_branch. DATA: lv_returncode TYPE c, lt_fields TYPE TABLE OF sval, lv_transports_as_text TYPE string, ls_transport_header LIKE LINE OF it_transport_headers. FIELD-SYMBOLS: LIKE LINE OF lt_fields. lv_transports_as_text = 'Transport(s)'. LOOP AT it_transport_headers INTO ls_transport_header. CONCATENATE lv_transports_as_text '_' ls_transport_header-trkorr INTO lv_transports_as_text. ENDLOOP. add_field( EXPORTING iv_tabname = 'TEXTL' iv_fieldname = 'LINE' iv_fieldtext = 'Branch name' iv_value = lv_transports_as_text CHANGING ct_fields = lt_fields ). add_field( EXPORTING iv_tabname = 'ABAPTXT255' iv_fieldname = 'LINE' iv_fieldtext = 'Commit text' iv_value = lv_transports_as_text CHANGING ct_fields = lt_fields ). CALL FUNCTION 'POPUP_GET_VALUES' EXPORTING popup_title = 'Transport to new Branch' IMPORTING returncode = lv_returncode TABLES fields = lt_fields EXCEPTIONS error_in_fields = 1 OTHERS = 2. IF sy-subrc <> 0. lcx_exception=>raise( 'Error from POPUP_GET_VALUES' ). ENDIF. IF lv_returncode = 'A'. RAISE EXCEPTION TYPE lcx_cancel. ENDIF. READ TABLE lt_fields INDEX 1 ASSIGNING . ASSERT sy-subrc = 0. rs_transport_branch-branch_name = -value. READ TABLE lt_fields INDEX 2 ASSIGNING . ASSERT sy-subrc = 0. rs_transport_branch-commit_text = -value. ENDMETHOD. METHOD popup_select_obj_overwrite. DATA: ls_list LIKE LINE OF it_list, ls_popup_list TYPE t_popup_select_list, lt_popup_list TYPE t_popup_select_list_tt, lo_events TYPE REF TO cl_salv_events_table, lo_columns TYPE REF TO cl_salv_columns_table, lt_columns TYPE salv_t_column_ref, ls_column TYPE salv_s_column_ref, lo_column TYPE REF TO cl_salv_column_list, lo_table_header TYPE REF TO cl_salv_form_text. LOOP AT it_list INTO ls_list. MOVE-CORRESPONDING ls_list TO ls_popup_list. APPEND ls_popup_list TO lt_popup_list. ENDLOOP. TRY. cl_salv_table=>factory( IMPORTING r_salv_table = mo_select_list_popup CHANGING t_table = lt_popup_list ). GET REFERENCE OF lt_popup_list INTO mtr_select_list. mo_select_list_popup->set_screen_status( pfstatus = '102' report = 'SAPMSVIM' ). mo_select_list_popup->set_screen_popup( start_column = 1 end_column = 65 start_line = 1 end_line = 20 ). lo_events = mo_select_list_popup->get_event( ). SET HANDLER on_select_list_link_click FOR lo_events. SET HANDLER on_select_list_function_click FOR lo_events. CREATE OBJECT lo_table_header EXPORTING text = |The following Objects have been modified locally. Select the Objects which should be overwritten.|. mo_select_list_popup->set_top_of_list( lo_table_header ). lo_columns = mo_select_list_popup->get_columns( ). lo_columns->set_optimize( abap_true ). lt_columns = lo_columns->get( ). LOOP AT lt_columns INTO ls_column. CASE ls_column-columnname. WHEN 'OBJ_TYPE' OR 'OBJ_NAME'. WHEN 'SELECTED'. lo_column ?= ls_column-r_column. lo_column->set_cell_type( if_salv_c_cell_type=>checkbox_hotspot ). lo_column->set_output_length( 20 ). lo_column->set_short_text( 'Overwrite?' ). lo_column->set_medium_text( 'Overwr. Lcl Object?' ). lo_column->set_long_text( 'Overwrite Local Object?' ). WHEN OTHERS. ls_column-r_column->set_technical( abap_true ). ENDCASE. ENDLOOP. mo_select_list_popup->display( ). CATCH cx_salv_msg. lcx_exception=>raise( 'Error from POPUP_SELECT_OBJ_OVERWRITE' ). ENDTRY. LOOP AT lt_popup_list INTO ls_popup_list WHERE selected = abap_true. MOVE-CORRESPONDING ls_popup_list TO ls_list. APPEND ls_list TO rt_list. ENDLOOP. CLEAR: mo_select_list_popup, mtr_select_list. ENDMETHOD. METHOD on_select_list_function_click. DATA: lsr_line TYPE REF TO t_popup_select_list. CASE e_salv_function. WHEN 'O.K.'. mo_select_list_popup->close_screen( ). WHEN 'ABR'. "Canceled: clear list to overwrite nothing CLEAR mtr_select_list->*. mo_select_list_popup->close_screen( ). WHEN 'SALL'. LOOP AT mtr_select_list->* REFERENCE INTO lsr_line. lsr_line->selected = abap_true. ENDLOOP. mo_select_list_popup->refresh( ). WHEN 'DSEL'. LOOP AT mtr_select_list->* REFERENCE INTO lsr_line. lsr_line->selected = abap_false. ENDLOOP. mo_select_list_popup->refresh( ). WHEN OTHERS. CLEAR mtr_select_list->*. mo_select_list_popup->close_screen( ). ENDCASE. ENDMETHOD. METHOD on_select_list_link_click. DATA: lsr_line TYPE REF TO t_popup_select_list, lv_line TYPE sytabix. lv_line = row. READ TABLE mtr_select_list->* REFERENCE INTO lsr_line INDEX lv_line. IF sy-subrc = 0. IF lsr_line->selected = abap_true. lsr_line->selected = abap_false. ELSE. lsr_line->selected = abap_true. ENDIF. ENDIF. mo_select_list_popup->refresh( ). ENDMETHOD. ENDCLASS.