Skip to content

MessageBox

Modaler Dialog, der den Anwender unterbricht und eine Entscheidung erfordert. Im Unterschied zum MessageToast blockiert die MessageBox die View, bis der Anwender eine Aktion auswählt.

Wie der Toast ist auch die MessageBox keine Designer-Komponente, sondern wird zur Laufzeit über Helper-Methoden der gebundenen Klasse erzeugt.

Verwendung

Eine MessageBox wird in zwei Schritten verwendet:

  1. me->create_message_box( ... ) liefert eine MessageBox-Instanz
  2. me->set_message_box( ... ) zeigt sie an
abap
DATA(lo_box) = me->create_message_box(
  iv_text         = 'Möchten Sie wirklich speichern?'
  iv_msg_box_type = /mobbuild/cl_msg_box_type=>co_confirm ).

me->set_message_box( lo_box ).

Wählt der Anwender eine Aktion, erzeugt das System ein PAI-Event mit dem Sender 'MessageBox' und dem Action-Key (z.B. OK, Yes, No, Cancel, oder ein Custom-Wert).

Parameter von create_message_box

ParameterTypBedeutung
iv_textStringAnzeigetext im Dialog
iv_msg_box_typeKonstanteTyp der MessageBox – siehe /mobbuild/cl_msg_box_type

MessageBox-Typen

Konstanten aus /mobbuild/cl_msg_box_type:

KonstanteBedeutung
co_confirmBestätigungsdialog (Yes/No)
co_informationReine Information (OK)
co_warningWarnung
co_errorFehler
co_successErfolgsmeldung
co_alertAlarm / Achtung

Aktionen hinzufügen

MethodeZweck
ADD_ACTIONStandard-Aktion hinzufügen (Konstante aus /mobbuild/cl_msg_box_action)
ADD_CUSTOM_ACTIONBeliebige Aktion mit eigenem Text hinzufügen
SET_EMPHASIZED_ACTIONEine Aktion als hervorgehobenen Standard-Button markieren

Konstanten aus /mobbuild/cl_msg_box_action: co_ok, co_yes, co_no, co_cancel, co_close, co_abort, co_retry, co_ignore, co_delete.

Die Parameter iv_submit steuert, ob beim Klick ein PAI-Event ausgelöst werden soll.

Auswertung der Anwender-Auswahl

Die ausgewählte Aktion kommt als PAI-Event mit sender = 'MessageBox' und event_key = '<action>' (z.B. OK, Yes, oder Custom-Action) zurück.

abap
IF me->get_event( )->get_sender( ) EQ 'MessageBox'.
  CASE me->get_event( )->get_event_key( ).
    WHEN 'Yes'.    " ...
    WHEN 'No'.     " ...
    WHEN OTHERS.   " ...
  ENDCASE.
ENDIF.

Beispiel: /mobbuild/cl_ex_msg_box

Das Beispiel zeigt drei Patterns: Standard-MessageBox, MessageBox mit Custom-Action und MessageBox mit hervorgehobener Aktion.

abap
METHOD on_pai.

  me->init( ).

  DATA(lo_event)        = me->get_event( ).
  DATA(lv_event_key)    = lo_event->get_event_key( ).
  DATA(lv_event_sender) = lo_event->get_sender( ).

  IF ( lv_event_sender NE 'MessageBox' AND lv_event_key EQ 'CreateDefault' ).
    me->show_box_default( ).
  ENDIF.

  IF ( lv_event_sender NE 'MessageBox' AND lv_event_key EQ 'CreateCustom' ).
    me->show_box_custom( ).
  ENDIF.

  IF ( lv_event_sender NE 'MessageBox' AND lv_event_key EQ 'CreateEmphasized' ).
    me->show_box_emphasized( ).
  ENDIF.

  IF lv_event_sender EQ 'MessageBox'.
    me->set_message_toast(
      me->create_message_toast( iv_text = |confirmed:{ lv_event_key }| ) ).
    me->init_controls( ).
  ENDIF.

ENDMETHOD.

Standard-MessageBox

abap
METHOD show_box_default.

  DATA(lv_text)         = me->get_input( 'txtTextDefault' )->get_value( ).
  DATA(lv_msg_box_type) = me->get_combo_box( 'cbMessageBoxType' )->get_selected_key( ).

  DATA(lo_message_box) = me->create_message_box(
    iv_text         = lv_text
    iv_msg_box_type = lv_msg_box_type ).

  me->set_message_box( lo_message_box ).

ENDMETHOD.

MessageBox mit Custom-Action

abap
METHOD show_box_custom.

  DATA(lv_text)   = me->get_input( 'txtTextCustom' )->get_value( ).
  DATA(lv_action) = me->get_combo_box( 'cbMessageBoxAction' )->get_value( ).
  DATA(lv_submit) = me->get_switch( 'switchSubmit' )->get_state( ).

  DATA(lo_message_box) = me->create_message_box(
    iv_text         = lv_text
    iv_msg_box_type = /mobbuild/cl_msg_box_type=>co_confirm ).

  lo_message_box->add_custom_action(
    iv_action = lv_action
    iv_submit = lv_submit ).

  me->set_message_box( lo_message_box ).

ENDMETHOD.

MessageBox mit hervorgehobener Aktion

abap
METHOD show_box_emphasized.

  DATA(lo_message_box) = me->create_message_box(
    iv_text         = |Is it raining tomorrow?|
    iv_msg_box_type = /mobbuild/cl_msg_box_type=>co_confirm ).

  lo_message_box->add_action(
    iv_action = /mobbuild/cl_msg_box_action=>co_yes
    iv_submit = abap_true ).

  lo_message_box->add_action(
    iv_action = /mobbuild/cl_msg_box_action=>co_no
    iv_submit = abap_true ).

  lo_message_box->set_emphasized_action(
    iv_action = /mobbuild/cl_msg_box_action=>co_yes ).

  me->set_message_box( lo_message_box ).

ENDMETHOD.

Wann Toast vs. MessageStrip vs. MessageBox?

  • MessageBox – modale Rückfrage, die zwingend eine Anwender-Aktion erfordert
  • MessageStrip – persistenter, nicht-modaler Hinweis innerhalb der View
  • MessageToast – kurze, automatisch ausgeblendete Erfolgs-/Hinweismeldung

Nächste Schritte