Charla sobre Objetos Persistentes Alvaro Tejada Galindo Project Manager – SAP Mentor Biz Partner
Que son los Objetos Persistentes? <ul><li>Son objetos que continúan existiendo y manteniendo su data más allá de la duraci...
Como crear un Objeto Persistente? <ul><li>Simplemente, debemos ir a la transacción SE24 y crear una clase de tipo persiste...
 
 
<ul><li>El sistema nos define la clase como Protected a pesar de que nosotros queríamos Public. Esto es porque se crean do...
<ul><li>En la orientación a objetos, nuestra clase ZCL_SPFLI_PERS es un objeto “Manejado”, por lo tanto su tiempo de vida ...
<ul><li>Esta clase es conocida como “Friend”. </li></ul>
<ul><li>Una vez que tenemos creado nuestro Objeto Persistente...deberíamos enlazarlo a alguna tabla, puesto que sino, no n...
 
<ul><li>Debemos hacer doble clic en cada campo y subirlos con el botón de flecha. </li></ul>
 
<ul><li>Cuando grabamos y salimos, notaremos que todos los SETs y los GETs han sido creado para cada uno de los campos que...
 
<ul><li>Ahora solo debemos generar la clase Actor, para poder manipular la tabla. (Se crean nuevos métodos). </li></ul>
 
Business Object Class <ul><li>Si bien tenemos lista nuestra clase persistente, y podemos utilizarla en cualquier programa,...
<ul><li>Creamos una clase llamada ZCL_SPFLI_BOC. </li></ul>
<ul><li>Dentro de nuestra clase creamos 4 métodos públicos, llamados CREAR_SPFLI, MODIFICAR_SPFLI, LEER_SPFLI y BORRAR_SPF...
<ul><li>CREAR_SPFLI recibe solo un parámetro de tipo IMPORTING llamado I_SPFLI. </li></ul>
<ul><li>METHOD  crear_spfli.    DATA : l_agent  TYPE   REF   TO  zca_spfli_pers,         l_pers_obj  TYPE   REF   TO  zcl_...
<ul><li>MODIFICAR_SPFLI recibe 3 parámetros de tipo IMPORTING llamados I_CARRID, I_CONNID y I_SPFLI. </li></ul>
<ul><li>METHOD  modificar_spfli.    DATA : l_agent  TYPE   REF   TO  zca_spfli_pers,         l_pers_obj  TYPE   REF   TO  ...
<ul><li>LEER_SPFLI recibe 2 parámetros de tipo IMPORTING llamados I_CARRID, I_CONNID y un parámetro de tipo RETURNING llam...
<ul><li>method  LEER_SPFLI.    DATA : l_agent  TYPE   REF   TO  zca_spfli_pers,         l_pers_obj  TYPE   REF   TO  zcl_s...
<ul><li>BORRAR_SPFLI recibe 2 parámetros de tipo IMPORTING llamados I_CARRID, I_CONNID. </li></ul>
<ul><li>METHOD  borrar_spfli.    DATA : l_agent  TYPE   REF   TO  zca_spfli_pers .    TRY .       l_agent = zca_spfli_pers...
<ul><li>Una vez que tenemos listos nuestros métodos, podemos crear un pequeño programa para probar como funciona nuestra c...
<ul><li>REPORT   z_spfli_persistente. DATA : spfli_boc  TYPE   REF   TO  zcl_spfli_boc,       t_spfli  TYPE   STANDARD   T...
<ul><li>spfli_boc->modificar_spfli(   i_carrid = <fs_spfli>-carrid   i_connid = <fs_spfli>-connid   i_spfli = <fs_spfli> )...
<ul><li>Para probarlo, nos vamos a la tabla SPFLI y seleccionamos los registros con CARRID igual a “AA”. </li></ul>
<ul><li>Es importante que ejecutemos el código, comentando las partes que no vamos a utilizar. Recuerden que este es un pr...
<ul><li>Ejecutamos la creación del nuevo registro. </li></ul>
<ul><li>Ejecutamos la modificación del nuevo registro. </li></ul>
<ul><li>Ejecutamos la lectura del nuevo registro. </li></ul>
<ul><li>Ejecutamos la eliminación del nuevo registro. </li></ul>
<ul><li>Ya vimos como podemos manejar las cosas para un simple registro, siempre utilizando las llaves. Veamos como debemo...
<ul><li>Creamos una estructura llamada ZCS_SPFLI_OBJ. </li></ul>
<ul><li>Como se darán cuenta, estamos usando una clase como tipo de dato. Es por eso que marcamos el check de Rty. </li></ul>
<ul><li>Con la estructura que hemos creado, debemos crear ahora un Tipo de Tabla llamado ZCL_SPFLI_TBL. </li></ul>
<ul><li>En nuestra clase ZCL_SPFLI_BOC creamos un nuevo método llamado LEER_TODO_SPFLI. </li></ul><ul><li>Utilizamos un pa...
<ul><li>Creamos un método CONSTRUCTOR, y otro método llamado MAPEAR_CAMPOS, además declaramos los atributos PERSISTENT_OBJ...
<ul><li>El método CONTRUCTOR recibe solo un parámetro. </li></ul>
<ul><li>METHOD  constructor.   me->persistent_object = i_persistent_object.   me->mapear_campos( ). ENDMETHOD .   </li></ul>
<ul><li>El método MAPEAR_CAMPOS no recibe parámetros. </li></ul><ul><li>METHOD  mapear_campos.   spfli_tab-carrid = persis...
<ul><li>METHOD  leer_todo_spfli.    DATA : l_agent  TYPE   REF   TO  zca_spfli_pers,         l_pers_obj  TYPE   REF   TO  ...
<ul><li>Regresamos a nuestro programa Z_SPFLI_PERSISTENTE para poder probar el método LEER_TODO_SPFLI. </li></ul>
<ul><li>DATA : t_spfli_tbl  TYPE  zcs_spfli_tbl,       ispfli  TYPE   STANDARD   TABLE   OF  spfli. FIELD-SYMBOLS:  <wa_sp...
 
Fin <ul><li>Preguntas? </li></ul><ul><li>Comentarios? </li></ul>
Upcoming SlideShare
Loading in...5
×

Charla Objetos Persistentes

2,167

Published on

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,167
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
74
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Charla Objetos Persistentes

  1. 1. Charla sobre Objetos Persistentes Alvaro Tejada Galindo Project Manager – SAP Mentor Biz Partner
  2. 2. Que son los Objetos Persistentes? <ul><li>Son objetos que continúan existiendo y manteniendo su data más allá de la duración del proceso que los creo. </li></ul><ul><li>Es decir, podemos encapsular su funcionalidad y utilizarlos cuando queramos y donde queramos. </li></ul><ul><li>Es un concepto avanzado de la programación orientada a objetos. </li></ul>
  3. 3. Como crear un Objeto Persistente? <ul><li>Simplemente, debemos ir a la transacción SE24 y crear una clase de tipo persistente o Persistent Class. </li></ul><ul><li>Llamamos a nuestra clase ZCL_SPFLI_PERS. </li></ul>
  4. 6. <ul><li>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: </li></ul><ul><ul><li>ZCB_SPFLI_PERS </li></ul></ul><ul><ul><li>ZCA_SPFLI_PERS </li></ul></ul>
  5. 7. <ul><li>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. </li></ul><ul><li>Para eso se utiliza la clase ZCA_SPFLI_PERS. </li></ul><ul><li>Pero como hay una relación directa, se utiliza una tercera clase como nexo. </li></ul>
  6. 8. <ul><li>Esta clase es conocida como “Friend”. </li></ul>
  7. 9. <ul><li>Una vez que tenemos creado nuestro Objeto Persistente...deberíamos enlazarlo a alguna tabla, puesto que sino, no nos sirve de nada. </li></ul>
  8. 11. <ul><li>Debemos hacer doble clic en cada campo y subirlos con el botón de flecha. </li></ul>
  9. 13. <ul><li>Cuando grabamos y salimos, notaremos que todos los SETs y los GETs han sido creado para cada uno de los campos que seleccionamos. </li></ul><ul><li>Esto nos permite encapsular las acciones realizadas a la tabla. </li></ul>
  10. 15. <ul><li>Ahora solo debemos generar la clase Actor, para poder manipular la tabla. (Se crean nuevos métodos). </li></ul>
  11. 17. Business Object Class <ul><li>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. </li></ul>
  12. 18. <ul><li>Creamos una clase llamada ZCL_SPFLI_BOC. </li></ul>
  13. 19. <ul><li>Dentro de nuestra clase creamos 4 métodos públicos, llamados CREAR_SPFLI, MODIFICAR_SPFLI, LEER_SPFLI y BORRAR_SPFLI. </li></ul>
  14. 20. <ul><li>CREAR_SPFLI recibe solo un parámetro de tipo IMPORTING llamado I_SPFLI. </li></ul>
  15. 21. <ul><li>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 . </li></ul>
  16. 22. <ul><li>MODIFICAR_SPFLI recibe 3 parámetros de tipo IMPORTING llamados I_CARRID, I_CONNID y I_SPFLI. </li></ul>
  17. 23. <ul><li>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 . </li></ul>
  18. 24. <ul><li>LEER_SPFLI recibe 2 parámetros de tipo IMPORTING llamados I_CARRID, I_CONNID y un parámetro de tipo RETURNING llamado I_SPFLI. </li></ul>
  19. 25. <ul><li>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 . </li></ul>
  20. 26. <ul><li>BORRAR_SPFLI recibe 2 parámetros de tipo IMPORTING llamados I_CARRID, I_CONNID. </li></ul>
  21. 27. <ul><li>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 . </li></ul>
  22. 28. <ul><li>Una vez que tenemos listos nuestros métodos, podemos crear un pequeño programa para probar como funciona nuestra clase. </li></ul><ul><li>El programa lo llamaremos Z_SPFLI_PERSISTENTE. </li></ul>
  23. 29. <ul><li>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_spfli ASSIGNING  <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' . </li></ul>
  24. 30. <ul><li>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. </li></ul><ul><li>*Eliminar registro <fs_spfli>-carrid =  'AA' . <fs_spfli>-connid =  '0065' . spfli_boc->borrar_spfli(   i_carrid = <fs_spfli>-carrid   i_connid = <fs_spfli>-connid ). </li></ul>
  25. 31. <ul><li>Para probarlo, nos vamos a la tabla SPFLI y seleccionamos los registros con CARRID igual a “AA”. </li></ul>
  26. 32. <ul><li>Es importante que ejecutemos el código, comentando las partes que no vamos a utilizar. Recuerden que este es un programa de prueba. </li></ul>
  27. 33. <ul><li>Ejecutamos la creación del nuevo registro. </li></ul>
  28. 34. <ul><li>Ejecutamos la modificación del nuevo registro. </li></ul>
  29. 35. <ul><li>Ejecutamos la lectura del nuevo registro. </li></ul>
  30. 36. <ul><li>Ejecutamos la eliminación del nuevo registro. </li></ul>
  31. 37. <ul><li>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. </li></ul>
  32. 38. <ul><li>Creamos una estructura llamada ZCS_SPFLI_OBJ. </li></ul>
  33. 39. <ul><li>Como se darán cuenta, estamos usando una clase como tipo de dato. Es por eso que marcamos el check de Rty. </li></ul>
  34. 40. <ul><li>Con la estructura que hemos creado, debemos crear ahora un Tipo de Tabla llamado ZCL_SPFLI_TBL. </li></ul>
  35. 41. <ul><li>En nuestra clase ZCL_SPFLI_BOC creamos un nuevo método llamado LEER_TODO_SPFLI. </li></ul><ul><li>Utilizamos un parámetro llamado R_SPFLI de tipo RETURNING haciendo referencia al Tipo de Tabla ZCL_SPFLI_TBL. </li></ul>
  36. 42. <ul><li>Creamos un método CONSTRUCTOR, y otro método llamado MAPEAR_CAMPOS, además declaramos los atributos PERSISTENT_OBJECT y SPFLI_TAB. </li></ul>
  37. 43. <ul><li>El método CONTRUCTOR recibe solo un parámetro. </li></ul>
  38. 44. <ul><li>METHOD  constructor.   me->persistent_object = i_persistent_object.   me->mapear_campos( ). ENDMETHOD . </li></ul>
  39. 45. <ul><li>El método MAPEAR_CAMPOS no recibe parámetros. </li></ul><ul><li>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 . </li></ul>
  40. 46. <ul><li>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 </li></ul><ul><li>( 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 </li></ul><ul><li>i_persistent_object = l_pers_obj.      ENDLOOP .    ENDTRY . ENDMETHOD . </li></ul>
  41. 47. <ul><li>Regresamos a nuestro programa Z_SPFLI_PERSISTENTE para poder probar el método LEER_TODO_SPFLI. </li></ul>
  42. 48. <ul><li>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,  </li></ul><ul><li><wa_spfli>-countryfr. ENDLOOP . </li></ul>
  43. 50. Fin <ul><li>Preguntas? </li></ul><ul><li>Comentarios? </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×