防止用户在 MESSAGE 类型 I 上按回车键?

Prevent user from Enter-pressing on MESSAGE type I?

有没有办法在显示 MESSAGE TYPE I 时禁用回车键?用户只是在不阅读的情况下按下笔记。

我们想强迫他们实际点击绿色按钮来确认消息(是的,我知道这很愚蠢,但我的任务是实现这个所以 wcyd)。

      SELECT SINGLE text
      FROM ZWM_MATVERMERK
      INTO lv_verm
      WHERE matnr = <lf_main>-matnr
      AND werk = <lf_main>-werks.

      IF lv_verm IS NOT INITIAL. 
      MESSAGE | Note: { lv_verm } | TYPE 'I'.
      CLEAR lv_verm.
      ENDIF.

您可以使用功能模块 POPUP_TO_CONFIRM 创建模态对话框,它比标准 MESSAGE TYPE 'I' 提供更多控制权。

除此之外,此功能模块具有参数 default_button,它决定弹出窗口出现时哪个按钮是突出显示的,因此当用户按下回车键时将被视为已单击。

DATA lv_answer TYPE c.
CALL FUNCTION 'POPUP_TO_CONFIRM'
    EXPORTING
        text_question = 'Are you sure?'
        default_button = 2
    IMPORTING
        answer = lv_answer.
" lv_answer will be '1' for yes, '2' for no and 'A' for canceling the dialog.

如果你想真正真正确定用户阅读了邮件,那么一种选择是使用POPUP_TO_GET_ONE_VALUE让用户确认他们阅读了邮件通过背诵其中的内容来传达信息。

DATA lv_answer TYPE c.
DATA lv_value TYPE pvarfield.

CALL FUNCTION 'POPUP_TO_GET_ONE_VALUE'
    EXPORTING
        titel = 'Safety check'
        textline1 = |This operation will affect { lv_count } items.|
        textline2 = |When you are aware of that, please enter "{ lv_count }" below:|
        valuelength = 20
    IMPORTING
        answer = lv_answer
        value1 = lv_value.

IF lv_answer = 'J' and lv_value = lv_count.
    "...proceed...
ENDIF.

这看起来像这样:


顺便说一句:还有很多以 POPUP_* 开头的标准功能模块,涵盖了模态对话框的各种常见用例。其中一些可能非常有用。