alv双击不显示debug

本文分享了ABAP中ALV双击事件不触发的问题排查经历。作者通过设置断点发现双击时确实调用了USER_COMMAND函数,但因SY-SUBRC被置为4导致后续代码未执行。文章总结了实现ALV双击功能所需的三个关键步骤。

之前写的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参数是这么设定的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值