Uso de los comandos Import / Export (ABAP)

Los comandos Import / Export, son aquellos que permiten guardar una variable en memoria, pero con la restricción de solo poder usarse dentro de una misma sesión interna (nodo/ventana) (Este punto se explicará con mayor detalle en la parte final). No obstante, estos comandos son muy útiles cuando trabajamos con interrelación de programas, en donde no hay una manera directa de mover ciertos valores, otro uso que yo le hago es cuando aplico enhancements y necesito que algún valor pase del punto de ampliación hacia mi programa Z o validación.

Para el comando Export, quiere decir cuando nosotros enviamos nuestro parámetro hacia la memoria, la estructura es la siguiente:

EXPORT NOMBRE_VARIABLE TO MEMORY ID ‘NOMBRE_MEMORIA’.

Para el comando Import, quiere decir cuando nosotros recibimos nuestro parámetro proveniente de la memoria, la estructura es la siguiente:

IMPORT NOMBRE_VARIABLE FROM MEMORY ID ‘NOMBRE_MEMORIA’.

Donde:

– NOMBRE_VARIABLE: Es el campo que requerimos guardar en memoria.

– NOMBRE_MEMORIA: Es el nombre que se le da al espacio de memoria que vamos a usar, debe ir entre comilla simple ‘ ‘.

OJO: El NOMBRE_VARIABLE y NOMBRE_MEMORIA debe ser el mismo en ambos comandos cuando sean colocados, de igual forma el tipo de variable debe ser el mismo, es decir si mandas un char de 10, el que recibe también debe ser un char de 10.

TIPS: Luego de realizar la importación de la variable y haberla usado, se recomienda hacer un limpiado del valor en memoria, ello se hace con el comando

FREE MEMORY ID ‘NOMBRE_MEMORIA’

Esto se recomienda cuando la interrelación de los programas es muy seguida y permanece bajo la misma sesión (nodo/ventana). Por citar un ejemplo: Cuando haces varios submit a un programa, el cual por cada documento obtienes una variable, lo aconsejable es que previo a cada submit se limpie la variable de memoria, porque puede pasar el caso en que una consulta al submit no devuelva resultados, pero en memoria se tiene el valor anterior y si no se limpia, se puede considerar erroneamente dicho valor, ocasionando problemas.

Pero si por el contrario, una vez concluido el programa el nodo se cierra, o se ejecuta el programa en otro nodo, la variable en memoria deja de servir, pues la solución solo funciona estando en la misma sesión interna. Para entender mejor ello, se dispone de los siguientes ejemplos:

Ejemplo con sesión interna:

Para este ejemplo usaremos 2 programas, en donde uno recopila la información y el otro la muestra y vamos a enviar los datos por memoria, todo ello se hara en el mismo nodo/ventana, es decir tras ejecutar el primer programa, y sin cerrar la ventana, se ejecutara el segundo, para ello empleamos el comando SUBMIT.

El programa que envía la información es el siguiente:

REPORT ZLI_PRUEBA2.

PARAMETERS: P_VALOR(8) TYPE C,
P_NUM TYPE I.

DATA: LV_CAMPO1(8) TYPE C,
LV_CANTIDAD TYPE I.

LV_CAMPO1 = P_VALOR.
LV_CANTIDAD = P_NUM.

EXPORT LV_CAMPO1 TO MEMORY ID ‘ZCAMPO1’.
EXPORT LV_CANTIDAD TO MEMORY ID ‘ZCAMPO2’.

SUBMIT ZLI_PRUEBA3.

El programa que lo recepciona y muestra

REPORT  ZLI_PRUEBA3.

DATA: LV_CAMPO1 TYPE BKPFBKTXT,
      LV_CANTIDAD TYPE I.

IMPORT LV_CAMPO1 FROM MEMORY ID ‘ZCAMPO1’.
IMPORT LV_CANTIDAD FROM MEMORY ID ‘ZCAMPO2’.

WRITE:/ LV_CAMPO1,
      / LV_CANTIDAD.

FREE MEMORY ID ‘ZCAMPO1’.
FREE MEMORY ID ‘ZCAMPO2’.

Al ejecutar el programa ZLI_PRUEBA2 tenemos dos parámetros que llenamos con cualquier valor

02-12-2014 01-36-39 p-m-

Luego colocaremos un break point en el programa ZLI_PRUEBA3 y ejecutamos el reporte anterior para ver por debug, cuando pare en el punto que le hemos señalado antes de importar, notaremos que las variables se encuentran vacias

02-12-2014 01-40-44 p-m-

Luego dejamos que el programa ejecute los dos comandos de importación y tras ello las variables aparecen con los valores que añadimos al primer reporte

02-12-2014 01-41-10 p-m-

La culminación del programa es la impresión de dichos valores en pantalla

02-12-2014 01-41-27 p-m-

Ejemplo con sesión interna 2:

Al igual que en el caso anterior, emplearemos 2 programas y los ejecutaremos empleando la misma ventana, en este caso usare la transacción SE38 para ejecutar uno primero, luego, sin salir de la ventana, ejecutare el segundo programa, haciendo ello todavía comparto la sesión interna y por lo tanto, el valor en memoria se mantiene.

Primero se tiene el programa ZLI_BETA el cual recibe como parámetro de selección un campo de fecha, valor que exportara por memoria

PARAMETERSp_datum TYPE sydatum.

START-OF-SELECTION.

EXPORT p_datum TO MEMORY ID ‘PRU1’.

El programa ZLI_PRUEBA es donde se importará el valor en memoria y se imprimira en pantalla

START-OF-SELECTION.

DATAp_datum TYPE sydatum.

IMPORT p_datum FROM MEMORY ID ‘PRU1’.

WRITEp_datum.

Como se indicó, ejecutaremos el programa ZLI_BETA desde la transacción SE38, en el nodo/sesión (1)

c0

 

En pantalla se solicitará el ingreso de una fecha, la cual completamos y ejecutamos

c1

Una vez ejecutado, retrocedemos a la pantalla de la transacción SE38 y ejecutaremos el segundo programa ZLI_PRUEBA, notesé que la ventana se ha mantenido y por lo tanto, seguimos en la misma sesión interna, nodo/ventana (1)

c2

 

Al ejecutar el programa ZLI_PRUEBA se notará que la variable de importación funciono y trajo el valor que introducimos en el primer programa

c3

Ejemplo con distintas ventanas:

En este ejemplo notaremos la restricción mencionada sobre los parámetros de exportación e importación, la cual al salir de la sesión interna, la variable se pierde y no se puede usar. Para ello emplearemos los programas anteriores, ZLI_BETA y ZLI_PRUEBA en distintas ventanas y comprobaremos que la importación no se dará.

Ejecutaremos desde la transacción SE38, el programa ZLI_BETA en el nodo/ventana (1)

c4

Ingresaremos una fecha cualquiera y ejecutaremos

c5

Luego en otro nodo/ventana (2), se ejecutará el programa ZLI_PRUEBA

c6

Y como se comento anteriormente, al no compartir la misma sesión interna, la importación no obtiene valor y por lo tanto, se imprime el valor por defecto de la fecha (00.00.0000)

c7.JPG

Tener en cuenta lo mencionado con respecto a la sesión interna, mientras se mantenga el mismo nodo/ventana, los comandos export e import serán una solución viable; en caso la ejecución sea en nodos/ventanas diferentes, esta solución deja de tener efecto y se debe examinar otras alternativas.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

w

Conectando a %s