charla objetos persistentes

50
Charla sobre Objetos Persistentes Alvaro Tejada Galindo Project Manager – SAP Mentor Biz Partner

Upload: biz-partner

Post on 06-Jul-2015

2.148 views

Category:

Technology


1 download

DESCRIPTION

Charla sobre Objetos Persistentes en las Oficinas de BizPartner por Alvaro Tejada el 12/11/2009

TRANSCRIPT

Page 1: Charla Objetos Persistentes

Charla sobre Objetos Persistentes

Alvaro Tejada Galindo

Project Manager – SAP Mentor

Biz Partner

Page 2: Charla Objetos Persistentes

Que son los Objetos Persistentes?

Son objetos que continúan existiendo y manteniendo su data más allá de la duración del proceso que los creo.

Es decir, podemos encapsular su funcionalidad y utilizarlos cuando queramos y donde queramos.

Es un concepto avanzado de la programación orientada a objetos.

Page 3: Charla Objetos Persistentes

Como crear un Objeto Persistente?

Simplemente, debemos ir a la transacción SE24 y crear una clase de tipo persistente o Persistent Class.

Llamamos a nuestra clase ZCL_SPFLI_PERS.

Page 4: Charla Objetos Persistentes
Page 5: Charla Objetos Persistentes
Page 6: Charla Objetos Persistentes

El sistema nos define la clase como Protected a pesar de que nosotros queríamos Public. Esto es porque se crean dos clases adicionales, llamadas:

ZCB_SPFLI_PERS ZCA_SPFLI_PERS

Page 7: Charla Objetos Persistentes

En la orientación a objetos, nuestra clase ZCL_SPFLI_PERS es un objeto “Manejado”, por lo tanto su tiempo de vida no puede ser controlado directamente.

Para eso se utiliza la clase ZCA_SPFLI_PERS.

Pero como hay una relación directa, se utiliza una tercera clase como nexo.

Page 8: Charla Objetos Persistentes

Esta clase es conocida como “Friend”.

Page 9: Charla Objetos Persistentes

Una vez que tenemos creado nuestro Objeto Persistente...deberíamos enlazarlo a alguna tabla, puesto que sino, no nos sirve de nada.

Page 10: Charla Objetos Persistentes
Page 11: Charla Objetos Persistentes

Debemos hacer doble clic en cada campo y subirlos con el botón de flecha.

Page 12: Charla Objetos Persistentes
Page 13: Charla Objetos Persistentes

Cuando grabamos y salimos, notaremos que todos los SETs y los GETs han sido creado para cada uno de los campos que seleccionamos.

Esto nos permite encapsular las acciones realizadas a la tabla.

Page 14: Charla Objetos Persistentes
Page 15: Charla Objetos Persistentes

Ahora solo debemos generar la clase Actor, para poder manipular la tabla. (Se crean nuevos métodos).

Page 16: Charla Objetos Persistentes
Page 17: Charla Objetos Persistentes

Business Object Class

Si bien tenemos lista nuestra clase persistente, y podemos utilizarla en cualquier programa, lo mejor es crear una clase llama Business Object Class o Clase de Objeto de Negocio, para poder agregar una capa más de abstracción a la Base de Datos, es decir, protegemos más el acceso.

Page 18: Charla Objetos Persistentes

Creamos una clase llamada ZCL_SPFLI_BOC.

Page 19: Charla Objetos Persistentes

Dentro de nuestra clase creamos 4 métodos públicos, llamados CREAR_SPFLI, MODIFICAR_SPFLI, LEER_SPFLI y BORRAR_SPFLI.

Page 20: Charla Objetos Persistentes

CREAR_SPFLI recibe solo un parámetro de tipo IMPORTING llamado I_SPFLI.

Page 21: Charla Objetos Persistentes

METHOD crear_spfli.

  DATA: l_agent TYPE REF TO zca_spfli_pers,        l_pers_obj TYPE REF TO zcl_spfli_pers.

  TRY.      l_agent = zca_spfli_pers=>agent.      l_pers_obj = l_agent->create_persistent(      i_carrid = i_spfli-carrid      i_connid = i_spfli-connid      i_airpfrom = i_spfli-airpfrom      i_airpto = i_spfli-airpto      i_arrtime = i_spfli-arrtime      i_cityfrom = i_spfli-cityfrom      i_cityto = i_spfli-cityto      i_countryfr = i_spfli-countryfr      i_countryto = i_spfli-countryto      i_deptime = i_spfli-deptime      i_distance = i_spfli-distance      i_distid = i_spfli-distid      i_fltime = i_spfli-fltime      i_fltype = i_spfli-fltype      i_period = i_spfli-period ).      COMMIT WORK.    CATCH cx_os_object_existing.      ROLLBACK WORK.  ENDTRY.

ENDMETHOD.

Page 22: Charla Objetos Persistentes

MODIFICAR_SPFLI recibe 3 parámetros de tipo IMPORTING llamados I_CARRID, I_CONNID y I_SPFLI.

Page 23: Charla Objetos Persistentes

METHOD modificar_spfli.

  DATA: l_agent TYPE REF TO zca_spfli_pers,        l_pers_obj TYPE REF TO zcl_spfli_pers.

  TRY.      l_agent = zca_spfli_pers=>agent.      l_pers_obj = l_agent->get_persistent(      i_carrid = i_carrid      i_connid = i_connid ).      l_pers_obj->set_airpfrom( i_spfli-airpfrom ).      l_pers_obj->set_airpto( i_spfli-airpto ).      l_pers_obj->set_arrtime( i_spfli-arrtime ).      l_pers_obj->set_cityfrom( i_spfli-cityfrom ).      l_pers_obj->set_cityto( i_spfli-cityto ).      l_pers_obj->set_countryfr( i_spfli-countryfr ).      l_pers_obj->set_countryto( i_spfli-countryto ).      l_pers_obj->set_deptime( i_spfli-deptime ).      l_pers_obj->set_distance( i_spfli-distance ).      l_pers_obj->set_distid( i_spfli-distid ).      l_pers_obj->set_fltime( i_spfli-fltime ).      l_pers_obj->set_fltype( i_spfli-fltype ).      l_pers_obj->set_period( i_spfli-period ).      COMMIT WORK.    CATCH cx_os_object_not_found.      ROLLBACK WORK.  ENDTRY.

ENDMETHOD.

Page 24: Charla Objetos Persistentes

LEER_SPFLI recibe 2 parámetros de tipo IMPORTING llamados I_CARRID, I_CONNID y un parámetro de tipo RETURNING llamado I_SPFLI.

Page 25: Charla Objetos Persistentes

method LEER_SPFLI.

  DATA: l_agent TYPE REF TO zca_spfli_pers,        l_pers_obj TYPE REF TO zcl_spfli_pers.

  TRY.      l_agent = zca_spfli_pers=>agent.      l_pers_obj = l_agent->get_persistent(      i_carrid = i_carrid      i_connid = i_connid ).      i_spfli-carrid = l_pers_obj->get_carrid( ).      i_spfli-connid = l_pers_obj->get_connid( ).      i_spfli-airpfrom = l_pers_obj->get_airpfrom( ).      i_spfli-airpto = l_pers_obj->get_airpto( ).      i_spfli-arrtime = l_pers_obj->get_arrtime( ).      i_spfli-cityfrom = l_pers_obj->get_cityfrom( ).      i_spfli-cityto = l_pers_obj->get_cityto( ).      i_spfli-countryfr = l_pers_obj->get_countryfr( ).      i_spfli-countryto = l_pers_obj->get_countryto( ).      i_spfli-deptime = l_pers_obj->get_deptime( ).      i_spfli-distance = l_pers_obj->get_distance( ).      i_spfli-distid = l_pers_obj->get_distid( ).      i_spfli-fltime = l_pers_obj->get_fltime( ).      i_spfli-fltype = l_pers_obj->get_fltype( ).      i_spfli-period = l_pers_obj->get_period( ).      COMMIT WORK.    CATCH cx_os_object_not_found.      ROLLBACK WORK.  ENDTRY.

endmethod.

Page 26: Charla Objetos Persistentes

BORRAR_SPFLI recibe 2 parámetros de tipo IMPORTING llamados I_CARRID, I_CONNID.

Page 27: Charla Objetos Persistentes

METHOD borrar_spfli.

  DATA: l_agent TYPE REF TO zca_spfli_pers.

  TRY.      l_agent = zca_spfli_pers=>agent.      l_agent->delete_persistent(      i_carrid = i_carrid      i_connid = i_connid ).      COMMIT WORK.    CATCH cx_os_object_not_existing.      ROLLBACK WORK.  ENDTRY.

ENDMETHOD.

Page 28: Charla Objetos Persistentes

Una vez que tenemos listos nuestros métodos, podemos crear un pequeño programa para probar como funciona nuestra clase.

El programa lo llamaremos Z_SPFLI_PERSISTENTE.

Page 29: Charla Objetos Persistentes

REPORT  z_spfli_persistente.

DATA: spfli_boc TYPE REF TO zcl_spfli_boc,      t_spfli TYPE STANDARD TABLE OF spfli.

FIELD-SYMBOLS: <fs_spfli> LIKE LINE OF t_spfli.

CREATE OBJECT spfli_boc.

APPEND INITIAL LINE TO t_spfliASSIGNING <fs_spfli>.

*Crear nuevo registro<fs_spfli>-carrid = 'AA'.<fs_spfli>-connid = '0065'.<fs_spfli>-countryfr = 'US'.<fs_spfli>-cityfrom = 'MIAMI'.

spfli_boc->crear_spfli(EXPORTING  i_spfli = <fs_spfli> ).

*Modificar registro<fs_spfli>-carrid = 'AA'.<fs_spfli>-connid = '0065'.<fs_spfli>-countryfr = 'US'.<fs_spfli>-cityfrom = 'LAS VEGAS'.

Page 30: Charla Objetos Persistentes

spfli_boc->modificar_spfli(  i_carrid = <fs_spfli>-carrid  i_connid = <fs_spfli>-connid  i_spfli = <fs_spfli> ).

*Leer registro<fs_spfli>-carrid = 'AA'.<fs_spfli>-connid = '0065'.

<fs_spfli> = spfli_boc->leer_spfli(             i_carrid = <fs_spfli>-carrid             i_connid = <fs_spfli>-connid ).

WRITE:/ <fs_spfli>-carrid, <fs_spfli>-connid,        <fs_spfli>-countryfr, <fs_spfli>-cityfrom.

 *Eliminar registro<fs_spfli>-carrid = 'AA'.<fs_spfli>-connid = '0065'.

spfli_boc->borrar_spfli(  i_carrid = <fs_spfli>-carrid  i_connid = <fs_spfli>-connid ).

Page 31: Charla Objetos Persistentes

Para probarlo, nos vamos a la tabla SPFLI y seleccionamos los registros con CARRID igual a “AA”.

Page 32: Charla Objetos Persistentes

Es importante que ejecutemos el código, comentando las partes que no vamos a utilizar. Recuerden que este es un programa de prueba.

Page 33: Charla Objetos Persistentes

Ejecutamos la creación del nuevo registro.

Page 34: Charla Objetos Persistentes

Ejecutamos la modificación del nuevo registro.

Page 35: Charla Objetos Persistentes

Ejecutamos la lectura del nuevo registro.

Page 36: Charla Objetos Persistentes

Ejecutamos la eliminación del nuevo registro.

Page 37: Charla Objetos Persistentes

Ya vimos como podemos manejar las cosas para un simple registro, siempre utilizando las llaves. Veamos como debemos hacer si queremos leer toda la tabla. Y esto en realidad es lo que más nos conviene, puesto que los Objetos Persistentes tiene un manejo muy pobre del WHERE. Lo mejor es manejarlo externamente.

Page 38: Charla Objetos Persistentes

Creamos una estructura llamada ZCS_SPFLI_OBJ.

Page 39: Charla Objetos Persistentes

Como se darán cuenta, estamos usando una clase como tipo de dato. Es por eso que marcamos el check de Rty.

Page 40: Charla Objetos Persistentes

Con la estructura que hemos creado, debemos crear ahora un Tipo de Tabla llamado ZCL_SPFLI_TBL.

Page 41: Charla Objetos Persistentes

En nuestra clase ZCL_SPFLI_BOC creamos un nuevo método llamado LEER_TODO_SPFLI.

Utilizamos un parámetro llamado R_SPFLI de tipo RETURNING haciendo referencia al Tipo de Tabla ZCL_SPFLI_TBL.

Page 42: Charla Objetos Persistentes

Creamos un método CONSTRUCTOR, y otro método llamado MAPEAR_CAMPOS, además declaramos los atributos PERSISTENT_OBJECT y SPFLI_TAB.

Page 43: Charla Objetos Persistentes

El método CONTRUCTOR recibe solo un parámetro.

Page 44: Charla Objetos Persistentes

METHOD constructor.

  me->persistent_object = i_persistent_object.  me->mapear_campos( ).

ENDMETHOD. 

Page 45: Charla Objetos Persistentes

El método MAPEAR_CAMPOS no recibe parámetros.

• METHOD mapear_campos.

  spfli_tab-carrid = persistent_object->get_carrid( ).  spfli_tab-connid = persistent_object->get_connid( ).  spfli_tab-airpfrom = persistent_object->get_airpfrom( ).  spfli_tab-airpto = persistent_object->get_airpto( ).  spfli_tab-arrtime = persistent_object->get_arrtime( ).  spfli_tab-cityfrom = persistent_object->get_cityfrom( ).  spfli_tab-cityto = persistent_object->get_cityto( ).  spfli_tab-countryfr = persistent_object->get_countryfr( ).  spfli_tab-countryto = persistent_object->get_countryto( ).  spfli_tab-deptime = persistent_object->get_deptime( ).  spfli_tab-distance = persistent_object->get_distance( ).  spfli_tab-distid = persistent_object->get_distid( ).  spfli_tab-fltime = persistent_object->get_fltime( ).  spfli_tab-fltype = persistent_object->get_fltype( ).  spfli_tab-period = persistent_object->get_period( ).

ENDMETHOD. 

Page 46: Charla Objetos Persistentes

METHOD leer_todo_spfli.

  DATA: l_agent TYPE REF TO zca_spfli_pers,        l_pers_obj TYPE REF TO zcl_spfli_pers,        l_objects TYPE osreftab.

  FIELD-SYMBOLS: <wa_object> LIKE LINE OF l_objects,                 <wa_spfli> LIKE LINE OF r_spfli.

  DATA: query_manager TYPE REF TO if_os_query_manager,        query TYPE REF TO if_os_query.

  TRY.    l_agent = zca_spfli_pers=>agent.    query_manager = cl_os_system=>get_query_manager( ).    query = query_manager->create_query( ).

    l_objects = l_agent->if_os_ca_persistency~get_persistent_by_query       ( i_query = query ).

    LOOP AT l_objects ASSIGNING <wa_object>.      l_pers_obj ?= <wa_object>.      APPEND INITIAL LINE TO r_spfli ASSIGNING <wa_spfli>.      <wa_spfli>-carrid = l_pers_obj->get_carrid( ).      <wa_spfli>-connid = l_pers_obj->get_connid( ).      CREATE OBJECT <wa_spfli>-spfli EXPORTING

                                         i_persistent_object = l_pers_obj.    ENDLOOP.  ENDTRY.

ENDMETHOD.

Page 47: Charla Objetos Persistentes

Regresamos a nuestro programa Z_SPFLI_PERSISTENTE para poder probar el método LEER_TODO_SPFLI.

Page 48: Charla Objetos Persistentes

DATA: t_spfli_tbl TYPE zcs_spfli_tbl,      ispfli TYPE STANDARD TABLE OF spfli.

FIELD-SYMBOLS: <wa_spfli_obj> LIKE LINE OF t_spfli_tbl,               <wa_spfli> LIKE LINE OF ispfli.

t_spfli_tbl = zcl_spfli_boc=>leer_todo_spfli( ).

LOOP AT t_spfli_tbl ASSIGNING <wa_spfli_obj>.  APPEND INITIAL LINE TO ispfli ASSIGNING <wa_spfli>.  MOVE-CORRESPONDING <wa_spfli_obj>-spfli->spfli_tab TO <wa_spfli>.ENDLOOP.

LOOP AT ispfli ASSIGNING <wa_spfli>.  WRITE:/ <wa_spfli>-carrid, <wa_spfli>-connid, 

             <wa_spfli>-countryfr.ENDLOOP.

Page 49: Charla Objetos Persistentes
Page 50: Charla Objetos Persistentes

Fin

Preguntas?

Comentarios?