OPEN DATASET - Trabajar con archivos del servidor
Muchas veces nos encontramos que no sabemos que pasa con un archivo en el servidor, porque el comando OPEN DATASET, nos devuelve un SY-SUBRC = 8, muy poco explicito.
No sabemos si no existe, o simplemente no tenemos permiso.
Con este código, podremos detectar lo que sucede del lado del servidor.
REPORT y_test_data_set_joel.
PARAMETERS: p_rt LIKE rlgrap-filename OBLIGATORY. "ruta en servidor
PARAMETERS: pa1 AS CHECKBOX. "crea y escribe archivo
PARAMETERS: pa2 AS CHECKBOX. "Levanta archivo y lo lista
PARAMETERS: p_l1 LIKE rlgrap-filename. "linea 1
PARAMETERS: p_l2 LIKE rlgrap-filename. "linea 2
CONSTANTS: c_error TYPE sy-msgty VALUE 'E'.
DATA: l_message TYPE string,
o_exception TYPE REF TO cx_root.
DATA: BEGIN OF rec OCCURS 0,
campo1 TYPE rlgrap-filename,
campo2 TYPE rlgrap-filename.
DATA: END OF rec.
DATA: linea(255) TYPE c.
IF pa1 IS NOT INITIAL.
* Cargar un par de datos de pruebas.
rec-campo1 = p_l1.
APPEND rec.
rec-campo1 = p_l2.
APPEND rec.
* Abrir el archivo destino.
OPEN DATASET p_rt FOR OUTPUT IN TEXT MODE ENCODING DEFAULT MESSAGE l_message.
* Ver si el archivo fue creado correctamente..
IF sy-subrc NE 0.
FORMAT COLOR 6 INTENSIFIED OFF.
ULINE AT (80).
WRITE: / sy-vline,
' No se pudo crear al archivo : ',
80 sy-vline.
FORMAT COLOR 2 INTENSIFIED OFF.
WRITE: / sy-vline,
' ', p_rt.
* 80 sy-vline.
WRITE: / ' Mensaje obtenido >>>' , l_message, 80 sy-vline.
ULINE AT (80).
EXIT.
ENDIF.
* Recorrer la tabla que contiene las informaciones.
LOOP AT rec.
* Cargar la linea que sera utilizada como buffer salida.
linea = rec-campo1.
* Carga la tabla interna con el contenido del archivo plano.
TRANSFER linea TO p_rt.
ENDLOOP.
* Cerrar el archivo ASCII plano.
CLOSE DATASET p_rt.
ENDIF.
IF pa2 IS NOT INITIAL.
TRY.
* Abrir el archivo destino.
OPEN DATASET p_rt FOR INPUT IN TEXT MODE ENCODING DEFAULT
MESSAGE l_message.
* Ver si el archivo fue abierto correctamente..
IF sy-subrc NE 0.
FORMAT COLOR 6 INTENSIFIED OFF.
ULINE AT (80).
WRITE: / sy-vline,
' No se pudo abrir el archivo : ',
80 sy-vline.
FORMAT COLOR 2 INTENSIFIED OFF.
WRITE: / sy-vline,
' ', p_rt.
* 80 sy-vline.
WRITE: / ' Mensaje obtenido >>>' , l_message, 80 sy-vline.
ULINE AT (80).
ELSE.
* Recorrer el DATASET que contiene las informaciones.
CLEAR rec.
REFRESH rec.
DO.
READ DATASET p_rt INTO linea.
IF sy-subrc NE 0.
EXIT.
ENDIF.
* Cargar la tabla con los campos adecuados.
rec-campo1 = linea.
APPEND rec.
ENDDO.
WRITE: / 'Contenido de la ruta: ' , p_rt .
LOOP AT rec.
WRITE : / rec-campo1.
ENDLOOP.
ENDIF.
* Error
CATCH cx_root
INTO o_exception.
* Gets error message
CALL METHOD o_exception->if_message~get_text
RECEIVING
result = l_message.
MESSAGE l_message
TYPE c_error.
ENDTRY.
* Cerrar el archivo ASCII plano.
CLOSE DATASET p_rt.
ENDIF.
Comentarios
Publicar un comentario