Autor Tema: Selección de Archivos : Servidor de Aplicación o Presentación (Server SAp o PC)  (Leído 642 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Enrique.Borroni

  • Moderador_
  • Usuario Completo
  • *****
  • Mensajes: 86
    • Ver Perfil
Aquí les dejo un report  que permite seleccionar archivos desde el servidor de aplicación o presentación.
Espero les sea de utilidad.

REPORT Z_GET_ARCHIVO_SRV_LOCAL.
*-----------------------------------------------------------------------------------------------------------------------------------------*
DATA : ld_rc(10)              TYPE c.
DATA : ld_filename            TYPE string.
*-----------------------------------------------------------------------------------------------------------------------------------------*
DATA : ld_location_flag       TYPE  dxlocation.     " Indicador: Servidor de aplicación o presentación : A = Server SAP   // P = PC Local
DATA : ld_server              TYPE  msname2.        " Nombre del servidor de aplicación (SOLO PARA SERVER SAP)
DATA : ld_path                TYPE  dxlpath.        " Vía acceso más larga
DATA : ld_filemask            TYPE  dxfilemask.     " Máscara p.nom.fichero
DATA : ld_fileoperation       TYPE  dxfileoper.     " Tipo de Operacion con el Archivo : R = Leer  // W = Escribir
*-----------------------------------------------------------------------------------------------------------------------------------------*
*

PARAMETERS : p_srv            RADIOBUTTON GROUP gr1.
PARAMETERS : p_loc            RADIOBUTTON GROUP gr1.
*
*-----------------------------------------------------------------------------------------------------------------------------------------*


*
*--->> PARA SELECIONAR ARCHIVOS DESDE EL SERVER SAP
IF ( p_srv EQ 'X' ).
  ld_location_flag  = 'A'.
  ld_path           = '/usr/sap/tmp'.
  ld_filemask       = '*.*'.
  ld_fileoperation  = 'R'.
ENDIF.

*
*--->> PARA SELECIONAR ARCHIVOS DESDE LOCAL PC
IF ( p_loc EQ 'X' ).
  ld_location_flag  = 'P'.
  ld_path           = 'C:\TEMP\'.
  ld_filemask       = '*.*'.
  ld_fileoperation  = 'R'.
ENDIF.


*-----------------------------------------------------------------------------------------------------------------------------------------*
START-OF-SELECTION.
*
  PERFORM get_filename_pc_sev USING     ld_location_flag
                                        ld_path
                                        ld_filemask
                                        ld_fileoperation
                              CHANGING  ld_rc
                                        ld_filename.
*
  WRITE : / 'RC       : ', ld_rc.
  WRITE : / 'ARCHIVO  : ', ld_filename.
*
END-OF-SELECTION.
*-----------------------------------------------------------------------------------------------------------------------------------------*
*
*
*-----------------------------------------------------------------------------------------------------------------------------------------*
*  FORM : GET_FILENAME_PC_SEV
*-----------------------------------------------------------------------------------------------------------------------------------------*
*       Leer Nombre de un archivo desde el servidor SAP o LOCAL
*-----------------------------------------------------------------------------------------------------------------------------------------*
*      -->P_LD_LOCATION_FLAG      Indicador: Servidor de aplicación o presentación : A = Server SAP   // P = PC Local
*      -->P_LD_PATH               Vía acceso más larga
*      -->P_LD_FILEMASK           Máscara p.nom.fichero
*      -->P_LD_FILEOPERATION      Tipo de Operacion con el Archivo : R = Leer  // W = Escribir
*      <--P_LD_RC
*      <--P_LD_FILENAME
*-----------------------------------------------------------------------------------------------------------------------------------------*
FORM get_filename_pc_sev  USING    p_location_flag
                                   p_path
                                   p_filemask
                                   p_fileoperation
                          CHANGING p_rc
                                   p_filename.

*
* ----->>> DECLARACION DE VARIABLES
  DATA  : ld_o_location_flag      TYPE dxlocation.                      " Indicador: Servidor de aplicación o presentación
  DATA  : ld_o_server             TYPE msname2.                         " Nombre del servidor de aplicación
  DATA  : ld_o_path               TYPE dxlpath.                         " Vía acceso más larga
  DATA  : ld_abend_flag           TYPE dxxabend.                        " Indicador: Cancelación del proceso
  DATA  : ld_filesys              TYPE filesys_d.                       " Grupo de sintaxis para nombres de ficheros y vías de acceso
  DATA  : lw_rfcsi_export         TYPE rfcsi.                           " RFC Versión log
  DATA  : ld_server               TYPE msname2.                         " Nombre del servidor de aplicación
*
  DATA  : ld_path                 TYPE string.                          " Path para Archivos PC
  DATA  : ld_mascara              TYPE string.                          " Marcara para Archivos PC
  DATA  : lt_file_table           TYPE STANDARD TABLE OF file_table.    " Tabla Interna para guardar archivo seleccionado desde el PC
  DATA  : lw_file_table           LIKE LINE OF lt_file_table.           "
  DATA  : ld_subrc                TYPE i.                               " Para retorno de la funcion de seleccion de archivos del PC

  IF ( p_location_flag EQ 'A' ).
  ENDIF.


  CASE p_location_flag.
*
*   ----->>> EJECUTAR FUNCION PARA SELECCIONAR ARCHIVO DESDE SERVIDOR DE APLICACION : 'SAP'
    WHEN 'A'.
*
*     ----->>> RECUPERAR EL SISTEMA OPERATIVO DEL LOS SERVIDORES DE APLICACIONES : APLICACION Y PRESENTACION
      SELECT SINGLE filesys
        FROM opsystem INTO ld_filesys
          WHERE opsys EQ sy-opsys.
*
*     ----->>> RECUPERAR DESTINO LOGICO DEL SISTEMA
      CALL FUNCTION 'RFC_SYSTEM_INFO'
        IMPORTING
          rfcsi_export = lw_rfcsi_export.
*
*     ----->>> RECUPERAR NOMBER DEL SERVER SAP
      ld_server = lw_rfcsi_export-rfcdest.
*
*     ----->>> SI RUTA ES VACIO : UTILIZAR '?'
      IF ( ld_server IS INITIAL ).
        ld_server = '?'.
      ENDIF.
*
*     ----->>> SI MASCARA PARA SELECCION DE TIPO DE ARCHIVOS ES VACIA : UTILIZAR '*.*'
      IF ( p_filemask IS INITIAL ).
        p_filemask = '*.*'.
      ENDIF.
*
*     ----->>> LLAMADA A LA FUNCION DE SELECCION DE ARCHIVOS EN SERVER SAP
      CALL FUNCTION 'F4_DXFILENAME_TOPRECURSION'
        EXPORTING
          i_location_flag = p_location_flag             " Indicador: Servidor de aplicación o presentación : A = Server SAP   // P = PC Local
          i_server        = ld_server                   " Nombre del servidor de aplicación
          i_path          = p_path                      " Vía acceso más larga
          filemask        = p_filemask                  " Máscara p.nom.fichero
          fileoperation   = p_fileoperation             " Tipo de Operacion con el Archivo : R = Leer  // W = Escribir
        IMPORTING
          o_location_flag = ld_o_location_flag
          o_server        = ld_o_server
          o_path          = ld_o_path
          abend_flag      = ld_abend_flag
        EXCEPTIONS
          rfc_error       = 1
          error_with_gui  = 2
          OTHERS          = 3.
*
*   ----->>> EJECUTAR FUNCION PARA SELECCIONAR ARCHIVO DESDE SERVIDOR DE PRESENTACION : 'LOCAL PC'
    WHEN 'P'.
*
      IF ( p_path IS INITIAL ).
        ld_path = 'C:\'.
      ELSE.
        ld_path     = p_path.
      ENDIF.
*
      IF ( p_filemask IS INITIAL ).
        ld_mascara  = '*.*'.
      ELSE.
        ld_mascara  = p_filemask.
      ENDIF.
*
*     ----->>> LLAMADA AL METODO DE SELECCION DE ARCHIVOS DESDE PC
      CALL METHOD cl_gui_frontend_services=>file_open_dialog
        EXPORTING
          window_title            = 'Seleccione Archivo'
          default_extension       = ld_mascara
          initial_directory       = ld_path
        CHANGING
          file_table              = lt_file_table
          rc                      = ld_subrc
        EXCEPTIONS
          file_open_dialog_failed = 1
          cntl_error              = 2
          error_no_gui            = 3
          not_supported_by_gui    = 4
          OTHERS                  = 5.
*
*   ----->>> VALIDA LA EJECUCION Y HOMOLOGA VALORES DE RETORNO DE LA RUTINA
    IF NOT ( lt_file_table IS INITIAL ).
        READ TABLE lt_file_table INTO lw_file_table INDEX 1.
        ld_o_path     = lw_file_table-filename.
        sy-subrc      = 0.
      ELSEIF ( ld_subrc GT 1 ).
        sy-subrc      = ld_subrc.
      ELSEIF ( lt_file_table IS INITIAL ).
        sy-subrc      = 0.
        ld_abend_flag = 'X'.
        ld_o_path     = ''.
      ENDIF.
  ENDCASE.
*
* ----->>> VALIDA LA EJECUCION Y RETORNA VALORES
  IF ( sy-subrc EQ 0 ) AND ( ld_o_path NE '' ).
    p_filename  = ld_o_path.
    p_rc        = 'OK'.
  ELSEIF ( ld_abend_flag EQ 'X' ) OR ( ld_o_path EQ '' ).
    p_rc        = 'CANCEL'.
  ELSE.
    p_rc        = 'ERROR'.
  ENDIF.
*
ENDFORM.                                                                                                                                                                   "
*-----------------------------------------------------------------------------------------------------------------------------------------*


Saludos.

Atte.,
Enrique Borroni

maito : enrique.borroni@abap.es