Created
February 8, 2021 13:26
-
-
Save alezhu/f4cd6aa5b23b3df75e728ada5407a065 to your computer and use it in GitHub Desktop.
SALV toolbar with dropdown button
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class ZCL_ALV_GUI_BUILDER definition | |
public | |
inheriting from CL_ALV_GUI_INSTANCE_BUILDER | |
create public . | |
public section. | |
data MO_ALV_GRID type ref to CL_GUI_ALV_GRID read-only . | |
events ON_GRID_CREATE | |
exporting | |
value(IO_GRID) type ref to CL_GUI_ALV_GRID . | |
methods CONSTRUCTOR . | |
class-methods REGISTER_BUILDER_ONCE | |
returning | |
value(RO_BUILDER) type ref to ZCL_ALV_GUI_BUILDER . | |
class-methods REGISTER_BUILDER | |
returning | |
value(RO_BUILDER) type ref to ZCL_ALV_GUI_BUILDER . | |
methods CREATE_ALV_DATA_SOURCE | |
redefinition . | |
methods CREATE_ALV_GRID_AT_PBO | |
redefinition . | |
methods GET_ALV_CLASSIC_INSTANCE | |
redefinition . | |
methods IS_IDA_ACTIVE | |
redefinition . | |
PROTECTED SECTION. | |
TYPES tv_prev_builder TYPE classname. | |
DATA mo_prev_builder TYPE REF TO cl_alv_gui_instance_builder . | |
DATA mv_prev_builder_class TYPE tv_prev_builder. | |
DATA mv_restore_on_grid_create TYPE abap_bool. | |
PRIVATE SECTION. | |
ENDCLASS. | |
CLASS ZCL_ALV_GUI_BUILDER IMPLEMENTATION. | |
* <SIGNATURE>---------------------------------------------------------------------------------------+ | |
* | Instance Public Method ZCL_ALV_GUI_BUILDER->CONSTRUCTOR | |
* +-------------------------------------------------------------------------------------------------+ | |
* +--------------------------------------------------------------------------------------</SIGNATURE> | |
METHOD constructor. | |
super->constructor( ). | |
* mo_prev_builder = cl_alv_gui_ist_builder_factory=>new_alv_gui_instance_builder( | |
* iv_inst_builder_classname = sv_prev_builder_class | |
* ). | |
* CLEAR sv_prev_builder_class. | |
ENDMETHOD. | |
* <SIGNATURE>---------------------------------------------------------------------------------------+ | |
* | Instance Public Method ZCL_ALV_GUI_BUILDER->CREATE_ALV_DATA_SOURCE | |
* +-------------------------------------------------------------------------------------------------+ | |
* | [--->] IV_TABLE_NAME TYPE DBTABL | |
* | [--->] IO_FIELD_STRUCTURE TYPE REF TO CL_ABAP_STRUCTDESCR(optional) | |
* | [<-()] RO_DATA_SOURCE TYPE REF TO IF_ALV_GUI_DATA_SOURCE | |
* +--------------------------------------------------------------------------------------</SIGNATURE> | |
METHOD create_alv_data_source. | |
ENDMETHOD. | |
* <SIGNATURE>---------------------------------------------------------------------------------------+ | |
* | Instance Public Method ZCL_ALV_GUI_BUILDER->CREATE_ALV_GRID_AT_PBO | |
* +-------------------------------------------------------------------------------------------------+ | |
* | [--->] I_SHELLSTYLE TYPE I (default =0) | |
* | [--->] I_LIFETIME TYPE I(optional) | |
* | [--->] I_PARENT TYPE REF TO CL_GUI_CONTAINER | |
* | [--->] I_APPL_EVENTS TYPE CHAR01 (default =SPACE) | |
* | [--->] I_PARENTDBG TYPE REF TO CL_GUI_CONTAINER(optional) | |
* | [--->] I_APPLOGPARENT TYPE REF TO CL_GUI_CONTAINER(optional) | |
* | [--->] I_GRAPHICSPARENT TYPE REF TO CL_GUI_CONTAINER(optional) | |
* | [--->] I_NAME TYPE STRING(optional) | |
* | [--->] I_FCAT_COMPLETE TYPE SAP_BOOL (default =SPACE) | |
* | [<-()] RO_ALV_GRID TYPE REF TO CL_GUI_ALV_GRID | |
* | [EXC!] ERROR_CNTL_CREATE | |
* | [EXC!] ERROR_CNTL_INIT | |
* | [EXC!] ERROR_CNTL_LINK | |
* | [EXC!] ERROR_DP_CREATE | |
* +--------------------------------------------------------------------------------------</SIGNATURE> | |
METHOD create_alv_grid_at_pbo. | |
IF mo_prev_builder IS NOT BOUND. | |
mo_prev_builder = cl_alv_gui_ist_builder_factory=>new_alv_gui_instance_builder( | |
iv_inst_builder_classname = mv_prev_builder_class | |
). | |
ENDIF. | |
mo_prev_builder->create_alv_grid_at_pbo( | |
EXPORTING | |
i_shellstyle = i_shellstyle | |
i_lifetime = i_lifetime | |
i_parent = i_parent | |
i_appl_events = i_appl_events | |
i_parentdbg = i_parentdbg | |
i_applogparent = i_applogparent | |
i_graphicsparent = i_graphicsparent | |
i_name = i_name | |
i_fcat_complete = i_fcat_complete | |
RECEIVING | |
ro_alv_grid = ro_alv_grid | |
EXCEPTIONS | |
error_cntl_create = 1 | |
error_cntl_init = 2 | |
error_cntl_link = 3 | |
error_dp_create = 4 | |
OTHERS = 5 | |
). | |
CASE sy-subrc. | |
WHEN 1. | |
RAISE error_cntl_create. | |
WHEN 2. | |
RAISE error_cntl_init. | |
WHEN 3. | |
RAISE error_cntl_link. | |
WHEN 4. | |
RAISE error_dp_create . | |
WHEN 5. | |
ASSERT 1 = 2. | |
ENDCASE. | |
mo_alv_grid = ro_alv_grid. | |
IF mv_restore_on_grid_create = abap_true. | |
mv_restore_on_grid_create = abap_false. | |
cl_alv_z_params=>set_parameter( | |
EXPORTING | |
param_name = cl_alv_z_params=>c_param-alv_gui_instance_builder " Parameter name | |
* user = SY-UNAME " User Name | |
* seqno = seqno | |
param_value = CONV #( mv_prev_builder_class ) | |
). | |
cl_alv_gui_ist_builder_factory=>new_alv_gui_instance_builder( ). | |
ENDIF. | |
RAISE EVENT on_grid_create | |
EXPORTING | |
io_grid = mo_alv_grid | |
. | |
ENDMETHOD. | |
* <SIGNATURE>---------------------------------------------------------------------------------------+ | |
* | Instance Public Method ZCL_ALV_GUI_BUILDER->GET_ALV_CLASSIC_INSTANCE | |
* +-------------------------------------------------------------------------------------------------+ | |
* | [<-()] RO_ALV_GRID TYPE REF TO CL_GUI_ALV_GRID | |
* +--------------------------------------------------------------------------------------</SIGNATURE> | |
METHOD get_alv_classic_instance. | |
ro_alv_grid = mo_alv_grid. | |
ENDMETHOD. | |
* <SIGNATURE>---------------------------------------------------------------------------------------+ | |
* | Instance Public Method ZCL_ALV_GUI_BUILDER->IS_IDA_ACTIVE | |
* +-------------------------------------------------------------------------------------------------+ | |
* | [<-()] RV_ACTIVE TYPE ABAP_BOOL | |
* +--------------------------------------------------------------------------------------</SIGNATURE> | |
METHOD is_ida_active. | |
rv_active = abap_false. | |
ENDMETHOD. | |
* <SIGNATURE>---------------------------------------------------------------------------------------+ | |
* | Static Public Method ZCL_ALV_GUI_BUILDER=>REGISTER_BUILDER | |
* +-------------------------------------------------------------------------------------------------+ | |
* | [<-()] RO_BUILDER TYPE REF TO ZCL_ALV_GUI_BUILDER | |
* +--------------------------------------------------------------------------------------</SIGNATURE> | |
METHOD register_builder. | |
DATA(lo_prev_builder) = cl_alv_gui_ist_builder_factory=>get_alv_gui_instance_builder( ). | |
DATA(lo_type) = cl_abap_datadescr=>describe_by_data( VALUE tv_prev_builder( ) ). | |
DATA(lv_name) = lo_type->absolute_name. | |
REPLACE '\CLASS=' IN lv_name WITH ''. | |
FIND FIRST OCCURRENCE OF '\' IN lv_name MATCH OFFSET DATA(lv_offset). | |
IF sy-subrc = 0. | |
DATA(lv_self_name) = CONV cl_alv_z_params=>y_param_value( lv_name(lv_offset) ). | |
ELSE. | |
lv_self_name = lv_name. "Hmm | |
ENDIF. | |
cl_alv_z_params=>set_parameter( | |
EXPORTING | |
param_name = cl_alv_z_params=>c_param-alv_gui_instance_builder " Parameter name | |
* user = SY-UNAME " User Name | |
* seqno = seqno | |
param_value = lv_self_name | |
). | |
ro_builder ?= cl_alv_gui_ist_builder_factory=>new_alv_gui_instance_builder( ). | |
ro_builder->mo_prev_builder = lo_prev_builder. | |
ENDMETHOD. | |
* <SIGNATURE>---------------------------------------------------------------------------------------+ | |
* | Static Public Method ZCL_ALV_GUI_BUILDER=>REGISTER_BUILDER_ONCE | |
* +-------------------------------------------------------------------------------------------------+ | |
* | [<-()] RO_BUILDER TYPE REF TO ZCL_ALV_GUI_BUILDER | |
* +--------------------------------------------------------------------------------------</SIGNATURE> | |
METHOD register_builder_once. | |
DATA(lv_prev_builder_class) = cl_alv_z_params=>get_parameter( cl_alv_z_params=>c_param-alv_gui_instance_builder ). | |
ro_builder = register_builder( ). | |
ro_builder->mv_prev_builder_class = lv_prev_builder_class. | |
ro_builder->mv_restore_on_grid_create = abap_true. | |
ENDMETHOD. | |
ENDCLASS. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class ZCL_SALV_DRODOWN_TLB definition | |
public | |
create public . | |
public section. | |
types: | |
BEGIN OF ts_button , | |
function TYPE ui_func, | |
icon TYPE iconname, | |
quickinfo TYPE iconquick, | |
text TYPE text40, | |
after TYPE ui_func, | |
t_subitem TYPE ttb_button, | |
END OF ts_button . | |
types: | |
tt_button TYPE HASHED TABLE OF ts_button WITH UNIQUE KEY function . | |
data MO_GRID type ref to CL_GUI_ALV_GRID read-only . | |
methods CONSTRUCTOR . | |
methods ADD_BUTTON | |
importing | |
!IS_BUTTON type TS_BUTTON . | |
methods SET_DISABLED | |
importing | |
!IV_BUTTON type UI_FUNC | |
!IV_SUBITEM type UI_FUNC | |
!IV_DISABLED type ABAP_BOOL default ABAP_TRUE . | |
methods SET_SELECTED | |
importing | |
!IV_BUTTON type UI_FUNC | |
!IV_SUBITEM type UI_FUNC . | |
protected section. | |
data MT_BUTTON type TT_BUTTON . | |
data MO_ALV_BUILDER type ref to ZCL_ALV_GUI_BUILDER . | |
methods _ON_TOOLBAR | |
for event TOOLBAR of CL_GUI_ALV_GRID | |
importing | |
!E_OBJECT | |
!E_INTERACTIVE . | |
methods _ON_GRID_CREATE | |
for event ON_GRID_CREATE of ZCL_ALV_GUI_BUILDER | |
importing | |
!IO_GRID . | |
methods _ON_MENU_BUTTON | |
for event MENU_BUTTON of CL_GUI_ALV_GRID | |
importing | |
!E_OBJECT | |
!E_UCOMM . | |
private section. | |
ENDCLASS. | |
CLASS ZCL_SALV_DRODOWN_TLB IMPLEMENTATION. | |
* <SIGNATURE>---------------------------------------------------------------------------------------+ | |
* | Instance Public Method ZCL_SALV_DRODOWN_TLB->ADD_BUTTON | |
* +-------------------------------------------------------------------------------------------------+ | |
* | [--->] IS_BUTTON TYPE TS_BUTTON | |
* +--------------------------------------------------------------------------------------</SIGNATURE> | |
METHOD ADD_BUTTON. | |
INSERT is_button INTO TABLE mt_button. | |
ENDMETHOD. | |
* <SIGNATURE>---------------------------------------------------------------------------------------+ | |
* | Instance Public Method ZCL_SALV_DRODOWN_TLB->CONSTRUCTOR | |
* +-------------------------------------------------------------------------------------------------+ | |
* +--------------------------------------------------------------------------------------</SIGNATURE> | |
METHOD constructor. | |
mo_alv_builder = zcl_alv_gui_builder=>register_builder_once( ). | |
SET HANDLER _on_grid_create FOR mo_alv_builder. | |
ENDMETHOD. | |
* <SIGNATURE>---------------------------------------------------------------------------------------+ | |
* | Instance Public Method ZCL_SALV_DRODOWN_TLB->SET_DISABLED | |
* +-------------------------------------------------------------------------------------------------+ | |
* | [--->] IV_BUTTON TYPE UI_FUNC | |
* | [--->] IV_SUBITEM TYPE UI_FUNC | |
* | [--->] IV_DISABLED TYPE ABAP_BOOL (default =ABAP_TRUE) | |
* +--------------------------------------------------------------------------------------</SIGNATURE> | |
METHOD SET_DISABLED. | |
READ TABLE mt_button REFERENCE INTO DATA(lps_button) WITH KEY | |
function = iv_button | |
. | |
IF sy-subrc = 0. | |
READ TABLE lps_button->t_subitem REFERENCE INTO DATA(lps_subitem) WITH KEY | |
function = iv_subitem | |
. | |
IF sy-subrc = 0. | |
lps_subitem->disabled = iv_disabled. | |
ENDIF. | |
ENDIF. | |
ENDMETHOD. | |
* <SIGNATURE>---------------------------------------------------------------------------------------+ | |
* | Instance Public Method ZCL_SALV_DRODOWN_TLB->SET_SELECTED | |
* +-------------------------------------------------------------------------------------------------+ | |
* | [--->] IV_BUTTON TYPE UI_FUNC | |
* | [--->] IV_SUBITEM TYPE UI_FUNC | |
* +--------------------------------------------------------------------------------------</SIGNATURE> | |
METHOD set_selected. | |
READ TABLE mt_button REFERENCE INTO DATA(lps_button) WITH KEY | |
function = iv_button | |
. | |
IF sy-subrc = 0. | |
LOOP AT lps_button->t_subitem REFERENCE INTO DATA(lps_subitem). | |
IF lps_subitem->function = iv_subitem. | |
lps_subitem->checked = abap_true. | |
ELSE. | |
lps_subitem->checked = abap_false. | |
ENDIF. | |
ENDLOOP. | |
ENDIF. | |
ENDMETHOD. | |
* <SIGNATURE>---------------------------------------------------------------------------------------+ | |
* | Instance Protected Method ZCL_SALV_DRODOWN_TLB->_ON_GRID_CREATE | |
* +-------------------------------------------------------------------------------------------------+ | |
* | [--->] IO_GRID LIKE | |
* +--------------------------------------------------------------------------------------</SIGNATURE> | |
METHOD _on_grid_create. | |
mo_grid = io_grid. | |
SET HANDLER _on_grid_create FOR mo_alv_builder ACTIVATION space. | |
CLEAR mo_alv_builder. | |
SET HANDLER _on_toolbar FOR mo_grid. | |
SET HANDLER _on_menu_button FOR mo_grid. | |
ENDMETHOD. | |
* <SIGNATURE>---------------------------------------------------------------------------------------+ | |
* | Instance Protected Method ZCL_SALV_DRODOWN_TLB->_ON_MENU_BUTTON | |
* +-------------------------------------------------------------------------------------------------+ | |
* | [--->] E_OBJECT LIKE | |
* | [--->] E_UCOMM LIKE | |
* +--------------------------------------------------------------------------------------</SIGNATURE> | |
METHOD _on_menu_button. | |
READ TABLE mt_button REFERENCE INTO DATA(lps_button) WITH KEY | |
function = e_ucomm | |
. | |
IF sy-subrc = 0. | |
LOOP AT lps_button->t_subitem REFERENCE INTO DATA(lps_subitem). | |
e_object->add_function( | |
EXPORTING | |
fcode = lps_subitem->function | |
text = lps_subitem->text " Function text | |
icon = CONV #( lps_subitem->icon ) " Icons | |
* ftype = lps_subitem->butn_type | |
disabled = lps_subitem->disabled " Inactive | |
checked = lps_subitem->checked " Selected | |
* accelerator = accelerator " Fastpath | |
* insert_at_the_top = space " Insert at Start (Default: Insert at End) | |
). | |
ENDLOOP. | |
ENDIF. | |
ENDMETHOD. | |
* <SIGNATURE>---------------------------------------------------------------------------------------+ | |
* | Instance Protected Method ZCL_SALV_DRODOWN_TLB->_ON_TOOLBAR | |
* +-------------------------------------------------------------------------------------------------+ | |
* | [--->] E_OBJECT LIKE | |
* | [--->] E_INTERACTIVE LIKE | |
* +--------------------------------------------------------------------------------------</SIGNATURE> | |
METHOD _on_toolbar. | |
LOOP AT mt_button REFERENCE INTO DATA(lps_button). | |
READ TABLE e_object->mt_toolbar TRANSPORTING NO FIELDS WITH KEY | |
function = lps_button->after | |
. | |
IF sy-subrc = 0. | |
DATA(lv_index) = sy-tabix + 1. | |
ELSE. | |
lv_index = lines( e_object->mt_toolbar ). | |
ENDIF. | |
DATA(lv_text) = lps_button->text. | |
READ TABLE lps_button->t_subitem REFERENCE INTO DATA(lps_subitem) WITH KEY | |
checked = abap_true | |
. | |
IF sy-subrc NE 0. | |
READ TABLE lps_button->t_subitem REFERENCE INTO lps_subitem INDEX 1. | |
ENDIF. | |
IF sy-subrc = 0. | |
lv_text = lps_subitem->text. | |
ENDIF. | |
INSERT VALUE stb_button( | |
BASE CORRESPONDING #( lps_button->* ) | |
text = lv_text | |
butn_type = '1' | |
) INTO e_object->mt_toolbar INDEX lv_index. | |
ENDLOOP. | |
ENDMETHOD. | |
ENDCLASS. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment