Definir área de memoria compartida

Un área es una plantilla para instancias de área en la memoria compartida.
Un área puede generar varias instancias de área con diferentes nombres.
Además, una instancia de área puede tener varias versiones con distintos ID de versión o números de versión.
En el más sencillo de los casos, sin gestión de versiones, una instancia de área consta de una única versión.
Clases de área y handles de área
Para definir un área tenemos que utilizar la transacción SHMA.
Creamos una clase de área final global con el mismo nombre, subclase de CL_SHM_AREA.
En un programa ABAP, podemos acceder al área exclusivamente mediante métodos de la clase de área generada.
Grafico 3: Creación de un área
 
Podemos utilizar métodos estáticos (métodos para vincular) de una clase de área para vincular un programa ABAP, o su modo interno donde el sistema procesa el programa ABAP, a una instancia de área en la memoria compartida. Al vincular un programa ABAP, se crea una instancia de la clase de área como un manejador de área.
En la imagen anterior, también se muestra otra clase, que es la clase de raíz de área.
Podemos crear cualquier número de objetos en una instancia de área, dependiendo del programa específico.
Accedemos a estos objetos de manera uniforme a través de la instancia de la clase de raíz de área.
Para definir áreas de memoria compartida tenemos que utilizar la transacción SHMA.
Llamamos al código de transacción SHMA e introducimos el nombre del área. Se aplican las reglas habituales del área de nombres, es decir, el nombre de área debe empezar por Y o Z en el sistema del cliente. El sistema también admite áreas de nombres que contengan barras diagonales.
En un programa ABAP, se accede a un área exclusivamente mediante métodos de la clase de área generada. El sistema ha vinculado cada área con una clase de raíz de área global, cuyos atributos pueden contener datos de propiedad y referencias a otras clases compartidas de memoria habilitada. Cuando se actualice, deberá asignar la clase de raíz de área a un área. Si una versión de instancia de área no está vacía, debe contener, al menos, una instancia de la clase de raíz de área como su objeto raíz, que el sistema utiliza como referencia a otros objetos.
Al generar la clase de área, el sistema genera y tipifica un atributo ROOT con el tipo estático de la clase de raíz de área.
Estos son los términos importantes para crear un área:

  • Área dependiente del mandante

Tanto las áreas como los objetos de la misma no tienen un ID de mandante por defecto. No obstante, podemos especificar un área como dependiente del mandante.
En las áreas dependientes del mandante, los métodos de la clase de área para acceder a una instancia de área hacen referencia al mandante activo por defecto.
Podemos utilizar el parámetro de importación opcional CLIENT para acceder explícitamente a otro mandante.

  • Área transaccional

Una versión de instancias de área de un área transaccional no está activa inmediatamente después de eliminar un bloqueo de modificación con el método DETACH_COMMIT. No está activa hasta el próximo commit de base de datos.
Esto resulta particularmente útil en la implementación de cestas de la compra en la memoria de objetos compartidos.
Para entenderlo mejor, en este artículo, definimos el área de memoria ZCL_CESTA_COMP_AREA_LOGALI para la clase global ZCL_CESTA_COMPRAS_LOGALI.
Los pasos para resolverlo son los siguientes:

  1. En la transacción SHMA informamos el campo Nombre de área y continuamos utilizando el botón Crear.
  2. Rellenamos el campo Descripción e informamos el campo Clase raíz. Seleccionamos la opción Área dependiente de mandante y grabamos las modificaciones asignando paquete de desarrollo y orden de transporte.
  3. En la barra inferior podemos ver el mensaje de información que indica que el área se ha creado.

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *