martes, abril 06, 2010

SHARED OBJECTS

A partir de la versión ECC6.0 se ha añadido una nueva funcionalidad "SHARED OBJECTS" para compartir datos por memoria. Aún se puede utilizar métodos de siempre sentencias IMPORT/EXPORT y SET/GET PARAMETER.

Pasos a seguir:

1) Crear una área mediante la transacción SHMA. Esta área genera automáticamente una interfase. En el ejemplo se crea el area Z_CL_SHM_AREA_1 y se genera la clase con el mismo nombre.

2) Crear una clase mediante la transacción SE24 que herede de la clase CL_SHM_ROOT_1. En el ejemplo se crea la clase ZCL_SHM_ROOT_1.
Hay que marcar el flag para memória compartida. Se añade el atributo variable a la clase y sus métodos set/get:

METHOD get_variable.
e_variable = variable.
ENDMETHOD.

METHOD set_variable.
variable = i_variable.
ENDMETHOD.

3) Crear programa que guardar información en memoria.

REPORT zshare_objects.

PARAMETERS: p_param(128).

DATA: hdl TYPE REF TO z_cl_shm_area_1.
DATA: root TYPE REF TO zcl_shm_root_1.
DATA: l_variable TYPE string.

START-OF-SELECTION.

hdl = z_cl_shm_area_1=>attach_for_write( )."Indicar que para escritura

CREATE OBJECT root AREA HANDLE hdl.
l_variable = p_param.
CALL METHOD root->set_variable
EXPORTING
i_variable = l_variable.
hdl->set_root( root ).
hdl->detach_commit( ) .


4) Crear programa que lea de memória.

REPORT zshare_objects2.

DATA: hdl TYPE REF TO z_cl_shm_area_1.
DATA: root TYPE REF TO zcl_shm_root_1.
DATA: l_variable TYPE string.

START-OF-SELECTION.

TRY.
hdl = z_cl_shm_area_1=>attach_for_read( )."indicar que es para lectura
CATCH cx_shm_attach_error.
ENDTRY.

CALL METHOD hdl->root->get_variable
IMPORTING
e_variable = l_variable.

WRITE: 'Valor variable', l_variable.

Para más información:
http://help.sap.com/saphelp_nw2004s/helpdata/EN/14/dafc3e9d3b6927e10000000a114084/frameset.htm

http://www.sap-press.de/katalog/buecher/htmlleseproben/gp/htmlprobID-111