我想覆盖ALV网格中的某些函数。但是我无法使用回调用户命令来做到这一点。这仅适用于非标准功能。知道吗?我应该使用事件退出吗?我尝试了一些东西,但也无法做到:P
FORM event_exits.
CLEAR wa_eventexit.
wa_eventexit-ucomm = '&OUP'.
wa_eventexit-before = 'X'.
APPEND wa_eventexit TO it_eventexit.
CLEAR wa_eventexit.
wa_eventexit-ucomm = '&ODN'.
wa_eventexit-before = 'X'.
APPEND wa_eventexit TO it_eventexit.
ENDFORM. "event_exits
FORM user_command Using r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN '&OUP'.
IF ck_del = 'X'.
SORT gt_salord BY audat vbeln lfimg ASCENDING.
ELSE.
SORT gt_salord BY audat vbeln kwmeng ASCENDING.
ENDIF.
WHEN '&ODN'.
IF ck_del = 'X'.
SORT gt_salord BY audat vbeln lfimg DESCENDING.
ELSE.
SORT gt_salord BY audat vbeln kwmeng DESCENDING.
ENDIF.
WHEN 'D01'.
BREAK-POINT.
ENDCASE.
CLEAR sy-ucomm.
ENDFORM. "user_command
D01 函数仅用于测试,因此当我访问它时,我可以看到它进入user_command。但是当我访问函数 &OUP 时,它不再进入 CASE 中(我通过调试对其进行测试)
我不知道这是否适合您,但您可能想要 ALV 对象模型 - 它有更好的文档记录 - 例如,请参阅有关处理函数和事件的本章。更重要的是,它是官方支持的 - 如果你使用它并且它不能正常工作,你会得到帮助,而不是习惯的"你正在使用未发布的内部类/函数模块"的评论。看看演示程序(SALV_DEMO_*或DEMO_SALV_*,记不住。
再说一次,如果要定义自定义排序机制,则可能应该只保留默认按钮并插入具有不同功能代码的按钮。谁知道呢,在版本 42 中,有人可能会想出再次启用默认排序的想法,然后您就不必再次调整所有内容......