Pfadauswahl mit DIRECTORY_BROWSE
Um einen Dateipfad auf dem Frontend auszuwählen, gibt es die Methode DIRECTORY_BROWSE der Klasse CL_GUI_FRONTEND_SERVICES. Um sie jedoch in der F4-Hilfe eines Reports sinnvoll verwenden zu können, muss man sich noch eines Tricks bedienen. Das Problem: Bei Aufruf der F4-Hilfe steht der Wert des Parameters für den die F4-Hilfe aufgerufen wurde, nicht zur Verfügung.
Aus diesem Grund muss der Feldinhalt explizit mit Hilfe des Funktionsbausteins DYNP_VALUES_READ gelesen werden.
Coding
REPORT z_test_browse_directory. *== SELECTION SCREEN PARAMETERS p_path TYPE text200 OBLIGATORY LOWER CASE. *== Help Value path AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. PERFORM f4_path. *== init INITIALIZATION. PERFORM get_download_path. *&---------------------------------------------------------------------* *& Form get_download_path *&---------------------------------------------------------------------* FORM get_download_path. *== local data DATA lv_upload_path TYPE string. DATA lv_download_path TYPE string. *== get current download path CALL METHOD cl_gui_frontend_services=>get_upload_download_path CHANGING upload_path = lv_upload_path download_path = lv_download_path. *== set parameter p_path = lv_download_path. ENDFORM. "get_download_path *&---------------------------------------------------------------------* *& Form f4_path *&---------------------------------------------------------------------* FORM f4_path. *== local data DATA lv_out TYPE string. DATA lv_in TYPE string. DATA lt_fields TYPE TABLE OF dynpread. DATA ls_field TYPE dynpread. *== get current value for path ls_field = 'P_PATH'. APPEND ls_field TO lt_fields. CALL FUNCTION 'DYNP_VALUES_READ' EXPORTING dyname = sy-cprog dynumb = sy-dynnr TABLES dynpfields = lt_fields EXCEPTIONS OTHERS = 1. IF sy-subrc = 0. READ TABLE lt_fields INTO ls_field INDEX 1. lv_in = ls_field-fieldvalue. ENDIF. *== call popup for directory selection CALL METHOD cl_gui_frontend_services=>directory_browse EXPORTING initial_folder = lv_in CHANGING selected_folder = lv_out EXCEPTIONS OTHERS = 4. IF sy-subrc = 0 AND lv_out IS NOT INITIAL. *== set selected path p_path = lv_out. ELSE. *== set origin path p_path = lv_in. ENDIF. ENDFORM.
Verwendung in einer Suchhilfe
Einfacher und sinnvoller jedoch ist die Verwendung in einer Suchhilfe! Warum? Erstens kann die Suchhilfe an ein entsprechendes Feld einer Dictionarystruktur angebunden werden und zweitens lässt sich auch in einem Report eine Suchhilfe einfacher verwenden.
Das Programm reduziert sich so auf die folgende Angabe bei dem Parameter P_PATH:
PARAMETERS p_path TYPE string OBLIGATORY LOWER CASE MATCHCODE OBJECT ZSH_DIRECTORY.
du ahnst es schon: Die Suchhilfe heißt in diesem Fall ZSH_DIRECTORY. Um diese zu erstellen musst du folgendes tun:
- Anlage der Suchhilfe in der SE11
- Anlage eines Funktionsbausteins, der als Suchhilfe-Exit verwendet wird.
Wir fangen bei 2. an:
2. Anlage Suchhilfe-Exit
Du benötigst eine Funktionsgruppe. Einfach in der SE80 eine anlegen. In diese Funktionsgruppe kopierst du den Baustein F4IF_SHLP_EXIT_EXAMPLE auf den Baustein Z_F4IF_SHLP_EXIT_DIRECTORY. Das Kopieren ist wichtig, da die Suchhilfe-Exit-Bausteine eine definierte Schnittstelle haben.
Im STEP SELECT fügst du das Coding ein, dessen Kern wir bereits aus dem vorherigen Coding kennen:
IF callcontrol-step = 'SELECT'. *== data (please set data definitions to top of function module!) DATA lv_in TYPE string. DATA lv_out TYPE string. FIELD-SYMBOLS <itf> LIKE LINE OF shlp-interface. FIELD-SYMBOLS <rec> LIKE LINE OF record_tab. *== get field value READ TABLE shlp-interface WITH KEY shlpfield = 'PATH' ASSIGNING <itf>. IF sy-subrc = 0. *== use field value as start directory lv_in = <itf>-value. *== call popup for directory selection CALL METHOD cl_gui_frontend_services=>directory_browse EXPORTING initial_folder = lv_in CHANGING selected_folder = lv_out EXCEPTIONS OTHERS = 4. IF sy-subrc = 0 AND lv_out IS NOT INITIAL. APPEND INITIAL LINE TO record_tab ASSIGNING <rec>. <rec>-string = lv_out. callcontrol-step = 'RETURN'. ENDIF. ENDIF. ENDIF.
Grob passiert folgendes:
- Wir lesen aus der Schnittstellenbeschreibung den Parameter PATH, den wir in der Suchhilfe definiert haben, aus und verwenden ihn als Startverzeichnis
- Aufruf der Methode DIRECTORY_BROWSE
- Füllen der Rückgabetabelle RECORD_TAB
- Setzen des Folgeschrittes RETURN um die Anzeige des gefundenen Verzeichnisses im Popup zu verhindern
[notice type=’info’]Eventuell kann es sein, dass in dem Beispiel das Startverzeichnis nicht in die Suchhilfe übernommen wird. In dem Fall muss gegebenenfalls ebenfalls der Funktionsbaustein DYNP_VALUES_READ eingesetzt werden. Das verwendete Parametername steht in der INTERFACE-Struktur im Feld VALFIELD.[/notice]
1. Anlage der Suchhilfe
Transaktion SE11: Suchhilfe Anlegen:
In der Suchhilfe muss der erstellte Funktionsbaustein als Suchhilfe-Exit eingetragen werden:
- 7. December: Excel Racing Simulation – Root Vole Race - 7. Dezember 2024
- 5. December: ABAPConf - 5. Dezember 2024
- 4. December: Only a lazy developer is a good developer - 4. Dezember 2024