WDA ALV组件中的TOOLBAR是ON_FUNCTION事件
在ALV中添加自定义按钮
* table toolbar
DATA:
LO_FUN_CALL TYPE REF TO CL_SALV_WD_FUNCTION,
LO_BTN_CALL TYPE REF TO CL_SALV_WD_FE_BUTTON.
LO_FUN_CALL = WD_THIS->ALV_CONFIG_TABLE->IF_SALV_WD_FUNCTION_SETTINGS~CREATE_FUNCTION(
'BT_MODI' ).
CREATE OBJECT LO_BTN_CALL.
LO_BTN_CALL->SET_TEXT( '修改' ).
LO_BTN_CALL->SET_IMAGE_SOURCE( VALUE = '~Icon/ChangeNumber' ).
LO_FUN_CALL->SET_EDITOR( LO_BTN_CALL ).
自定义的按钮触发ON_FUNCTION事件
WDA ALV中修改单元格,和REPORT中的方法类似,需要在内表中添加一个字段‘’来控制字段是否可修改,‘true’的时候不可修改,‘false’不可修改
DATA: LR_INPUT_FIELD TYPE REF TO CL_SALV_WD_UIE_INPUT_FIELD.
DATA: LT_COLUMNS TYPE SALV_WD_T_COLUMN_REF,
LS_COLUMNS TYPE SALV_WD_S_COLUMN_REF.
* define UI element
DATA: LC_INPUT TYPE REF TO CL_SALV_WD_UIE_INPUT_FIELD.
* define column header
DATA: LC_COLUMN_HEADER TYPE REF TO CL_SALV_WD_COLUMN_HEADER.
* set columns table
LT_COLUMNS = WD_THIS->ALV_CONFIG_TABLE->IF_SALV_WD_COLUMN_SETTINGS~GET_COLUMNS( ).
LOOP AT LT_COLUMNS INTO LS_COLUMNS.
LR_COLUMN = LS_COLUMNS-R_COLUMN.
CASE LS_COLUMNS-ID.
WHEN 'CARRID'.
CREATE OBJECT LR_INPUT_FIELD EXPORTING VALUE_FIELDNAME = LS_COLUMNS-ID.
LR_INPUT_FIELD->SET_READ_ONLY_FIELDNAME( VALUE = 'ZFG_MODI' ).
LR_COLUMN->SET_CELL_EDITOR( LR_INPUT_FIELD ).
WHEN 'CONNID'.
CREATE OBJECT LR_INPUT_FIELD EXPORTING VALUE_FIELDNAME = LS_COLUMNS-ID.
LR_INPUT_FIELD->SET_READ_ONLY_FIELDNAME( VALUE = 'ZFG_MODI' ).
LR_COLUMN->SET_CELL_EDITOR( LR_INPUT_FIELD ).
WHEN 'CITYTO'.
CREATE OBJECT LR_INPUT_FIELD EXPORTING VALUE_FIELDNAME = LS_COLUMNS-ID.
LR_INPUT_FIELD->SET_READ_ONLY_FIELDNAME( VALUE = 'ZFG_MODI' ).
LR_COLUMN->SET_CELL_EDITOR( LR_INPUT_FIELD ).
WHEN OTHERS.
ENDCASE.
ENDLOOP.
添加修改逻辑
METHOD BUTN_FUNC .
CASE R_PARAM->ID.
WHEN 'BT_MODI'.
* get message manager
DATA LO_API_CONTROLLER TYPE REF TO IF_WD_CONTROLLER.
DATA LO_MESSAGE_MANAGER TYPE REF TO IF_WD_MESSAGE_MANAGER.
LO_API_CONTROLLER ?= WD_THIS->WD_GET_API( ).
CALL METHOD LO_API_CONTROLLER->GET_MESSAGE_MANAGER
RECEIVING
MESSAGE_MANAGER = LO_MESSAGE_MANAGER
.
* report message
CALL METHOD LO_MESSAGE_MANAGER->REPORT_SUCCESS
EXPORTING
MESSAGE_TEXT = 'BT_CALL 测试 SUCCESS'
* PARAMS =
* MSG_USER_DATA =
* IS_PERMANENT = ABAP_FALSE
* SCOPE_PERMANENT_MSG = CO_MSG_SCOPE_CONTROLLER
* VIEW =
* SHOW_AS_POPUP =
* CONTROLLER_PERMANENT_MSG =
* MSG_INDEX =
* CANCEL_NAVIGATION =
* ENABLE_MESSAGE_NAVIGATION =
* COMPONENT =
* RECEIVING
* MESSAGE_ID =
.
DATA:
LO_ND_GTALV_SPFLI TYPE REF TO IF_WD_CONTEXT_NODE,
LT_EL_GTALV_SPFLI TYPE WDR_CONTEXT_ELEMENT_SET,
LO_EL_GTALV_SPFLI TYPE REF TO IF_WD_CONTEXT_ELEMENT,
LS_GTALV_SPFLI TYPE WD_THIS->ELEMENT_GTALV_SPFLI,
LT_GTALV_SPFLI TYPE WD_THIS->ELEMENTS_GTALV_SPFLI.
DATA:
LV_ISERROR TYPE ABAP_BOOL.
LO_ND_GTALV_SPFLI = WD_CONTEXT->GET_CHILD_NODE( NAME = WD_THIS->WDCTX_GTALV_SPFLI ).
"获取选择行数据
LT_EL_GTALV_SPFLI = LO_ND_GTALV_SPFLI->GET_SELECTED_ELEMENTS( INCLUDING_LEAD_SELECTION = ABAP_TRUE ).
LOOP AT LT_EL_GTALV_SPFLI INTO LO_EL_GTALV_SPFLI.
CLEAR: LS_GTALV_SPFLI.
LO_EL_GTALV_SPFLI->GET_STATIC_ATTRIBUTES( IMPORTING STATIC_ATTRIBUTES = LS_GTALV_SPFLI ).
LS_GTALV_SPFLI-ZFG_MODI = ABAP_FALSE.
LO_EL_GTALV_SPFLI->SET_STATIC_ATTRIBUTES( STATIC_ATTRIBUTES = LS_GTALV_SPFLI ).
ENDLOOP.
WHEN OTHERS.
ENDCASE.
ENDMETHOD.