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

问题描述

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

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

现在我的问题: 当我使用以下代码

*   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 ).