Inicio > Reports > Creación de un archivo zip desde Sap

Creación de un archivo zip desde Sap

Desde la salida de la versión 6.40 de SAP, existe la clase CL_ABAP_ZIP que nos permite leer, crear, borrar archivos zip. Si queremos tratar esos archivos o carpetas comprimidos, tendremos que utilizar dicha clase.

Para que veáis como funciona dicha clase, os muestro el siguiente ejemplo …

El funcionamiento del programa es el siguiente:

1. Guarda en una tabla interna el contenido de la tabla de sociedades T001

2.  Convierte la salida de la tabla a orden de  spool y ahí a PDF usando la función CONVERT_ABAPSPOOLJOB_2_PDF.

3. Convierte la salida BIN a XTRING usando la función SCMS_BINARY_TO_XSTRING.

4. Se usa el método CL_ABAP_ZIP->ADD para crear el fichero comprimido con el archivo PDF. Este método requiere que el contenido esté en formato xstring, por eso lo convertimos en el paso 3.  El nombre del archivo que se le pasa a dicho método también tiene que estar en formato xstring

5. Se usa el método CL_ABAP_ZIP->SAVE.

6. Para descargarlo, primero se vuelve a convertir de xstring a binary usando SCMS_XSTRING_TO_BINARY y luego descargarlo usando GUI_DOWNLOAD con tipo de archivo ‘BIN’.

*&———————————————————————*
*& Report  ZSANTI_ZIP
*&
*&———————————————————————*
*&
*& Prueba de funcionamiento de creación de fichero ZIP con el contenido
*&  del spool
*&———————————————————————*
REPORT  zsanti_zip.
DATA:g_val        TYPE c,
w_pripar     TYPE pri_params,
w_arcpar     TYPE arc_params,
content_x    TYPE xstring,
spool_no     LIKE tsp01-rqident,
it_pdf       TYPE TABLE OF tline WITH HEADER LINE,
wa_pdf       LIKE LINE OF it_pdf,
file_tab     TYPE STANDARD TABLE OF solisti1,
bin_file     TYPE xstring,
bytecount    TYPE i,
zip          TYPE xstring,
path_table   TYPE TABLE OF char1024.
DATA: BEGIN OF it_t001 OCCURS 0,
bukrs     TYPE t001-bukrs,
butxt     TYPE t001-butxt,
END OF it_t001.
DATA:g_zipper     TYPE REF TO cl_abap_zip.
DATA:file_name    TYPE string VALUE ‘Fichero_spool.pdf’.
DATA:file_path    TYPE string VALUE ‘C:\Pdf_comprimido.ZIP’.

START-OF-SELECTION.
PERFORM get_data.
PERFORM print_data CHANGING spool_no.
PERFORM convert_spool_2_pdf.
PERFORM convert_binary_2_xstring.
PERFORM zipping_pdf_file.
PERFORM download_zip_file.

*&———————————————————————*
*&      Form  get_data
*&———————————————————————*
FORM get_data .

SELECT * FROM t001
INTO CORRESPONDING FIELDS OF TABLE it_t001 UP TO 10 ROWS.

ENDFORM.                    ” get_data
*&———————————————————————*
*&      Form  print_data
*&———————————————————————*
FORM print_data  CHANGING spool_no.

CALL FUNCTION ‘GET_PRINT_PARAMETERS’
EXPORTING
in_archive_parameters  = w_arcpar
in_parameters          = w_pripar
layout                 = ‘X_65_132’
line_count             = 65
line_size              = 132
no_dialog              = ‘X’
IMPORTING
out_archive_parameters = w_arcpar
out_parameters         = w_pripar
valid                  = g_val
EXCEPTIONS
ARCHIVE_INFO_NOT_FOUND         = 1
INVALID_PRINT_PARAMS           = 2
INVALID_ARCHIVE_PARAMS         = 3
OTHERS                         = 4
.
IF g_val  NE space AND sy-subrc = 0.
w_pripar-prrel = space.
w_pripar-primm = space.
NEW-PAGE PRINT ON NEW-SECTION PARAMETERS w_pripar ARCHIVE PARAMETERS w_arcpar NO DIALOG.
“Output which is gone to spool
LOOP AT it_t001.
WRITE:/ it_t001.
ENDLOOP.
NEW-PAGE PRINT OFF.
CALL FUNCTION ‘ABAP4_COMMIT_WORK’.
ENDIF.
IF NOT sy-spono IS INITIAL.
spool_no = sy-spono.
ENDIF.
ENDFORM.                    ” print_data
*&———————————————————————*
*&      Form  convert_spool_2_pdf
*&———————————————————————*
FORM convert_spool_2_pdf .
CALL FUNCTION ‘CONVERT_ABAPSPOOLJOB_2_PDF’
EXPORTING
src_spoolid   = spool_no
no_dialog     = space
IMPORTING
pdf_bytecount = bytecount
TABLES
pdf           = it_pdf.

CALL FUNCTION ‘SX_TABLE_LINE_WIDTH_CHANGE’
EXPORTING
line_width_src = 134
line_width_dst = 255
TABLES
content_in     = it_pdf
content_out    = file_tab.

ENDFORM.                    ” convert_spool_2_pdf
*&———————————————————————*
*&      Form  convert_binary_2_xstring
*&———————————————————————*
FORM convert_binary_2_xstring .
“create xstring from table
CALL FUNCTION ‘SCMS_BINARY_TO_XSTRING’
EXPORTING
input_length = bytecount
IMPORTING
buffer       = content_x
TABLES
binary_tab   = file_tab.
ENDFORM.                    ” convert_binary_2_xstring
*&———————————————————————*
*&      Form  zipping_pdf_file
*&———————————————————————*
FORM zipping_pdf_file .
“create our zipper object
CREATE OBJECT g_zipper.
“add file to zip
CALL METHOD g_zipper->add
EXPORTING
name    = file_name
content = content_x.
“save zip
CALL METHOD g_zipper->save
RECEIVING
zip = zip.
ENDFORM.                    ” zipping_pdf_file
*&———————————————————————*
*&      Form  download_zip_file
*&———————————————————————*
FORM download_zip_file .
“convert to table
CALL FUNCTION ‘SCMS_XSTRING_TO_BINARY’
EXPORTING
buffer        = zip
IMPORTING
output_length = bytecount
TABLES
binary_tab    = file_tab.
“Save the file
CALL FUNCTION ‘GUI_DOWNLOAD’
EXPORTING
bin_filesize = bytecount
filename     = file_path
filetype     = ‘BIN’
TABLES
data_tab     = file_tab.
ENDFORM.                    ” download_zip_file

Categorías:Reports Etiquetas: , ,
  1. Anónimo
    20 septiembre, 2011 a las 12:50 pm

    que chapucero, no?

  2. 20 septiembre, 2011 a las 1:16 pm

    Es un ejemplo bastante básico de la clase CL_ABAP_ZIP. El requerimiento del programa era comprimir una o varias órdenes de spool, pasarlas a pdf y comprimirlas en el zip para luego poder ser mandado por correo en otro proceso posterior

  3. 20 septiembre, 2011 a las 1:18 pm

    Si usted tiene otro ejemplo con el uso de dicha clase, por favor mande ese ejemplo y lo publicaré en el blog si así lo desea

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: