Drag’n’Drop mit Datei
In diesem Beispiel zeigen wir, wie Sie eine Datei aus dem Windows-Explorer auf ein SAP-Control ziehen können und den Dateipfad sowie Dateinamen angezeigt bekommen. So lässt sich z.B. eine Anwendung programmieren, die Dateien per Drag’n’Drop entgegen nimmt und auf den Application server hoch lädt.
SAP-Controls und Drag’n’Drop
SAP-Controls können normalerweise nur DragDropObjekte aufnehmen, die auch von einem SAP-Control erzeugt wurden.
Ausnahmen sind der ABAP-Editor und das TextEditControl: Sie können eine Textdatei auf das Control ziehen und der Inhalt wird im Control dargestellt.
Leider feuert kein Control ein Event “DropComplete”, auf das man reagieren könnte, geschweige denn, dass man schon bei “onDrop” entscheiden könnte, ob man dieses Objekt haben möchte oder nicht.
Eine Ausnahme bildet das HTML-Control, das ja den Internet Explorer verwendet um HTML- oder PDF-Dateien anzuzeigen.
Das Control CL_GUI_HTML_VIEWER erzeugt das Ereignis “NAVIGATE_COMPLETE”, sobald die “Navigation” abgeschlossen wurde. Eine Datei, die per Drag and Drop auf dieses Control gezogen wird, löst ebenfalls dieses Ereignis aus.
Beschreibung
Dieses Programm dockt das HTML-Control an das Selektionsbild an und zeigt die URL einer ge-drop-ten Datei an.
Code
REPORT z_dock_drop. *** Selection screen PARAMETERS: p_url TYPE string. INITIALIZATION. PERFORM create_objects. *----------------------------------------------------------------------* * CLASS lcl_event_receiver DEFINITION *----------------------------------------------------------------------* CLASS lcl_event_receiver DEFINITION. PUBLIC SECTION. CLASS-METHODS: handle_navigate_complete FOR EVENT navigate_complete OF cl_gui_html_viewer IMPORTING url sender. ENDCLASS. "lcl_event_receiver DEFINITION *----------------------------------------------------------------------* * CLASS lcl_event_receiver IMPLEMENTATION *----------------------------------------------------------------------* CLASS lcl_event_receiver IMPLEMENTATION. METHOD handle_navigate_complete. p_url = url. * sender->go_back( ). "If object should not be displayed ENDMETHOD. "handle_sapevent ENDCLASS. "lcl_event_receiver IMPLEMENTATION *&---------------------------------------------------------------------* *& Form CREATE_OBJECTS *&---------------------------------------------------------------------* FORM create_objects. *** Data DATA cl_docker TYPE REF TO cl_gui_docking_container. DATA t_events TYPE cntl_simple_events. DATA wa_event LIKE LINE OF t_events. DATA event_receiver TYPE REF TO lcl_event_receiver. DATA t_html TYPE STANDARD TABLE OF text8192 WITH NON-UNIQUE DEFAULT KEY. DATA html LIKE LINE OF t_html. DATA url TYPE text1000. DATA cl_html TYPE REF TO cl_gui_html_viewer. *** create docker CREATE OBJECT cl_docker EXPORTING extension = 300 side = cl_gui_docking_container=>dock_at_bottom no_autodef_progid_dynnr = 'X'. *** create HTML CREATE OBJECT cl_html EXPORTING parent = cl_docker. *** Register NAVIGATE_COMPLETE CALL METHOD cl_html->get_registered_events IMPORTING events = t_events. wa_event-eventid = cl_gui_html_viewer=>m_id_navigate_complete. wa_event-appl_event = 'X'. READ TABLE t_events TRANSPORTING NO FIELDS WITH KEY eventid = wa_event-eventid. IF sy-subrc <> 0. APPEND wa_event TO t_events. ENDIF. CALL METHOD cl_html->set_registered_events EXPORTING events = t_events. SET HANDLER lcl_event_receiver=>handle_navigate_complete FOR cl_html. *** Build HTML-Code CONCATENATE '<html>' '<head><title>Dropzone</title>' '</head>' '<body bgcolor="#22FF22">' '<p><font size= 30>hierher mit den Bildern!!</font></p>' '</body>' '</html>' INTO html. APPEND html TO t_html. *** load HTML CALL METHOD cl_html->load_data IMPORTING assigned_url = url CHANGING data_table = t_html. *** Show HTML page CALL METHOD cl_html->show_url EXPORTING url = url. ENDFORM. " CREATE_OBJECTS
- 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