Show TOC Anfang des Inhaltsbereichs

Hintergrunddokumentation Methode PROCESS_NORMAL_FUNCTION  Dokument im Navigationsbaum lokalisieren

Mit dieser Methode werden die Funktionscodes abgearbeitet.

Wenn Sie keine eigenen Funktionscodes definiert haben, brauchen Sie diese Methode nicht zu redefinieren. Wenn Sie jedoch auf eigene Funktionscodes reagieren möchten, müssen Sie das gewünschte Verhalten hier selbst implementieren.

Funktionscode ‚Doppelklick’

Der wichtigste Funktionscode ist der ‚Doppelklick’ auf ein Feld.

Beachten Sie beim Doppelklick Folgendes:

Sie müssen immer sicherstellen, dass das Objekt, das verlassen werden soll, vorher gesichert wird, sofern das Objekt geändert wurde.

Ob Sie etwas tun müssen, ist abhängig vom Navigationsziel:

      Navigation auf ein anderes BRF-Objekt:

Hier müssen Sie nichts tun. In der Standardauslieferung des BRF werden die Funktionsbausteine BRF_MAINTAIN_* verwendet, die das korrekte Verlassen der Objekte sicherstellen.

      Navigation auf eines der folgenden Objekte:

       Klasse

       DDIC-Struktur oder DDIC-Tabelle

       Feld einer Struktur/Tabelle

       Funktionsbaustein

       Programm

Hier können Sie den Funktionsbaustein BRF_CALL_WB_OBJECT verwenden. Dieser Funktionsbaustein stellt ebenfalls das korrekte Verlassen des aktuellen Objektes sicher.

      Navigation auf andere Objektarten

Sie müssen hier vor der eigentlichen Navigation den Funktionsbaustein BRF_PREPARE_FOR_LEAVE_OBJECT aufrufen.

 

Empfehlung 

       Wenn ein Feldinhalt ein Objekt repräsentiert (z.B. BRF-Ausdruck, DDIC-Struktur), kennzeichnen Sie das Feld im Screen-Painter als ‚doppelklick-sensitiv’ und ordnen Sie dem Feld den Funktionscode BRF_DBLCLK zu.

       Wenn Sie zu einem anderen BRF-Objekt navigieren, können Sie dieses im Änderungsmodus öffnen, wenn das aktuelle Objekt im Änderungs- oder Anlegenmodus bearbeitet wird.

Andernfalls öffnen Sie das Zielobjekt nur im Anzeigemodus.

       Wenn die Navigation zu einem Nicht-BRF-Objekt (z.B. Funktionsbaustein, DDIC-Struktur) erfolgt, öffnen Sie das Zielobjekt nur im Anzeigemodus.

 

Beispiel-Quelltext:

  DATA:

    lv_edit_mode TYPE brf_edit_mode,

    lv_cursor_field TYPE brf_cursor_field,

    lv_object_name  TYPE seu_objkey.

 

  ev_processed = mc_true.

 

  CASE mv_edit_mode.

    WHEN '1' OR '2'. lv_edit_mode = '2'.

    WHEN OTHERS. lv_edit_mode = '3'.

  ENDCASE.

 

  CASE iv_fcode.

    WHEN 'BRF_DBLCLK'.

      CALL FUNCTION 'BRF_GET_CURSOR'

        IMPORTING

          ev_cursor_field = lv_cursor_field.

 

      CASE lv_cursor_field.

        WHEN 'SBRF370-REF_EXPRESSION'.

 

          CALL FUNCTION 'BRF_MAINTAIN_EXPRESSION'

            EXPORTING

              iv_edit_mode         = lv_edit_mode

              iv_applclass         = ds_brf150-applclass

              iv_expression        = ms_brf370_scr-ref_expression

              iv_import_status     = 'A'

              iv_version           = 0

              iv_langu             = ds_brf150-langu

              iv_skip_entry_screen = mc_true

              iv_return_if_error   = mc_true.

 

        WHEN 'SBRF370-STRUCTURE_OUT'.

          lv_object_name = ms_brf370_scr-structure_out.

 

          CALL FUNCTION 'BRF_CALL_WB_OBJECT'

            EXPORTING

              iv_object_name = lv_object_name

              iv_object_type = 'DQ'.

 

        WHEN OTHERS.

          CALL METHOD super->if_maintenance_brf~process_normal_function

            EXPORTING

              iv_fcode     = iv_fcode

            IMPORTING

              ev_processed = ev_processed.

 

      ENDCASE.

 

    WHEN OTHERS.

      CALL METHOD super->if_maintenance_brf~process_normal_function

        EXPORTING

          iv_fcode     = iv_fcode

        IMPORTING

          ev_processed = ev_processed.

  ENDCASE.

 

ENDMETHOD.

 

Beschreibung:

Unmittelbar nach der Datendeklaration wird festgelegt, in welchem Bearbeitungsmodus andere BRF-Objekte ausgehend vom aktuellen geöffnet werden. Wenn sich das aktuelle Objekt im Anlegen- oder Änderungsmodus befindet, öffnet das System das Zielobjekt im Änderungsmodus. Andernfalls im Anzeigemodus.

Anschließend wird der Funktionscode ausgewertet. Im obigen Beispiel wird nur der Funktionscode BRF_DBLCLK ausgewertet. Andere Funktionscodes werden im WHEN OTHERS-Zweig an die Methode der Superklasse weitergegeben.

Über den Aufruf des Funktionsbausteins BRF_GET_CURSOR wird ermittelt, auf welchem Feld der Doppelklick stattgefunden hat. Abhängig vom Feld (hier ein Feld, das für einen Unterausdruck steht und ein weiteres, das für eine DDIC-Struktur steht) findet im Anschluss daran die Navigation statt. Dabei werden die oben aufgeführten Funktionsbausteine verwendet.

 

Wenn der Ausgangspunkt einer Navigation in einem Table Control liegt (SAP List Viewer), empfehlen wir Ihnen folgendes Vorgehen:

...

       1.      Implementieren Sie den Ereignisbehandler für den Doppelklick gemäß dem unten angeführten Beispiel (aus Klasse CL_RULES_MNT_BRF).

 

METHOD on_double_click .

 

  DATA:

    ls_brf210           TYPE sbrf210,

    ls_wbobject         TYPE sbrf_wbobject.

 

  READ TABLE mt_brf210_scr INTO ls_brf210 INDEX es_row_no-row_id.

 

  CASE e_column-fieldname.

    WHEN 'RULESET'.

      IF ls_brf210-ruleset IS NOT INITIAL.

 

        ls_wbobject-applclass     = ls_brf210-applclass.

        ls_wbobject-object        = ls_brf210-ruleset.

        ls_wbobject-category      = 'S'.

        ls_wbobject-version       = '0000'.

        ls_wbobject-import_status = 'A'.

 

        ms_nav_dest-wbobject  = ls_wbobject.

 

        cl_gui_cfw=>set_new_ok_code( new_code = 'BRF_NAV' ).

 

      ENDIF.

Beschreibung:

Entscheidend ist, dass das Navigationsziel im Instanzattribut MS_NAV_DEST gespeichert wird und dass der Funktionscode BRF_NAV ausgelöst wird. Damit stellen Sie sicher, dass PAI durchlaufen wird und damit auch die CUR-Strukturen/Tabellen versorgt werden.

Andernfalls würde die Navigation ausgehend vom Ereignisbehandler des Doppelklick ausgeführt werden. Die CUR-Strukturen/Tabellen würden nicht aktualisiert werden.

Sie müssen die Navigation daher in der Methode PROCESS_NORMAL_FUNCTION ausführen.

 

       2.      Implementieren Sie einen Funktionscode-Behandler für den Funktionscode BRF_NAV in der Methode PROCESS_NORMAL_FUNCTION. Das folgende Beispiel aus der Klasse CL_RULES_MNT_BRF zeigt eine mögliche Lösung:

 

  DATA:

    lv_edit_mode        TYPE brf_edit_mode.

 

  ev_processed = mc_true.

 

  CASE mv_edit_mode.

    WHEN '1' OR '2'. lv_edit_mode = '2'.

    WHEN OTHERS. lv_edit_mode = '3'.

  ENDCASE.

 

  CASE iv_fcode.

    WHEN 'BRF_NAV'.

 

      CALL FUNCTION 'BRF_CALL_OBJECT'

        EXPORTING

          iv_edit_mode         = lv_edit_mode

          iv_applclass         = ms_nav_dest-wbobject-applclass

          iv_object            = ms_nav_dest-wbobject-object

          iv_import_status     = ms_nav_dest-wbobject-import_status

          iv_version           = ms_nav_dest-wbobject-version

          iv_skip_entry_screen = mc_true

          iv_return_if_error   = mc_true

          iv_category          = ms_nav_dest-wbobject-category.

 

Beschreibung:

Der Funktionsbaustein BRF_CALL_OBJECT wird gemäß dieses Beispiels mit den Feldern des Attributes MS_NAV_DEST sowie ein paar Festwerten versorgt. Er führt dann die korrekte Navigation (ggf. mit Sichern des aktuellen Objekts) zum BRF-Zielobjekt durch.

Ende des Inhaltsbereichs