Application Development Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
satyajitds5
Explorer
In this blogpost you will learn to “Download spool to presentation server and application server in 3 formats – Excel, Text and HTML “.

In one of my projects I got a requirement to download the spool in Excel, text and HTML format in presentation/Application server.To convert spool into PDF, SAP has already provided a function module - CONVERT_ABAPSPOOLJOB_2_PDF and CONVERT_OTFSPOOLJOB_2_PDF.But unfortunately to convert in the above 3 formats there is no such Function module present.

Therefore, I have created 3 Function module’s for the 3 formats which converts the data and also download’s into desired location –

  1. Z_CONVERT_SPOOL_TO TEXT

  2. Z_CONVERT_SPOOL_TO_EXCEL

  3. Z_CONVERT_SPOOL_TO_HTML


We need to Pass the below values in our above 3 Function module’s and it will download the file in appropriate location:-

  1. Spool number

  2. Path of application server

  3. Path of presentation server


We can find the spool number and job status in TSP01 and TBTCO table.

Please see the below sample code for better understanding.

Report(Main Program) :
*&---------------------------------------------------------------------*
*& Report Z_SPOOL_TEST
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_spool_test.

* Selection screen
SELECTION-SCREEN BEGIN OF BLOCK b1.
PARAMETERS : p_spool TYPE rspoid, "Spool number
p_aser TYPE string, "Application server path
p_pser TYPE string, "Presentation server path
p_text RADIOBUTTON GROUP rb1, "Text format Radio button
p_excel RADIOBUTTON GROUP rb1, "Excel Format Radio button
p_html RADIOBUTTON GROUP rb1. "HTML format Radio button
SELECTION-SCREEN END OF BLOCK b1.

IF p_text = 'X'.
"Text format
CALL FUNCTION 'Z_CONVERT_SPOOL_TO_TEXT'
EXPORTING
spool_number = p_spool
app_serv_path = p_aser
local_serv_path = p_pser.

ELSEIF p_excel = 'X'. "Excel format

CALL FUNCTION 'Z_CONVERT_SPOOL_TO_EXCEL'
EXPORTING
spool_number = p_spool
app_serv_path = p_aser
local_serv_path = p_pser.

ELSEIF p_html = 'X'. "HTML format

CALL FUNCTION 'Z_CONVERT_SPOOL_TO_HTML'
EXPORTING
spool_number = p_spool
app_serv_path = p_aser
local_serv_path = p_pser.

ENDIF.

Selection screen :



  1. Text format Function Module - z_convert_spool_to_text



  • We can download the spool into the predefined path i.e. Application server/Presentation server in Text format.

  • The extension of file should be .txt that will be passed into the FM.


Please see the below code -
FUNCTION z_convert_spool_to_text.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(SPOOL_NUMBER) TYPE RSPOID
*" REFERENCE(APP_SERV_PATH) TYPE TEXT1024 OPTIONAL
*" REFERENCE(LOCAL_SERV_PATH) TYPE STRING OPTIONAL
*"----------------------------------------------------------------------

TYPES : tt_bapixmspop TYPE STANDARD TABLE OF bapixmspop.
DATA : lt_spool_attr_line TYPE bapixmspoolid,
lt_spool_list_plain TYPE tt_bapixmspop,
lt_dummy TYPE STANDARD TABLE OF rspoattr,
lv_rqattr TYPE tsp01,
lv_first_page TYPE i,
lv_last_page TYPE i,
lv_pages TYPE c.

CALL FUNCTION 'RSPO_GET_INFORMATION_SPOOLJOB'
EXPORTING
rqident = spool_number
IMPORTING
spool_attributes = lt_spool_attr_line
EXCEPTIONS
no_such_job = 1
read_error = 2
no_permission = 3
OTHERS = 4.
IF sy-subrc <> 0. ##FM_SUBRC_OK
ENDIF.

CALL FUNCTION 'RSPO_GET_ATTRIBUTES_SPOOLJOB'
EXPORTING
rqident = spool_number
IMPORTING
rq = lv_rqattr
TABLES
attributes = lt_dummy
EXCEPTIONS
no_such_job = 1
OTHERS = 2.
IF sy-subrc <> 0. ##FM_SUBRC_OK
ENDIF.

lv_first_page = 1.

CALL FUNCTION 'RSPO_RETURN_ABAP_SPOOLJOB'
EXPORTING
rqident = spool_number
first_line = lv_first_page
last_line = lv_last_page
pages = lv_pages
TABLES
buffer = lt_spool_list_plain
EXCEPTIONS
no_such_job = 1
not_abap_list = 2
job_contains_no_data = 3
selection_empty = 4
no_permission = 5
can_not_access = 6
read_error = 7
OTHERS = 8.
IF sy-subrc <> 0. ##FM_SUBRC_OK
ENDIF.

IF NOT lt_spool_list_plain IS INITIAL.
IF app_serv_path is NOT INITIAL.
* Download in Application server
FIELD-SYMBOLS <hex_container> TYPE any.
OPEN DATASET app_serv_path IN TEXT MODE FOR OUTPUT ENCODING DEFAULT WITH WINDOWS LINEFEED.
IF sy-subrc = 0.
LOOP AT lt_spool_list_plain ASSIGNING <hex_container> .
TRANSFER <hex_container> TO app_serv_path.
CLEAR <hex_container>.
ENDLOOP.
CLOSE DATASET app_serv_path.
MESSAGE 'File succesfully transferred' TYPE 'S' .
ELSE.
MESSAGE 'File cannot be opened' TYPE 'E' .
ENDIF.
ELSEIF local_serv_path is NOT INITIAL.
* Download in presentation server
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = local_serv_path
append = 'X'
TABLES
data_tab = lt_spool_list_plain
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.
MESSAGE 'File succesfully transferred' TYPE 'S' .
ENDIF.
else.
MESSAGE 'Please provide path for Application/Presentation server' TYPE 'E' .
ENDIF.
ENDIF.

ENDFUNCTION.


  1. Excel format Function Module - z_convert_spool_to_excel



  • We can download the spool into the predefined path i.e. Application server/Presentation server in Excel format.

  • The extension of file should be .xls that will be passed into the FM.


 
FUNCTION z_convert_spool_to_excel.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(SPOOL_NUMBER) TYPE RSPOID
*" REFERENCE(APP_SERV_PATH) TYPE TEXT1024 OPTIONAL
*" REFERENCE(LOCAL_SERV_PATH) TYPE STRING OPTIONAL
*"----------------------------------------------------------------------

TYPES : tt_bapixmspop TYPE STANDARD TABLE OF bapixmspop.
DATA : lt_spool_attr_line TYPE bapixmspoolid,
lt_spool_list_plain TYPE tt_bapixmspop,
lv_spool_list TYPE list_string_table,
lv_first_page TYPE i,
lv_last_page TYPE i.

CALL FUNCTION 'RSPO_GET_INFORMATION_SPOOLJOB'
EXPORTING
rqident = spool_number
IMPORTING
spool_attributes = lt_spool_attr_line
EXCEPTIONS
no_such_job = 1
read_error = 2
no_permission = 3
OTHERS = 4.
IF sy-subrc <> 0. ##FM_SUBRC_OK
ENDIF.

CALL FUNCTION 'RSPO_RETURN_SPOOLJOB_DAT'
EXPORTING
rqident = spool_number
first_line = lv_first_page
last_line = lv_last_page
pages = 'X'
IMPORTING
buffer_dat = lv_spool_list
EXCEPTIONS
no_such_job = 1
not_abap_list = 2
job_contains_no_data = 3
selection_empty = 4
no_permission = 5
can_not_access = 6
read_error = 6
OTHERS = 7.
IF sy-subrc <> 0. ##FM_SUBRC_OK
ENDIF.

IF NOT lv_spool_list IS INITIAL.
IF app_serv_path IS NOT INITIAL.
FIELD-SYMBOLS <hex_container> TYPE any.
OPEN DATASET app_serv_path FOR OUTPUT IN TEXT MODE ENCODING DEFAULT WITH SMART LINEFEED.
IF sy-subrc = 0.
LOOP AT lv_spool_list ASSIGNING <hex_container> .
TRANSFER <hex_container> TO app_serv_path.
CLEAR <hex_container>.
ENDLOOP.
CLOSE DATASET app_serv_path.
MESSAGE 'File succesfully transferred' TYPE 'S' .
ELSE.
MESSAGE 'File cannot be opened' TYPE 'E' .
ENDIF.
ELSEIF local_serv_path IS NOT INITIAL.
* Download in presentation server
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = local_serv_path
append = 'X'
TABLES
data_tab = lv_spool_list
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.
MESSAGE 'File succesfully transferred' TYPE 'S' .
ENDIF.
ELSE.
MESSAGE 'Please specify either Application/presentation server path' TYPE 'E' .
ENDIF.
ENDIF.

