Todos los que trabajamos con SAP estamos rodeados, continuamente, de datos. Nosotros, los trabajadores, manejamos estos datos, los transformamos en información, hacemos programas para mostrar la información… con el objetivo final de convertir la información en conocimiento.
Hay situaciones en las que nos es necesario transferir la información a diferentes tipos de archivos (.xlsx, .txt, etc.) con la finalidad de descargarlos a nuestros equipos, enviarlos por correo, …
Dicho esto, os voy a explicar a comprimir uno o varios archivos con ABAP, ya que me ha resultado muy útil a lo largo de mi carrera como programadora ABAP.
En este ejemplo, crearemos dos archivos .txt y los introduciremos en un archivo comprimido (.ZIP). Los pasos que vamos a seguir van a ser los siguientes:
- Recoger los datos en tablas internas
- Convertir las tablas internas en tipo XSTRING (char 1024)
- Crear el objeto para la clase CL_ABAP_ZIP
- Añadir los archivos al .ZIP
- Generar el archivo .ZIP
- Descargar el archivo .ZIP
Recoger los datos en tablas internas
Se han seleccionado las tablas SCARR (Compañía aérea) y SPFLI (Itinerario de vuelos) para obtener, por un lado, el código y nombre de las compañías aéreas y, por otro lado, sus ciudades de origen y destino de los viajes que realizan.
Rellenaremos las tablas internas LT_COMPANIAS y LT_CIUDADES.
Convertir las tablas internas en el tipo XSTRING
Es necesario convertir las tablas internas al tipo XSTRING, ya que la clase CL_ABAP_ZIP solo acepta este tipo.
Primero, crearemos una tabla interna que contenga una sola columna de tipo C (char) de la longitud que a nosotros nos interese.
*La tabla se creará en basándose en el tipo TY_LINEAS.
Segundo, recorreremos nuestras tablas internas (LT_COMPANIAS y LT_CIUDADES) y volcaremos los datos a la tabla LT_LINEAS. De esta manera conseguiremos tener en una tabla, línea por línea en tipo C (Char), todos los registros que queramos convertir a tipo XSTRING.
Para terminar, llamaremos a la función SCMS_TEXT_TO_XSTRING para que hagamos la conversión de tipo C a tipo XSTRING. Como podeís apreciar en la imagen n.º 3, en el parámetro P_XSTRING obtendremos el valor de la tabla interna en tipo XSTRING.
Estos pasos, los haremos mediante una subrutina. Le pasaremos la tabla interna, su estructura y la variable que va a obtener el valor en tipo XSTRING.
El código de la subrutina CONVERTIR_TABLAS es la siguiente:
Crear el objeto para la clase CL_ABAP_ZIP
Crearemos el objeto de la clase CL_ABAP_ZIP para que podamos utilizar sus métodos e incluyamos los ficheros en nuestro archivo .ZIP.
Añadir los archivos al .ZIP
Para añadir nuestras tablas internas ya convertidas en tipo XSTRING al archivo .ZIP utilizaremos el método ADD de la clase CL_ABAP_ZIP.
En la imagen, añadimos dos ficheros al .ZIP. Por un lado, un fichero llamado «companias.txt», donde el valor de ese fichero está en la variable V_XSTR_COMPANIAS, y, por otro lado, el fichero «ciudades.txt», donde el valor de ese fichero está en la variable V_XSTR_CIUDADES.
*Recordad que las variables V_XSTR_COMPANIAS y V_XSTR_CIUDADES tienen el contenido de las tablas internas en tipo XSTRING.
Generar el archivo .ZIP
Ahora que hemos añadido los ficheros a nuestro .ZIP, vamos a generar el archivo .ZIP. Utilizaremos el método SAVE que nos proporciona la clase CL_ABAP_ZIP.
Simplemente, llamando al método SAVE del objeto LO_ZIP habremos creado nuestro archivo .ZIP.
Pero, en la imagen estamos guardando en una variable de tipo XSTRING el valor del archivo .ZIP. Esto lo hacemos para que podamos descargar el archivo .ZIP más adelante.
Descargar el archivo .ZIP
Para descargar el archivo utilizaremos la función GUI_DOWNLOAD. Pero antes de llamar a esta función vamos a tener que convertir nuestro .ZIP en una tabla interna.
Con el valor que tenemos del archivo .ZIP en tipo XSTRING, llamaremos a la función SCMS_XSTRING_TO_BINARY, y ésta nos devolverá una tabla interna.
Se declara la tabla interna que vamos a utilizar
Valor del archivo .ZIP en tabla interna / Valor del archivo .ZIP en XSTRING
¡Ahora sí! ¡Ya lo tenemos todo listo! 🙂
Llamamos a la función GUI_DOWNLOAD y le pasaremos nuestra tabla interna LT_ZIP para descargarla a nuestro equipo.
En este ejemplo, nuestro archivo .ZIP se descargará en el escritorio con el nombre «archivo.zip». Además tenemos que indicar que el tipo de fichero será binario ( ‘BIN’ ).
Resultado final
Esperamos que este artículo te haya sido de utilidad si estabas buscando cómo comprimir archivos con ABAP. Recuerda que puedes dejarnos tus preguntas en comentarios 😉
Buenas tardes… muy bueno el tutorial… tengo una pregunta adicional, como puedo adicionar este zip como un attachment en un correo para ser enviado desde sap. y se puede comprimir tambien un archivo PDF o XML?… desde ya muchas gracias