Methode PROCESS_NORMAL_FUNCTION
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.
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.
■ 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.