Skip to content

Instantly share code, notes, and snippets.

@dantesco
Created November 11, 2013 17:30
Show Gist options
  • Save dantesco/7416988 to your computer and use it in GitHub Desktop.
Save dantesco/7416988 to your computer and use it in GitHub Desktop.
Selecciona información, guardala en el server y extraela nuevamente para mostrarla * cuidado con la ruta en donde se guarda el archivo
*&---------------------------------------------------------------------
*& Report ZVK_CL_RSAN_UT_APPSERV
*&
*&---------------------------------------------------------------------
*& Purpose : Use of Class CL_RSAN_UT_APPSERV_FILE_READER &
*& CL_RSAN_UT_APPSERV_FILE_WRITER for Read/write operations
*& on Application Server Files
*&---------------------------------------------------------------------
REPORT zvk_cl_rsan_ut_appserv.
** Text Elements
* p_matnr Material from to
* p_filenm - File Name
TYPE-POOLS : rsanm, abap.
TABLES : mara.
TYPES : BEGIN OF ty_makt,
matnr TYPE matnr,
maktx TYPE maktx,
END OF ty_makt.
DATA : lt_makt TYPE STANDARD TABLE OF ty_makt,
ls_makt TYPE ty_makt,
lt_file_table TYPE rsanm_file_table,
ls_file_table TYPE rsanm_file_line.
DATA : lv_applserv TYPE char01,
lv_title TYPE string,
lv_gui_extension TYPE string,
lv_gui_ext_filter TYPE string,
lv_canceled TYPE as4flag,
lv_applserv_logical TYPE as4flag,
lv_applserv_al11 TYPE as4flag,
lv_file_name TYPE string,
lv_lines_written TYPE I.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
SELECT-OPTIONS : p_matnr FOR mara-matnr OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME.
PARAMETERS : p_filenm LIKE ibipparms-path OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b2.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_filenm.
CLEAR : lv_canceled , lv_file_name.
MOVE 'X' TO lv_applserv.
MOVE 'Select File from Application Server' TO lv_title.
MOVE ' ' TO lv_applserv_logical.
MOVE 'X' TO lv_applserv_al11.
CALL METHOD cl_rsan_ut_files=>f4
EXPORTING
i_applserv = lv_applserv
i_title = lv_title
i_gui_extension = lv_gui_extension
i_gui_ext_filter = lv_gui_ext_filter
i_applserv_logical = lv_applserv_logical
i_applserv_al11 = lv_applserv_al11
IMPORTING
e_canceled = lv_canceled
CHANGING
c_file_name = lv_file_name
EXCEPTIONS
failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF lv_canceled NE 'X'.
MOVE lv_file_name TO p_filenm.
ENDIF.
ENDIF.
START-OF-SELECTION.
MOVE p_filenm TO lv_file_name.
PERFORM extract_data.
PERFORM convert_data.
PERFORM write_data_to_appserver.
PERFORM read_data_from_appserver.
*&---------------------------------------------------------------------
*& Form extract_data
*&---------------------------------------------------------------------
* text
*----------------------------------------------------------------------
FORM extract_data.
REFRESH : lt_makt.
SELECT matnr maktx
FROM makt
INTO TABLE lt_makt
WHERE matnr IN p_matnr
AND spras EQ sy-langu.
IF sy-subrc NE 0.
MESSAGE 'No data selected' TYPE 'I' DISPLAY LIKE 'E'.
STOP.
ENDIF.
ENDFORM. "extract_data
*&---------------------------------------------------------------------
*& Form convert_data
*&---------------------------------------------------------------------
* text
*----------------------------------------------------------------------
FORM convert_data.
FIELD-symbols:<fs> TYPE ANY.
FIELD-symbols:<fs1> TYPE ANY.
DATA:lv_length TYPE I,
wf_ref TYPE REF TO DATA.
REFRESH : lt_file_table.
CLEAR : ls_file_table.
IF lt_makt[] IS NOT INITIAL.
LOOP AT lt_makt INTO ls_makt.
DO.
ASSIGN COMPONENT sy-INDEX OF STRUCTURE ls_makt TO <fs>.
IF sy-subrc <> 0.
APPEND ls_file_table TO lt_file_table.
CLEAR ls_file_table.EXIT.
ENDIF.
lv_length = 0.
DESCRIBE FIELD <fs> OUTPUT-length lv_length.
CREATE DATA wf_ref TYPE C length lv_length.
IF wf_ref IS BOUND.
ASSIGN wf_ref->* TO <fs1>.
CHECK <fs1> IS ASSIGNED.
<fs1> = <fs>.
ENDIF.
IF sy-INDEX = 1.
ls_file_table = <fs1>.
ELSE.
CONCATENATE ls_file_table <fs1> INTO ls_file_table SEPARATED BY '|'.
ENDIF.
ENDDO.
ENDLOOP.
ENDIF.
ENDFORM. "convert_data
*&---------------------------------------------------------------------
*& Form write_data_to_appserver
*&---------------------------------------------------------------------
* Form routine for Creating the File in Application Server
* =========================================================
* Parameter i_overwrite has relevant if an existing file is chosen to
* write the contents
* if Value of Parameter i_overwrite is 'X' then File is overwritten
* otherwise the data is appended to existing file.
* =========================================================
*----------------------------------------------------------------------
FORM write_data_to_appserver.
IF lt_file_table[] IS NOT INITIAL.
CLEAR : lv_lines_written.
CALL METHOD cl_rsan_ut_appserv_file_writer=>appserver_file_write
EXPORTING
i_filename = lv_file_name
i_overwrite = abap_true
i_data_tab = lt_file_table
IMPORTING
e_lines_written = lv_lines_written
EXCEPTIONS
open_failed = 1
write_failed = 2
close_failed = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
WRITE :/ 'Data written to ',
lv_file_name.
WRITE :/ 'No of Lines Written ',
lv_lines_written.
ENDIF.
ENDIF.
ENDFORM. "write_data_to_appserver
*&---------------------------------------------------------------------
*& Form read_data_from_appserver
*&---------------------------------------------------------------------
* Form routine to read the contents of the file in application server
*----------------------------------------------------------------------
FORM read_data_from_appserver.
REFRESH : lt_file_table.
CALL METHOD cl_rsan_ut_appserv_file_reader=>appserver_file_read
EXPORTING
i_filename = lv_file_name
CHANGING
c_data_tab = lt_file_table
EXCEPTIONS
open_failed = 1
read_failed = 2
close_failed = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
WRITE :/ 'Contents of file ', lv_file_name.
WRITE :/ '================================='.
LOOP AT lt_file_table INTO ls_file_table.
WRITE :/ ls_file_table.
ENDLOOP.
ENDIF.
ENDFORM. "read_data_from_appserver
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment