Menu

Screenshots in ABAP aufnehmen und speichern

2020-10-19       

Dieser kurze Blog-Beitrag enthält ein ABAP-Snippet, mit dem Sie einen Screenshot mit der bekannten Klasse CL_GUI_FRONTEND_SERVICES auf der Festplatte des SAP-ERP-Benutzers speichern können.

Unsere Literaturempfehlung

SAP – Der technische Einstieg: SAP-Technologien und Konzepte

Sind Sie neu in der SAP-Welt und möchten schnell mitreden? Mit diesem Buch finden Sie sich erfolgreich im SAP-Umfeld zurecht! Sie steigen direkt in die Konzepte und Technologien der SAP-Software ein und lernen die unterschiedlichen Systeme und Prozesse kennen. Schritt für Schritt zeigen die Autoren Ihnen die wichtigsten technischen Aufgaben und die Zusammenhänge zwischen den Objekten. Dank der vielen Beispiele und Abbildungen finden Sie sich schnell im SAP-Umfeld zurecht und können direkt in SAP ERP oder SAP S/4HANA anfangen.

Bei amazon.de ansehen →

Die ABAP-Klasse CL_GUI_FRONTEND_SERVICES ist ein vielseitiges Tool, das jeder SAP-ABAP-Entwickler kennen sollte. Es enthält viele äußerst hilfreiche Tools, die bei der Bewältigung grundlegender Anforderungen an die Benutzeroberfläche helfen, z. B. das Anzeigen von Bestätigungsdialogen, das Herunterladen von Daten oder natürlich das Erstellen von Screenshots.

Hier ist ein kurzes ABAP-Snippet, das zeigt, wie ein Screenshot in ABAP gespeichert wird. Während die Verwendung der Methode cl_gui_frontend_services=>get_screenshot offensichtlich erscheint, ist möglicherweise Hilfe erforderlich, um zu wissen, wie die Rohbilddaten in das SOLIX-Format konvertiert werden. Dieser Code zeigt, wie es geht.

ABAP-Programm: So erstellen und laden Sie einen Screenshot in ABAP herunter

DATA lv_imagebytes TYPE xstring.
DATA lv_mimetype TYPE string.
DATA lv_user_action TYPE i.
DATA lv_file_name TYPE string.
DATA lv_full_path TYPE string.
DATA lv_filepath TYPE string.

* Wrap everything in a try/catch block to capture exceptions
TRY.
    * Capture a screenshot, using CL_GUI_FRONTEND_SERVICES
    * After this operation, lv_mimetype will contain the MIME type of the image, such as "image/jpg"
    cl_gui_frontend_services=>get_screenshot(
        IMPORTING
            mime_type_str = lv_mimetype
            image         = lv_imagebytes
    ).

    * Show the default "save file" dialog
    cl_gui_frontend_services=>file_save_dialog( 
        EXPORTING
            default_file_name = 'screenshot.jpg'
            default_extension = 'jpg'
            file_filter       = '(*.jpg)|*.jpg|'
        CHANGING
            filename          = lv_file_name
            path              = lv_filepath
            fullpath          = lv_full_path
            user_action       = lv_user_action
    ).

    * Check if the user confirmed the dialog.
    * TODO: implement the cancel action.
    IF lv_user_action = cl_gui_frontend_services=>action_ok.

        * Create an internal table, converting the image bytestring to SOLIX.
        DATA(it_solix_data) = cl_bcs_convert=>xstring_to_solix(
            EXPORTING
                iv_xstring = lv_image_bytes
        ).

        * Download the screenshot to the user's file system.
        cl_gui_frontend_services=>gui_download(
            EXPORTING
                filename     = lv_full_path
                filetype     = 'BIN'
                bin_filesize = xstrlen(lv_image_bytes)
            CHANGING
                data_tab     = it_solix_data
        ).

    ENDIF.

    CATCH cx_root INTO DATA(e_error_message).
ENDTRY.