✒️La memoria en SAP y en ABAP
La memoria en SAP y en ABAP
Resumen
Unidad 4 leccion 9
La Memoria en SAP y en ABAP
1- La Memoria.
En ciertas oportunidades podría suceder q mientras ejecutamos un prog u objeto en ABAP, necesitamos de datos q se obtenga en otro prog ABAP q se ejecuto previa/.
Existen varias formas de solucionar esto => pasando parámetro de un prog a otro (si es q ambos objetos son prog.)
=> otra opción es utilizar la memoria xa pasar los datos entre prog.
Debemos hacer una distinción cuando hablamos de memoria
- La memoria de SAP
- La memoria de ABAP
La memoria de ABAP es una memoria local y es muy limitada, ya q solo se puede acceder a ella dentro de una sesión interna y los prog q se ejecutan fuera de sesión no pueden leer ni escribir en esta memoria. Cuando hablamos de una sesión interna nos referimos a una sesión interna de usuario de SAP en particular.
En cambio la memoria de SAP es una memoria global y es accesible xa todos los prog. q se ejecutan en esa sesión, así como en las diferentes sesiones ppal/. La memoria de SAP se puede utilizar xa pasar datos de un prog a otro, ya sea dentro de una sesión o en otra sesión.
En términos de uso, el uso ppal de la memoria ABAP es hacer q los datos sean accesibles xa múltiples prog dentro de la misma sesión. Y en lo q respecta a la memoria de SAP también hace q los datos estén disponibles en múltiples sesiones.
Cuando se trata de la memoria SAP utilizaremos sentencias
SET PARAMETER ID y GET PARAMETER ID
xa intercambio de datos
SET xa asignar valor a los ID y GET vamos a recuperar los valores de los ID de parámetros
por otro lado los prog ABAP pueden acceder a la memoria ABAP dentro de la misma sesión interna utilizando las sentencias IMPORT y EXPORT. los datos dentro de esta memoria permanecen intactos durante una secuencia de llamadas a prog.
Diferencias de la memoria SAP vs memoria ABAP
MEMORIA DE SAP |
MEMORIA DE ABAP |
- Es una memoria global | - Es una memoria local |
- Todas las sesiones de SAP GUI de todos los usuarios de SAP tienen acceso a ella | - Todos los prog. dentro de una misma sesión tienen acceso a ella |
- Hacen q los datos estén disponibles en la sesión ppal | - Hace q los datos estén disponibles en múltiples sesiones dentro de la misma sesión |
- Los datos se pueden intercambiar utilizando los prog GET / SET | - Los datos se pueden intercambiar utilizando las sentencias EXPORT / IMPORT |
1-1 La memoria de SAP
La sentencia SET PARAMETER ID se utiliza xa el evento de parámetros en la llamda a una TX
sintaxis
SET PARAMETER ID <pid> FIELD <f>
con estas sentencia escribiremos el contenido del campo f en la memoria global de SAP del susario bajo el ID pid. los ID => pueden tener 20 caracteres.
=> Los valores escritos en la memoria SAP se conservan incluso cuando el usuario sale de prog.
Ej: sobre como se utiliza la sentencia SET PARAMETER ID accedes al prog. TX VA01 => pedidos de clientes
en la TX VA01 => clase de pedido (es obligatorio)
si en la TX VA01 y en el campoclase de pedido y presionamos F1 en este campo y visualizamos la documentacion del campo x pantalla y hacemos clic en el botón información técnica asi:
Aquí encontramos el ID de parámetro xa el campo clase de pedido q es AAT.
Vamos a utilizar el ID parámetro TX VA01 completar la pantalla inicial de la TX y acceder directa/ a la segunda pantalla de la TX. => creamos el programa ztest_set_parameter
REPORT ztest_set_parameter
SET PARAMETER ID 'AAT' FIELD 'CMR'.
CALL TRANSATION 'VA01' AND SKIP FIRST SCREEN.
La sentencia SE PARAMETER ID 'AAT' FIELD 'CMR' asigna la ID de parámetro 'AAT' el valor de 'CMR'
La sentencia CALL TRANSACTION ejecuta la TX VA01 y agregado de la claúsula AND SKIP FIRST SCREEN
evita mostrar la primera pantalla de la TX
si ejecutamos el prog. ztest_set_parameter, efectival/ accede directa/ a la segunda pantalla de la TX VA01
ejecutamos el prog ZTEST_SET_PARAMETER vamos a ver q efectiva/ acceder directa/ a la segunda pantalla VA01 habiendo cargado en la primera pantalla el valor CMR xa el campo clase de pedido.
por otro lado, la sentencia GET PARAMETER ID se utiliza xa transferir el valro almacendado en un ID de parámetro de memoria SAP a un campo o variable.
sintaxis => GET PARAMETER ID < pid > FIELD < f >
ej: GET PARAMETER ID
creamos el prog. ztest_get_parameter y lo q hacemos es pasar el valor CMR al ID de parámetro AAT mediante la sentencia SET PARAMETER ID y luego recuperamos el valor q acabamos de pasar mediante la ejecución de la sentencia GET PARAMETER IF así:
REPORT ztest_get_parameter.
DATA: v_valor(3) TYPE c.
CLEAR v_valor.
SET PARAMETER ID 'AAT' FIELD 'CMR'.
IF sy-subrc NE 0. " siempre evalua la sentencia
write:/ 'el parametro es erroneo', v_valor.
ENDIF.
GET PARAMETER ID 'AAT' FIELD v_valor.
if sy-subrc EQ 0.
Write:/'el valor triaido ', v_valor.
else.
Write:/'el valor es errad', v_valor.
endif.
1-2 La memoria de ABAP
tal como mencionamos anterior/ en ABAP existen sentencias q nos permiten manipular los datos q subimos y bajamos de la memoria
xa subir y exportar datos a la memoria ABAP vamos a utilizar la sentencia EXPORT
EXPORT <campo > TO MEMORY ID <id_unico>
el ID q se utiliza debe ser unico ya q identifica a ese dato dentro de la memoria ABAP.
CLEAR v_estado_usu.
v_estado_usu = 'ACTIVO'.
" exportamos 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.
xa bajar o importar los datos de la memoria ABAP, la sentencia IMPORT tal como los vemos así:
IMPORT <campo > FROM MEMORY ID <id_unico >
Ej: " importo 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.
=> se pueden importa o exporta tanto variables, como estructuras o tablas internas a la memoria ABAP.
luego de bajar datos de la memoria es conveniente liberar el área de memoria utilizada => sentencia FREE MEMORY
" liberamoa la memria ABAP.
FREE MEMORY ID 'z_estado'.
=> Xa q la importación y exportación de datos funcione correctal/ se debe utilizar la misma sesión de memoria o ejecución.
Ahora bien, si deseamos pasar datos entre prog podemos utilzar la sentencia SUBMIT, xa poder llamar a un prog dentro de la ejecución de otro prog.
Ej: prog q exporta datos y realiza un SUBMIT a otro prog q importa esos datos.
prog ztest_export_submit.
REPORT ztest_export_submit.
DATA: v_estado_usu TYPE char10.
START-OF-SELECTION.
" exportamos 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.
" se va a pasar el control a otro prog
" llamamos al otro prog con la instruccion SUBMIT
SUBMIT ztest_import_submit AND RETURN.
==> AND RETURN => esta sentencia es: CUANDO finaliza el prog. el cual se le paso el control, devuelve el control a este prog donde estamos actual/.
prog. => ztest_export_submit => pasa el control a
ztest_import_submit y luego regresa el control
a ztest_export_submit
se crea el prog import
REPORT ztest_import_submit.
DATA: v_estado_usu TYPE char10.
START-OF-SELECTION.
" importamos de memoria el estado del usuario
IMPORT v_estado_usu FROM MEMORY ID 'Z_ESTADO' " id de memoria
IF sy-subrc NE 0.
MESSAGE e000(z1) WITH 'Error al importar'.
ELSE.
WRITE:/ v_estado_usu.
ENDIF.
"liberamos la memoria en ABAP.
FREE MEMORY ID 'Z_ESTADO'.
 
 
 
Sobre el autor
Publicación académica de Gustavo Betancur Guzmán, en su ámbito de estudios para la Carrera Consultor ABAP.
Gustavo Betancur Guzmán
Profesión: Ingeniero de Sistemas - Colombia - Legajo: WS86O
✒️Autor de: 164 Publicaciones Académicas
🎓Egresado de los módulos:
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial
- Carrera Consultor en SAP MM Nivel Avanzado
- Carrera Consultor en SAP MM Nivel Inicial