CALL METHOD и -› ведут себя по-разному для событий ALV. Почему?

Я надеюсь, что правильно понял название, потому что я серьезно не могу придумать краткое описание для этого сценария. Постараюсь кратко:

У меня есть редактируемый 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 устарело и больше не должно использоваться.


person Fabian D.    schedule 22.03.2021    source источник
comment
Предлагаю закрыть вопрос по причине опечатки ;-)   -  person Sandra Rossi    schedule 22.03.2021


Ответы (1)


Вы правильно прочитали: CALL METHOD foo->bar EXPORTING x = y. и foo->bar( x = y ). делают одно и то же. Это альтернативный синтаксис для той же функциональности.

Разница в поведении, с которой вы сталкиваетесь, может быть связана с тем, что на самом деле вы не делаете одно и то же в обоих фрагментах кода.

В первом фрагменте вы передаете mc_evt_enter первому вызову метода и mc_evt_modified второму вызову метода. Но во втором фрагменте кода вы передаете mc_evt_enter в вызовы обоих методов.

Попробуй это:

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 ).
person Philipp    schedule 22.03.2021
comment
ОМГ, да, спасибо! Мой тупой мозг просто скопировал первое утверждение и не изменил его, так как синтаксис выглядел одинаково. - person Fabian D.; 22.03.2021