CALL METHOD 和 -> 对 ALV 事件的行为不同。为什么?

CALL METHOD and -> behave differently for ALV events. Why?

我希望我的标题是正确的,因为我真的想不出对这个场景的简短描述。我会尽量简短:

我有一个可编辑的 ALV,它显示一些数据,每当用户输入数据并更改活动单元格(例如单击另一个单元格、按箭头键等)时,事件“data_changed”应触发 ALV 网格。

现在回答我的问题: 当我使用下面的代码时

*   ENTER key is pressed
    CALL METHOD go_grid->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_enter.

*   data is changed and cursor is moved from the cell
    CALL METHOD go_grid->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_modified.

事件按应有的方式触发。但是当我使用:

go_grid->register_edit_event( i_event_id = cl_gui_alv_grid=>mc_evt_enter ).
go_grid->register_edit_event( i_event_id = cl_gui_alv_grid=>mc_evt_enter ).

当我执行相同的操作时没有触发任何事件。 但这两种方式不是基本相同还是它们的功能彼此不同?文档还指出 CALL METHOD 已过时,不应再使用。

您没看错:CALL METHOD foo->bar EXPORTING x = y.foo->bar( x = y ). 做的事情完全一样。它们是相同功能的替代语法。

您遇到的行为差异可能是因为您实际上并没有在两个代码片段中做同样的事情。

在第一个代码段中,您将 mc_evt_enter 传递给第一个方法调用,将 mc_evt_modified 传递给第二个方法调用。但是在第二个代码片段中,您将 mc_evt_enter 传递给 both 方法调用。

试试这个:

go_grid->register_edit_event( i_event_id = cl_gui_alv_grid=>mc_evt_enter ).
go_grid->register_edit_event( i_event_id = cl_gui_alv_grid=>mc_evt_modified ).