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, die mit iv_submit = abap_true hinzugefügt wurde, erzeugt das System ein PAI-Event mit dem Sender 'MessageBox' und dem Action-Key. Standard-Aktionen kommen in Großbuchstaben an (OK, YES, NO, CANCEL, …), Custom-Aktionen exakt so, wie sie übergeben wurden.

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 – vorbelegt mit OK (hervorgehoben, löst ein PAI-Event aus) und CANCEL; der erste eigene Aufruf von add_action/add_custom_action ersetzt diese Vorbelegung
co_informationReine Information (OK)
co_warningWarnung
co_errorFehler
co_successErfolgsmeldung
co_alertAlarm / Achtung

Alle übrigen Typen kommen ohne vorbelegte Aktion; ein PAI-Event gibt es nur für Aktionen, die Sie selbst mit iv_submit = abap_true hinzufügen.

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.

Der Parameter iv_submit (Default abap_false) steuert, ob der Klick auf die Aktion ein PAI-Event auslöst.

Auswertung der Anwender-Auswahl ​

Die ausgewählte Aktion kommt als PAI-Event mit sender = 'MessageBox' und event_key = '<action>' (z.B. OK, YES oder der Text einer 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 (Auszug) ​

Das Beispiel zeigt drei Patterns: Standard-MessageBox, MessageBox mit Custom-Action und MessageBox mit hervorgehobener Aktion. me->init( ) ist eine private Hilfsmethode des Beispiels, die die ValueStates der Eingabefelder zurücksetzt.

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 ​