WDA中的ALV CLIKE事件的实现(单击)前提是,要把你要单击的字段设置成一个链接或者一个按钮,这样点击的时候才会去触发ON_CLICK
首先最重要的一点是要把SET_CELL_ACTION_EVENT_ENABLED 设置成FALSE,否则是不会触发的
LR_TABLE_SETTINGS->SET_CELL_ACTION_EVENT_ENABLED( ABAP_FALSE ).
在初始化的时候设置字段属性
"将ID字段设置成链接的形式
DATA LR_LINK TYPE REF TO CL_SALV_WD_UIE_LINK_TO_ACTION.
LR_COLUMN = LR_COLUMN_SETTINGS->GET_COLUMN( 'ID' ).
CREATE OBJECT LR_LINK .
LR_LINK->SET_TEXT_FIELDNAME('ID').
LR_COLUMN->SET_CELL_EDITOR( LR_LINK ).
DATA: LO_ND_GT_DISPLAY TYPE REF TO IF_WD_CONTEXT_NODE,
LT_EVENT_PROPERTIES TYPE
WD_THIS->ELEMENTS_GT_DISPLAY.
FIELD-SYMBOLS: <L_VALUE> TYPE ANY.
DATA LT_GT_DISPLAY TYPE WD_THIS->ELEMENTS_GT_DISPLAY.
DATA LS_GT_DISPLAY LIKE LINE OF LT_GT_DISPLAY .
DATA LO_ND_GT_ALV2 TYPE REF TO IF_WD_CONTEXT_NODE.
DATA LT_GT_ALV2 TYPE WD_THIS->ELEMENTS_GT_ALV2.
DATA LS_GT_ALV2 LIKE LINE OF LT_GT_ALV2.
* navigate from <CONTEXT> to <GT_ALV2> via lead selection
LO_ND_GT_ALV2 = WD_CONTEXT->GET_CHILD_NODE( NAME = WD_THIS->WDCTX_GT_ALV2 ).
* @TODO handle non existant child
* IF lo_nd_gt_alv2 IS INITIAL.
* ENDIF.
LO_ND_GT_ALV2->GET_STATIC_ATTRIBUTES_TABLE( IMPORTING TABLE = LT_GT_ALV2 ).
CLEAR:LS_GT_DISPLAY, LT_GT_DISPLAY[] .
ASSIGN R_PARAM->VALUE->* TO <L_VALUE> .
READ TABLE LT_GT_ALV2 INTO LS_GT_ALV2 WITH KEY ID = <L_VALUE>.
LS_GT_DISPLAY-ID = LS_GT_ALV2-ID .
LS_GT_DISPLAY-NAME = LS_GT_ALV2-NAME .
LS_GT_DISPLAY-PHONE = LS_GT_ALV2-PHONE .
APPEND LS_GT_DISPLAY TO LT_GT_DISPLAY .
* navigate from <CONTEXT> to <GT_DISPLAY> via lead selection
LO_ND_GT_DISPLAY = WD_CONTEXT->GET_CHILD_NODE( NAME = WD_THIS->WDCTX_GT_DISPLAY ).
* @TODO handle non existant child
* IF lo_nd_gt_display IS INITIAL.
* ENDIF.
** @TODO compute values
** e.g. call a model function
*
LO_ND_GT_DISPLAY->BIND_TABLE( NEW_ITEMS = LT_GT_DISPLAY SET_INITIAL_ELEMENTS = ABAP_TRUE ).
自测效果: