Cuando tenemos que cargar o generar un fichero en el servidor de SAP, muchas veces nos encontramos con que el nombre del archivo tiene que ser dinámico. Es decir, el nombre sigue cierto patrón, como puede ser que incluya una fecha que cada día cambie. A modo de ejemplo:
- fichero_20210101.csv
- /dir1/PROD/fichero_20210102.csv
- /dir1/PROD/fichero_20210131.csv
Si nos encontramos con esta situación, podemos utilizar lo que SAP denomina ficheros lógicos.
¿Qué es eso de “fichero lógico”?
Un fichero lógico hace referencia al nombre de un fichero real que puede tener una parte dinámica, generada en tiempo de ejecución, y que permite utilizar palabras reservadas sobre el nombre del fichero. Estas palabras se escriben entre los símbolos menor que (<) y mayor que (>), y permiten calcular ciertos valores que se sustituyen en el nombre del fichero.
Los ficheros lógicos son muy versátiles, y podemos utilizarlos para cargar un fichero en un infopaquete, o, por ejemplo, al generar un fichero en un openHUB.
Veamos cómo definirlos utilizando la transacción FILE.
Definiendo el directorio y el fichero lógico
Para poder crear un fichero lógico necesitamos tener creado previamente un directorio lógico, que no es más que el nombre que le vamos a dar al directorio real del servidor. Para ello utilizamos la transacción FILE, la cual tiene el siguiente aspecto:
En “Definición vías de acceso de ficheros lógicos” podemos definir el directorio del servidor que vamos a utilizar. Para ello, el botón “Entradas nuevas” nos va a permitir definir el directorio del servidor donde se encuentra nuestro fichero con nombre cambiante:
Tras ello, nos pide el nombre que le queremos dar al directorio y la descripción. Este nombre es el que vamos a utilizar posteriormente para acceder al directorio real. Como ejemplo:
Tras introducir los datos, pulsamos intro, y seleccionamos la entrada recientemente creada.
Una vez seleccionada, hacemos doble clic en “Asignar vías de acceso lógicas a físicas”:
Esto nos abre una nueva tabla, en la que tenemos que hacer clic nuevamente en “Entradas nuevas”:
Entonces nos pide un par de datos:
- Grupo sintaxis: permite determinar la sintaxis del directorio y del fichero real, es decir, longitud máxima permitida, si se permiten extensiones de fichero, etc.
- Vía acceso fís.: la vía de acceso física o, lo que es lo mismo, el directorio real en el que vamos a guardar o cargar el fichero. En este punto es obligatorio definir <FILENAME> para indicar dónde va a ir el nombre del fichero real que vamos a indicar en el fichero lógico.
Para rellenar estos datos, podemos copiarlos de otro directorio ya definido. Completando los datos, nos queda lo siguiente:
Con esto ya hemos definido un directorio lógico, ZTEST, que apunta a un directorio real del servidor, /tmp. Para poder utilizar este directorio, tenemos que guardar, pulsando en el disquete:
Tras ello, nos pide una orden de transporte.
Ya estamos listos para definir el fichero lógico. Esto se hace pulsando en “Definición nombre fichero lóg.independ.de mandante” en la izquierda:
Tras hacer doble clic en esa carpeta, nuevamente pulsamos en “Entradas nuevas”, y nos permite definir un nuevo fichero lógico:
- Fich. lóg.: el nombre que le queremos dar a nuestro fichero lógico
- Denominación: una descripción del fichero
- Fich. físico: el nombre real del fichero
- Formato datos: el tipo de datos que contiene el fichero
- Área funcional: en qué aplicación se utiliza un nombre de fichero lógico
- Vía acceso lóg.: la vía de acceso lógica o el directorio lógico definido previamente
Para completar los campos podemos apoyarnos en un fichero lógico ya existente.
Rellenándolo con datos de ejemplo:
Una vez hecho esto, guardamos, y listo. Cada vez que necesitemos acceder al fichero /tmp/nombre_fichero_real.csv, podemos utilizar el nombre de este fichero lógico, Z_FICHERO_TEST, si utilizamos un objeto que nos lo pida, como por ejemplo un infopaquete, o, si utilizamos ABAP, podemos hacer uso del módulo de funciones “FILE_GET_NAME”.
Dinamizando el nombre
Hasta ahora hemos visto como definir un fichero lógico para obtener la dirección de un fichero real que siempre se va a llamar igual, concretamente “nombre_fichero_real.csv”.
Lo más interesante que nos permiten hacer los ficheros lógicos, es definir de forma dinámica el nombre del archivo que necesitamos guardar. Esto es muy útil si guardamos en una carpeta que depende del entorno, si queremos generar un timestamp, etc.
Las variables que permite este sistema son las siguientes:
Palabra reservada | Valor por el que se reemplaza |
<OPSYS> | Sistema operativo en el parámetro de la llamada a la función FILE_GET_NAME. |
<INSTANCE> | Instancia de la aplicación |
<SYSID> | Nombre de la aplicación según la variable del sistema SY-SYSID. |
<DBSYS> | Sistema de la base de datos según la variable del sistema SY-DBSYS |
<SAPRL> | Release (lanzamiento) de SAP, según la variable del sistema SY-SAPRL |
<HOST> | Nombre del host (servidor de aplicaciones) según la variable del sistema SY-HOST |
<CLIENT> | El mandante según la variable del sistema SY-MANDT |
<LANGUAGE> | El idioma con el que se ha accedido al sistema, según la variable del sistema SY-LANGU |
<DATE> | Fecha según la variable del sistema SY-DATUM |
<YEAR> | Año según la variable del sistema SY-DATUM, cuatro dígitos |
<SYEAR> | Año según la variable del sistema SY-DATUM, dos dígitos |
<MONTH> | Mes según la variable del sistema SY-DATUM |
<DAY> | Dia según la variable del sistema SY-DATUM |
<WEEKDAY> | Dia de la semana según la variable del sistema SY-FDAYW |
<TIME> | Hora, minutos y segundos según la variable del sistema SY-UZEIT |
<STIME> | Hora y minutos según la variable del sistema SY-UZEIT |
<HOUR> | Hora según la variable del sistema SY-UZEIT |
<MINUTE> | Minutos según la variable del sistema SY-UZEIT |
<SECOND> | Segundos según la variable del sistema SY-UZEIT |
<PARAM_1> | Parámetro externo 1 pasado en la llamada a la función FILE_GET_NAME |
<PARAM_2> | Parámetro externo 2 pasado en la llamada a la función FILE_GET_NAME |
<PARAM_3> | Parámetro externo 3 pasado en la llamada a la función FILE_GET_NAME |
<P=nombre> | Valor de un parámetro del perfil en el sistema actual. En el report RSPARAM se pueden ver los valores válidos. |
<V=nombre> | Valor de una variable en la tabla de variables |
<F=nombre> | Devuelve el valor de un módulo de funciones. Convención: FILENAME_EXIT_nombre |
<Y=nombre> | Devuelve el valor de un módulo de funciones. Convención: Y_FILENAME_EXIT_nombre |
<Z=nombre> | Devuelve el valor de un módulo de funciones. Convención: Z_FILENAME_EXIT_nombre |
A modo de ejemplo, para el nombre del fichero que inicia este artículo se le puede indicar en el campo “Fich. físico” lo siguiente:
Finalmente, la herramienta más notable es poder calcular una parte del nombre utilizando un módulo de funciones propio.
Si queremos utilizar <F=nombre>, el módulo de funciones debe cumplir las siguientes condiciones:
- Debe empezar por “FILENAME_EXIT_”. La parte “nombre” es libre, se puede poner otra palabra.
- Debe existir un parámetro Export con el nombre “OUTPUT”.
- Los parámetros Import deben tener valores propuestos.
- No se pueden utilizar Tablas.
Análogamente, para poder utilizar <Y=nombre> o <Z=nombre> se deben cumplir las mismas condiciones, y hay que darle al módulo de funciones el nombre convenido, siendo “Y_FILENAME_EXIT_nombre” o “Z_FILENAME_EXIT_nombre” respectivamente.
Hay un ejemplo muy sencillo de cómo definir este tipo de módulo de funciones buscando en la transacción SE37 el siguiente módulo: FILENAME_EXIT_EXAMPLE. Para utilizarlo de ejemplo en el nombre del fichero, bastaría con poner <F=EXAMPLE> en el campo “Fich. físico”.
Esperamos que este artículo haya aclarado tus dudas sobre los ficheros lógicos, así como el proceso para crearlos y utilizarlos en BW. No dudes en dejarnos tus preguntas en los comentarios.
La entrada Cómo cargar y guardar ficheros con nombre dinámico desde el servidor de SAP en BW se publicó primero en Blog de SAP: Actualidad SAP, Business Intelligence, SAP HCM, Abap....