Achievement
By clicking down or up button, the table width could be changed dynamically - each time the button is clicked,
the width increases or shrinks at 10 px interval.
(1) Create a table view with toolbar defined:
(2) Create the attribute gt_toolbar_button in controller class:
Define the on click handling logic for button DOWN and UP:
(3) Create two event handler for DOWN and UP:
method EH_ONDOWN. change( iv_up = abap_false ). endmethod. method EH_ONUP. change( iv_up = abap_true ). endmethod.
The implementation of change method:
method CHANGE. CALL METHOD me->configuration_descr->get_config_data RECEIVING rv_result = DATA(lv_xml) EXCEPTIONS config_not_found = 1. CHECK sy-subrc = 0. DATA(ls_config_data) = cl_bsp_dlc_table_utility=>conf_xml_to_abap( lv_xml ). LOOP AT ls_config_data-columndefinition ASSIGNING FIELD-SYMBOL(<column>). <column>-width = GET_WIDTH( iv_up = iv_up iv_old_value = <column>-width ). ENDLOOP. DATA(lv_xml_changed) = cl_bsp_dlc_table_utility=>conf_abap_to_xml( ls_config_data ). DATA(lr_configuration2) = CAST if_bsp_dlc_config_table_layout( me->configuration_descr ). lr_configuration2->set_active_table_layout( iv_config_data = lv_xml_changed ). endmethod.
The implementation of get_width method:
method GET_WIDTH. DATA lv_new TYPE i. DATA lv_temp TYPE string. lv_temp = iv_old_value. REPLACE ALL OCCURRENCES OF 'px' IN lv_temp WITH space. CONDENSE lv_temp NO-GAPS. lv_new = lv_temp. IF iv_up = abap_true. lv_new = lv_new + 10. ELSE. lv_new = lv_new - 10. ENDIF. lv_temp = lv_new. value = lv_temp && 'px'. CONDENSE value NO-GAPS. endmethod.
Signature of these two methods:
methods CHANGE importing !IV_UP type ABAP_BOOL . methods GET_WIDTH importing !IV_OLD_VALUE type STRING !IV_UP type ABAP_BOOL returning value(VALUE) type STRING .
要获取更多Jerry的原创文章,请关注公众号"汪子熙":