✒️ABAP POO El desarrollo de una aplicación de Objetos Compartidos
ABAP POO El desarrollo de una aplicación de Objetos Compartidos
DESARROLLO DE UNA APLICACIÓN DE OBJETOS COMPARTIDOS
CREACIÓN DEL ÁREA
Utilizaremos la transacción SHMA para crear y mantener las áreas de memoria
Para crear un área nueva ponemos su nombre y pulsamos CREAR ej: ZCL_SHM_AREA
NOTA: El nombre del área debe comenzar con Z o con Y.
Introducimos una descripción para el área. Ej: Area de Test
Indicamos la clase raíz (ROOT CLASS) ej: ZCL_SHM_ROOT_OBJECT
En propiedades fijas: CON CREACION DE VERSIONES.
Pulsamos Guardar y se creará la clase raíz.
Esta clase se creará como una subclase de la clase estándar CL_SHM_AREA.
En clase: ZCL_SHM_ROOT_OBJECTY.
Descripción: Clase Raíz.
Creac.Instancia: Publico.
Tipo de clase: Clase ABAP habitual
Tic FINAL marcado.
Nota: el cehckbox FINAL indica que la clase ZCL_SHM_ROOT_OBJECT es una clase final, es decir no tendrá subclases.
Pulsamos grabar
En la pestaña propiedades:
Marcamos APTO MEM.COMPARTIDA
En la pestaña ATRIBUTOS:
Creamos el atributo MENSAJE como un CHAR de 100 visibilidad pública.
Las áreas y por lo tanto los objetos de dentro de las áreas no tienen mandante ni cliente por defecto. Sin embargo podemos especificar un área como dependiente de mandante. Los métodos de la clase del área que accedan a la instancia de la clase utilizan el mandante activo por defecto, podemos utilizar el parámetro CLIENT de importin para especificar el mandante de forma explícita.
CREACIÓN DE UNA INSTANCIA DEL AREA
Para acceder a un área necesitamos crear una variable referenciada del tipo de la clase de área generada.
Esta referencia sirve como un manejador para acceder al área.
Necesitamos crear una variable referenciada del tipo de la clase raíz.
Cuando instanciamos la clase de área, una instancia de la clase es creada en memoria compartida. El programa utiliza un manejador para esta instancia del área; todas las operaciones serán realizadas utilizando este manejador.
DATA: r_handle TYPE REF TO zcl_shm_area,
………r_root TYPE REF TO zcl_shm_root_object.
Luego ejecutamos el método ATTACH_FOR_WRITE el cual realiza un bloqueo para escritura.
r_handle = zcl_shm_area=>attach_for_write( ).
Una vez que la instancia ha sido creada, los objetos pueden ser creados en la memoria compartida. Para ello, utilizamos la adición AREA HANDLE en la sentencia CREATE OBJECT.
CREATE OBJECT r_root AREA HANDLE r_handle.
Escribimos un texto dentro del atributo MENSAJE que previamente creamos y que será el que luego leeremos de memoria.
r_root->mensaje = ‘Debe introducir un usuario y password para continuar’.
Para poder direccionar a los objetos creados en la instancia del área tenemos que asignar el objeto raíz al atributo ROOT del manejador del área. Para ello utilizaremos el método SET_ROOT del manejador.
Como resultado, cualquier programa puede acceder a esta área.
r_handle->set_root ( r_root ).
Para que cualquier programa pueda acceder al área, la aplicación solo tiene que buscar una referencia a la instancia de área y podrá acceder inmediatamente a los objetos contenidos en esa instancia del área.
El acceso a la lectura de la instancia del área no es posible hata que el bloqueo de escritura ha sido liberado. Para ello, utilizaremos el método DETACH_COMMIT.
r_handle->detach_commit ( ).
El código completo sería este:
REPORT zobjetos_compartidos_1.
DATA: r_handle TYPE REF TO zcl_shm_area,
r_root TYPE REF TO zcl_shm_root_object.
r_handle = zcl_shm_area=>attach_for_write( ).
CREATE OBJECT r_root AREA HANDLE r_handle.
r_root->mensaje = 'Debe introducir un usuario y password para continuar'.
r_handle->set_root( r_root ).
r_handle->detach_commit( ).
ACCEDIENDO A UNA INSTANCIA DEL AREA
Una vez creada la instancia, cualquier programa puede acceder a ello.
Los programas de lectura tendrán que implementar los siguientes pasos:
Utilizaremos una variable referenciada del tipo de la clase del área.
Esta variable se utiliza como un manejador para la instancia del área que será accedida.
DATA: r_handle TYPE REF TO zcl_shm_area,
………r_root TYPE REF TO zcl_shm_root_object.
El programa también tiene que obtener el manejador para la instancia del área.
Esto se realiza utilizando el método ATTACH_FOR_READ que es proporcionado por la clase CL_SHM_AREA.
Esto establece un bloqueo de lectura que impide que la instancia del área se borre durante el acceso.
r_handle = zcl_shm_area=>attach_for_read( ).
Imprimimos en pantalla el valor recuperado
WRITE:/ r_handle->root->mensaje.
Una vez completada la lectura, liberamos el bloqueo de lectura mediante el método DETACH del manejador del área.
r_handle->detach( ).
Este sería el codigo completo con todos los pasos:
REPORT zobjetos_compartidos_2. DATA: r_handle TYPE REF TO zcl_shm_area, r_root TYPE REF TO zcl_shm_root_object. r_handle = zcl_shm_area=>attach_for_read( ). WRITE:/ r_handle->root->mensaje. r_handle->detach( ).
Para probar, primero se ejecuta ZOBJETOS_COMPARTIDOS_1, luego ejecutamos ZOBJETOS_COMPARTIDOS_2.
 
 
 
Sobre el autor
Publicación académica de Josep Antoni Lopez Moyano, en su ámbito de estudios para el Máster ABAP POO.
Josep Antoni Lopez Moyano
Profesión: It Manager - España - Legajo: QP26P
✒️Autor de: 375 Publicaciones Académicas
🎓Egresado de los módulos:
- Carrera Consultor en SAP HCM Nivel Inicial
- Carrera Consultor Basis NetWeaver Nivel Avanzado
- Carrera Consultor Basis NetWeaver Nivel Inicial
- Máster Funcional ABAP
- Máster ABAP Orientado a Objetos
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial