SAP ABAP: Seleccionar archivo de un directorio local

A continuación les explico el código ABAP que se requiere para crear un parámetro que permita seleccionar un archivo o fichero de mi directorio local para posteriormente procesarlo. Este proceso es muy usado cuando se requiere hacer cargas de layout, ya que generalmente los layout a procesar se encuentran almacenados en nuestra computadora. En éste artículo no se verá cómo procesar el documento seleccionado, esto lo dejaremos para otro artículo. Sin más, comenzamos:

Índice de contenido

Paso 1. Crear el parámetro de entrada.


El primer paso será crear el parámetro donde se colocará la ruta del archivo que seleccionaremos, en nuestro ejemplo será con las siguientes características:

  • Es el único campo por lo que lo haremos obligatorio.
  • El campo será del mismo tipo que el campo FILENAME de la tabla FILE_TABLE, que es de tipo CHAR de longitud 1024.
  • Por default vendrá con la ruta C:/
*&---------------------------------------------------------------------*
*& P A R A M E T R O S
*&---------------------------------------------------------------------*
PARAMETERS: p_ruta LIKE FILE_TABLE-FILENAME OBLIGATORY DEFAULT 'C:/'.

Paso 2. Agregar el evento para el matchcode.


El siguiente paso es agregar el evento “at selection-screen on value-request for” el cual activará la ventana emergente de búsqueda de archivos. Al agregar este evento al campo se mostrará un matchcode que abrirá el dialogo de selección del disco local. Dentro del evento agregaremos un perform llamado get_ruta que tendrá como parámetro changing el campo p_ruta.

*&---------------------------------------------------------------------*
*& A T   S E L E C T I O N - S C R E E N   O N   V A L U E - R E Q U E S T    F O R
*&---------------------------------------------------------------------*
at selection-screen on value-request for p_ruta.
  perform get_ruta changing p_ruta.

Paso 3. Crear FORM get_ruta.


En este FORM utilizaremos el método file_open_dialog de la clase cl_gui_frontend, el cual despliega el dialogo de selección de archivos. Este método requerirá de un título y una ruta inicial, esta ruta inicial no podrá ser vacío y deberá ser de tipo string, de lo contrario marcará un dump. El método devolverá la ruta seleccionada con la tabla file_table, lo que debemos hacer después es leer el registro devuelto y obtener el campo filename de la tabla file_table.

*&---------------------------------------------------------------------*
*&      Form  GET_RUTA
*&---------------------------------------------------------------------*
*       Muestra un dialogo para la selección de un archivo
*       Obtiene la ruta seleccionada y la devuelve en P_RUTA
*----------------------------------------------------------------------*
*      <--P_RUTA  Ruta del archivo seleccionado
*----------------------------------------------------------------------*
FORM GET_RUTA  CHANGING P_RUTA.

  data: lt_file type filetable,
        ls_file type file_table,
        lv_rc   type i,
        lv_ruta type string.

  if p_ruta is initial.
    lv_ruta = 'C:/'.   "Ruta default
  else.
    lv_ruta = p_ruta.
  endif.

  call method cl_gui_frontend_services=>file_open_dialog
    exporting
      window_title            = 'Seleccione un archivo'
      initial_directory       = lv_ruta
    changing
      file_table              = lt_file
      rc                      = lv_rc
    exceptions
      file_open_dialog_failed = 1
      cntl_error              = 2
      error_no_gui            = 3
      not_supported_by_gui    = 4
      OTHERS = 5
    .

  if sy-subrc eq 0.
    read table lt_file into ls_file index 1.
    p_ruta = ls_file-filename.
  endif.


ENDFORM.

Probando el ejemplo


Al ejecutar nuestro programa podemos observar que nuestro campo tiene por default el valor que le definimos y también el matchcode que agregamos.

PARAMETER FILE_TABLE-FILENAME ABAP SAP

Oprimimos F4 o seleccionamos el matchcode del campo y se nos mostrará una ventana de selección. Aquí solamente nos queda buscar nuestro archivo, lo seleccionamos y oprimimos el botón “Abrir”.

Ventana Seleccione un archivo abap cl_gui_frontend_services=>file_open_dialog

Una vez hecho esto notaremos que la ruta completa del archivo se copiará en nuestro campo. Podemos notar que esta ruta contiene tanto el nombre del fichero como su extensión.

Y de esta sencilla manera podemos obtener la ruta de nuestros archivos locales por medio de matchcode en SAP con la ayuda de programación ABAP. En Toh Soluciones Digitales contamos con especialistas en desarrollo ABAP y quisiéramos saber si este tutorial les ha sido de ayuda y si quisieran que saquemos más tutoriales ABAP.

Código completo

ZPRG_OBTENER_RUTA


*&---------------------------------------------------------------------*
*& Report  ZPRG_OBTENER_RUTA
*&
*&---------------------------------------------------------------------*
*& Obtener ruta de archivo seleccionado
*& Creado por: TOH Soluciones Digitales
*& Fecha: 2020.06.02
*&
*&---------------------------------------------------------------------*

INCLUDE zprg_obtener_ruta_f01.

*&---------------------------------------------------------------------*
*& P A R A M E T R O S
*&---------------------------------------------------------------------*
PARAMETERS: p_ruta LIKE FILE_TABLE-FILENAME OBLIGATORY DEFAULT 'C:/'.

*&---------------------------------------------------------------------*
*& A T   S E L E C T I O N - S C R E E N   O N   V A L U E - R E Q U E S T    F O R
*&---------------------------------------------------------------------*
at selection-screen on value-request for p_ruta.
  perform get_ruta changing p_ruta.

ZPRG_OBTENER_RUTA_F01


*&---------------------------------------------------------------------*
*&      Form  GET_RUTA
*&---------------------------------------------------------------------*
*       Muestra un dialogo para la selección de un archivo
*       Obtiene la ruta seleccionada y la devuelve en P_RUTA
*----------------------------------------------------------------------*
*      <--P_RUTA  Ruta del archivo seleccionado
*----------------------------------------------------------------------*
FORM GET_RUTA  CHANGING P_RUTA.

  data: lt_file type filetable,
        ls_file type file_table,
        lv_rc   type i,
        lv_ruta type string.

  if p_ruta is initial.
    lv_ruta = 'C:/'.   "Ruta default
  else.
    lv_ruta = p_ruta.
  endif.

  call method cl_gui_frontend_services=>file_open_dialog
    exporting
      window_title            = 'Seleccione un archivo'
      initial_directory       = lv_ruta
    changing
      file_table              = lt_file
      rc                      = lv_rc
    exceptions
      file_open_dialog_failed = 1
      cntl_error              = 2
      error_no_gui            = 3
      not_supported_by_gui    = 4
      OTHERS = 5
    .

  if sy-subrc eq 0.
    read table lt_file into ls_file index 1.
    p_ruta = ls_file-filename.
  endif.


ENDFORM.

En Toh Soluciones Digitales ofrecemos capacitación y cursos para desarrolladores ABAP impartidos por expertos. Además, somos expertos en implementaciones ERP SAP.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *