之前写的alv程序双击一直不显示,找半天没有发现原因。回过头来看看,其实应该当时就发现原因,整理整理debug思路。首先alv双击不显示我应该在调用双击的函数里设置断点,可是因为我想到因为alv双击不显示那么肯定没有调用这个函数,因此没有在函数中设置断点,而是在程序中查找函数的参数设置是不是有问题。不过还是有点收获,我发现在函数REUSE_ALV_GRID_DISPLAY中的一个参数必须要设置,i_callback_user_command = 'USER_COMMAND',其中USER_COMMAND是我们自己写的函数,双击时会调用。
之后我在查找参数也不能发现什么。是在办法的情况下我在USER_COMMAND里设置断点,才发现原来双击时调用了USER_COMMAND函数。看代码:
CASE i_ucomm.
WHEN '&IC1'. " Pick
* IF sy-subrc EQ 0.
CALL TRANSACTION 'SE80'.
* ENDIF.
ENDCASE.
我发现每次双击时SY-SUBRC的值都被置为4!所以没有继续执行下面的语句。本来应该一分钟解决的问题我花了两个小时,所以不能相信主观臆断,要理性的对待debug。
最后总结一下要实现alv双击的几个条件:
l 注册双击事件
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = i_events.
READ TABLE i_events INTO w_events WITH KEY name = 'USER_COMMAND'.
IF sy-subrc EQ 0.
w_events-name = 'USER_COMMAND'.
MODIFY i_events FROM w_events INDEX sy-tabix.
ENDIF.
l 调用函数时i_callback_user_command参数设置
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
is_layout = i_layout
it_fieldcat = i_fieldcat_alv[]
it_events = i_events[]
i_grid_title = '销售周报'
i_callback_user_command = 'USER_COMMAND'
l 写一个双击函数
双击时的函数,函数名一定要是USER_COMMAND。因为之前i_callback_user_command参数是这么设定的。
本文分享了ABAP中ALV双击事件不触发的问题排查经历。作者通过设置断点发现双击时确实调用了USER_COMMAND函数,但因SY-SUBRC被置为4导致后续代码未执行。文章总结了实现ALV双击功能所需的三个关键步骤。

412

被折叠的 条评论
为什么被折叠?



