Sunday, July 13, 2008

Download document server image

By Joyjit Ghosh,
Kolkata, India.

*&---------------------------------------------------------------------

*& Report Z_DOWNLOAD_BDS_GRAPHICS

*&---------------------------------------------------------------------

*& Download image stored in document server

*&---------------------------------------------------------------------

REPORT z_download_bds_graphics .

***********************************************************************

* Variable declaration

***********************************************************************

DATA: v_graphic_size TYPE i,

v_graphic_xstr TYPE xstring,

v_graphic_conv TYPE i,

v_graphic_offs TYPE i,

v_file TYPE string.

***********************************************************************

* Table declaration

***********************************************************************

DATA: BEGIN OF i_graphic_table OCCURS 0,

line(255) TYPE x,

END OF i_graphic_table.

***********************************************************************

* Structure declaration

***********************************************************************

DATA: st_stxbitmaps TYPE stxbitmaps.

***********************************************************************

* Selection screen

***********************************************************************

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

PARAMETERS: p_object LIKE st_stxbitmaps-tdobject DEFAULT 'GRAPHICS'

MODIF ID abc ,

p_name LIKE st_stxbitmaps-tdname,

p_id LIKE st_stxbitmaps-tdid DEFAULT 'BMAP'

MODIF ID abc ,

p_type LIKE st_stxbitmaps-tdbtype,

p_dir TYPE localfile.

SELECTION-SCREEN END OF BLOCK b1.

***********************************************************************

* At Selection-screen output event

***********************************************************************

AT SELECTION-SCREEN OUTPUT.

LOOP AT SCREEN.

IF screen-group1 = 'ABC' .

screen-input = '0'.

MODIFY SCREEN.

ENDIF.

ENDLOOP.

***********************************************************************

* At Selection-screen on value-request event

***********************************************************************

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_dir.

DATA: l_folder TYPE string.

CALL METHOD cl_gui_frontend_services=>directory_browse

EXPORTING

window_title = 'Select Folder'

initial_folder = 'C:\'

CHANGING

selected_folder = l_folder

EXCEPTIONS

cntl_error = 1

error_no_gui = 2

not_supported_by_gui = 3

OTHERS = 4.

IF sy-subrc = 0.

p_dir = l_folder.

ENDIF.

***********************************************************************

* Start-of-selection event

***********************************************************************

START-OF-SELECTION.

st_stxbitmaps-tdobject = p_object.

st_stxbitmaps-tdname = p_name.

st_stxbitmaps-tdid = p_id.

st_stxbitmaps-tdbtype = p_type.

* Get the bmp image from BDS in hex string format

CALL METHOD cl_ssf_xsf_utilities=>get_bds_graphic_as_bmp

EXPORTING

p_object = st_stxbitmaps-tdobject

p_name = st_stxbitmaps-tdname

p_id = st_stxbitmaps-tdid

p_btype = st_stxbitmaps-tdbtype

RECEIVING

p_bmp = v_graphic_xstr

EXCEPTIONS

not_found = 1

internal_error = 2

OTHERS = 3.

IF sy-subrc = 0.

* Find the length of hex string

v_graphic_size = xstrlen( v_graphic_xstr ).

CHECK v_graphic_size > 0.

v_graphic_conv = v_graphic_size.

v_graphic_offs = 0.

* Populate internal table from this hex string

WHILE v_graphic_conv > 255.

i_graphic_table-line = v_graphic_xstr+v_graphic_offs(255).

APPEND i_graphic_table.

v_graphic_offs = v_graphic_offs + 255.

v_graphic_conv = v_graphic_conv - 255.

ENDWHILE.

i_graphic_table-line = v_graphic_xstr+v_graphic_offs(v_graphic_conv).

APPEND i_graphic_table.

* Prepare file name and file path

CONCATENATE p_dir '\' p_name '.BMP' INTO v_file.

* Download image

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

bin_filesize = v_graphic_size

filename = v_file

filetype = 'BIN'

TABLES

data_tab = i_graphic_table

EXCEPTIONS

file_write_error = 1

no_batch = 2

gui_refuse_filetransfer = 3

invalid_type = 4

no_authority = 5

unknown_error = 6

header_not_allowed = 7

separator_not_allowed = 8

filesize_not_allowed = 9

header_too_long = 10

dp_error_create = 11

dp_error_send = 12

dp_error_write = 13

unknown_dp_error = 14

access_denied = 15

dp_out_of_memory = 16

disk_full = 17

dp_timeout = 18

file_not_found = 19

dataprovider_exception = 20

control_flush_error = 21

OTHERS = 22.

IF sy-subrc = 0.

WRITE: 'File downloaded successfully'(002).

ELSE.

WRITE: 'Error during file download'(003).

ENDIF.

ELSE.

CASE sy-subrc.

WHEN 1.

WRITE: 'Image not found'(004).

WHEN OTHERS.

WRITE: 'Error in Image retrieval'(005).

ENDCASE.

ENDIF.


No comments: