Vous êtes sur la page 1sur 3

method GET_SCREENSHOT.

"-type declarations---------------------------------------------------
TYPES: t_table_line(256) TYPE X,
t_image_table_line TYPE STANDARD TABLE OF t_table_line.
"-variables-----------------------------------------------------------
DATA: feature_supported_b TYPE ABAP_BOOL,
gui_available_b TYPE CHAR1,
image_size_i TYPE I,
image_size_str TYPE STRING,
image_table TYPE t_image_table_line,
result_str TYPE STRING,
rc_str TYPE STRING,
table_line TYPE t_table_line.
"-initial checks------------------------------------------------------
CALL FUNCTION 'GUI_IS_AVAILABLE' " check if running in batch, etc.
IMPORTING
return = gui_available_b.
IF gui_available_b IS INITIAL.
RAISE ERROR_NO_GUI.
ENDIF.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>CHECK_GUI_SUPPORT
EXPORTING " check GUI screenshot support
COMPONENT = 'sapinfocntl'
FEATURE_NAME = 'GET_SCREENSHOT'
RECEIVING
RESULT = feature_supported_b
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
WRONG_PARAMETER = 3
NOT_SUPPORTED_BY_GUI = 4
UNKNOWN_ERROR = 5
others = 6.
IF ( SY-SUBRC <> 0 ) OR ( feature_supported_b = ABAP_FALSE ).
RAISE NOT_SUPPORTED_BY_GUI.
ENDIF.
"-initialization------------------------------------------------------
CLEAR mime_type_str.
CLEAR image.
* begin special handling for SAPGUI for HTML
IF CL_GUI_CONTROL=>WWW_ACTIVE IS NOT INITIAL.
CALL FUNCTION 'ITS_GET_SCREENSHOT'
IMPORTING
MIME_TYPE_STR = MIME_TYPE_STR
IMAGE = IMAGE
EXCEPTIONS
ACCESS_DENIED = 1
NOT_SUPPORTED_BY_GUI = 2
CNTL_ERROR = 3
OTHERS = 4.
CASE SY-SUBRC.
WHEN '0'.
WHEN '1'.
RAISE ACCESS_DENIED.
WHEN '2'.
RAISE NOT_SUPPORTED_BY_GUI.
WHEN OTHERS.
RAISE CNTL_ERROR.
ENDCASE.
EXIT.
ENDIF.
* end special handling for SAPGUI for HTML
"-send data table to frontend-----------------------------------------
CALL FUNCTION 'DP_CONTROL_ASSIGN_TABLE'
EXPORTING
H_CNTL = HANDLE->H_CONTROL
MEDIUM = CNDP_MEDIUM_R3TABLE
PROPERTYNAME = 'R3TABLE'
TABLES
DATA = image_table
EXCEPTIONS
DP_ERROR_CREATE = 1
DP_ERROR_SEND_DATA = 2
DP_ERROR_ASSIGN = 3
DP_ERROR_INVALID_PARAM = 4
DP_ERROR_TABNAME = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
RAISE CNTL_ERROR.
ENDIF.
"-create screenshot of topmost modal----------------------------------
CALL METHOD HANDLE->CALL_METHOD
EXPORTING
METHOD = 'CreateScreenshot'
IMPORTING
RESULT = result_str
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0.
RAISE CNTL_ERROR.
ENDIF.
CALL METHOD CL_GUI_CFW=>FLUSH
EXCEPTIONS
CNTL_SYSTEM_ERROR = 1
CNTL_ERROR = 2
others = 3.
IF SY-SUBRC <> 0.
RAISE CNTL_ERROR.
ENDIF.
SPLIT result_str AT ';' INTO rc_str image_size_str mime_type_str.
image_size_i = image_size_str.
CASE rc_str.
WHEN '0'.
WHEN '1'.
RAISE ACCESS_DENIED.
WHEN OTHERS.
RAISE CNTL_ERROR.
ENDCASE.
"-retrieve image data from frontend-----------------------------------
CALL FUNCTION 'DP_CONTROL_GET_TABLE'
EXPORTING
H_CNTL = HANDLE->H_CONTROL
PROPERTYNAME = 'R3TABLE'
MEDIUM = CNDP_MEDIUM_R3TABLE
TABLES
DATA = image_table
EXCEPTIONS
DP_ERROR_CREATE = 1
DP_ERROR_GET_PROPERTY = 2
DP_ERROR_GET_DATA = 3
DP_ERROR_INVALID_PARAM = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
RAISE CNTL_ERROR.
ENDIF.
LOOP AT image_table INTO table_line.
IF image_size_i > 256.
image = image && table_line.
image_size_i = image_size_i - 256.
ELSE.
image = image && table_line+0(image_size_i).
image_size_i = 0.
ENDIF.
ENDLOOP.
endmethod.

Vous aimerez peut-être aussi