Drag’n’Drop mit Datei

Drag and drop html

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
Enno Wulff

Leave a Comment