ENDFUNCTION.

 

  1. HTML format Function Module - z_convert_spool_to_html



  • We can download the spool into the predefined path i.e. Application server/Presentation server in HTML format.

  • The extension of file should be .zip that will be passed into the FM.

  • It will be download with .ZIP extension, inside zip folder we will have out HTML format spool file.


 
FUNCTION z_convert_spool_to_html.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(SPOOL_NUMBER) TYPE RSPOID
*" REFERENCE(APP_SERV_PATH) TYPE TEXT1024 OPTIONAL
*" REFERENCE(LOCAL_SERV_PATH) TYPE STRING OPTIONAL
*"----------------------------------------------------------------------

DATA : lt_spool_attr_line TYPE bapixmspoolid,
lv_spool_list_zipped TYPE xstring,
lv_abap_true TYPE boolean,
lt_tab TYPE enh_version_management_hex_tb,
lv_size TYPE i,
lv_first_page TYPE i,
lv_last_page TYPE i,
lv_pages TYPE c.

CALL FUNCTION 'RSPO_GET_INFORMATION_SPOOLJOB'
EXPORTING
rqident = spool_number
IMPORTING
spool_attributes = lt_spool_attr_line
EXCEPTIONS
no_such_job = 1
read_error = 2
no_permission = 3
OTHERS = 4.
IF sy-subrc <> 0. ##FM_SUBRC_OK
ENDIF.

lv_first_page = 1.
lv_last_page = 0.
lv_abap_true = 'X'.

CALL FUNCTION 'RSPO_RETURN_SPOOLJOB_HTML'
EXPORTING
rqident = spool_number
first_line = lv_first_page
last_line = lv_last_page
pages = lv_abap_true
compressed = lv_abap_true
IMPORTING
e_zip = lv_spool_list_zipped
EXCEPTIONS
no_such_job = 1
not_abap_list = 2
job_contains_no_data = 3
selection_empty = 4
no_permission = 5
can_not_access = 6
read_error = 7
conversion_error = 8
cannot_compress = 9
OTHERS = 10.
CASE sy-subrc.
WHEN 0. " everything ok
ENDCASE.

IF xstrlen( lv_spool_list_zipped ) > 0.

CALL FUNCTION 'ENH_XSTRING_TO_TAB'
EXPORTING
im_xstring = lv_spool_list_zipped
IMPORTING
ex_data = lt_tab
ex_leng = lv_size.

IF NOT lt_tab IS INITIAL.
IF app_serv_path IS NOT INITIAL.
FIELD-SYMBOLS <hex_container> TYPE x.
OPEN DATASET app_serv_path FOR OUTPUT IN BINARY MODE.
IF sy-subrc = 0.
LOOP AT lt_tab ASSIGNING <hex_container> .
TRANSFER <hex_container> TO app_serv_path.
ENDLOOP.
CLOSE DATASET app_serv_path.
MESSAGE 'File succesfully transferred' TYPE 'S' .
ELSE.
MESSAGE 'File cannot be opened' TYPE 'E' .
ENDIF.
ELSEIF local_serv_path IS NOT INITIAL.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = lv_size
* codepage = codepage
filename = local_serv_path
filetype = 'BIN'
* append = append
* WRITE_BOM = write_bom
* WK1_N_FORMAT = ' '
* WK1_N_SIZE = ' '
* WK1_T_FORMAT = ' '
* WK1_T_SIZE = ' '
* COL_SELECT = ' '
* COL_SELECTMASK = ' '
* NO_AUTH_CHECK = ' '
* IMPORTING
* FILELENGTH =
TABLES
data_tab = lt_tab
* FIELDNAMES =
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
OTHERS = 19.
IF sy-subrc = 0.
MESSAGE 'File succesfully transferred' TYPE 'S' .
ENDIF.
ELSE.
MESSAGE 'Please provide path for Application/Presentation server' TYPE 'E' .
ENDIF.
ENDIF.
ENDIF.

ENDFUNCTION.

 

Thanks for reading it !! Hope this will help you J
8 Comments