0

我想覆盖 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 中输入(我通过调试对其进行测试)

4

1 回答 1

1

我不知道这是否适合你,但你可能想要 ALV 对象模型——它有更好的文档——例如参见本章关于处理函数和事件的内容。更重要的是,它是官方支持的——如果你使用它并且它不能正常工作,你会得到帮助,而不是习惯性的“你正在使用未发布的内部类/功能模块”的话。看看demo程序(SALV_DEMO_*或者DEMO_SALV_*,记不得了。)

再说一次,如果你想定义一个自定义的排序机制,你可能应该只是隐藏默认按钮并插入你自己的具有不同功能代码的按钮。谁知道,在第 42 版中,有人可能会想出再次启用默认排序的想法,然后您就不必再次调整所有内容了……

于 2012-04-11T20:19:53.343 回答