
La memoria en ABAP:
En ciertas oportunidades, podria pasar que mientras ejecutamos un programa u objeto ABAP, necesitamos de datos que se obtengan en otro programa ABAP que se ejecuto previamente.
Existen varias formas de solucionarlo, una de ellas es pasar parametros de un programa a otro, si es que los dos objetos son programas. Otra opcion es utilizar la memoria para pasar datos. Existen sentencias para manipular los datos que subimos y bajamos de memoria. Para subir datos a memoria utilizaremos la sentencia EXPORT, ejemplo:
EXPORT <valor> TO MEMORY ID <id_unico>
El ID que se utiliza debe ser unico, veamos un ejemplo mas detallado:
* Exporto a memoria el estado del usuario
EXPORT v_estado_usu TO MEMORY ID 'Z_ESTADO'.
IF sy-subrc NE 0.
MESSAGE e000(z1) WITH 'Error al exportar'.
ENDIF.
Para bajar o descargar los datos de memoria utilizamos la sentencia IMPORT tal como mostramos a continuacion.
IMPORT <valor> FROM MEMORY ID <id_unico>.
Veamos un ejemplo mas detallado:
*Import de memoria el estado del usuario
IMPORT v_estado_usu FROM MEMORY ID 'Z_ESTADO'.
IF sy-subrc NE 0.
MESSAGE e000(z1) WITH 'Error al importar'.
ENDIF.
Nota: Se pueden importar tanto variables como estructuras o tablas internas a memoria.
Despues de bajar los datos de memoria es conveniente liberar el area de memoria utilizada. Esto lo hacemos con la sentencia FREE MEMORY tal como vemos a continuacion.
* Libero la memoria ABAP
FREE MEMORY ID 'Z_ESTADO'.
Para que la exportacion e importacion de datos funcione se debe utilizar la misma sesion de memoria o ejecucion.
Utilizaremos SUBMIT para llamar a un programa dentro de la ejecucion de otro programa. Ejemplo:
REPORT zprueba_abap_4_7.
DATA: v_estado_usu TYPE char10.
START-OF-SELECTION.
EXPORT v_estado_usu TO MEMORY ID 'Z_ESTADO'.
IF sy-subrc NE 0.
MESSAGE e000(z1) WITH 'Error al exportar'.
ENDIF.
SUBMIT zprueba_abap_4_8 AND RETURN.
Luego en el programa que importa los datos haremos lo siguiente:
REPORT zprueba_abap_4_8.
DATA: v_estado_usu TYPE char10.
START-OF-SELECTION.
IMPORT v_estado_usu FROM MEMORY ID 'Z_ESTADO'.
IF sy-subrc NE 0.
MESSAGE e000(z1) WITH 'Error al importar'.
ENDIF.