Your SlideShare is downloading. ×
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Charla Objetos Persistentes
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Charla Objetos Persistentes

2,124

Published on

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

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,124
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
72
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Charla sobre Objetos Persistentes Alvaro Tejada Galindo Project Manager – SAP Mentor Biz Partner
  • 2. 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.
  • 3. 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.
  • 4.  
  • 5.  
  • 6.
    • 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
  • 7.
    • 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.
  • 8.
    • Esta clase es conocida como “Friend”.
  • 9.
    • Una vez que tenemos creado nuestro Objeto Persistente...deberíamos enlazarlo a alguna tabla, puesto que sino, no nos sirve de nada.
  • 10.  
  • 11.
    • Debemos hacer doble clic en cada campo y subirlos con el botón de flecha.
  • 12.  
  • 13.
    • 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.
  • 14.  
  • 15.
    • Ahora solo debemos generar la clase Actor, para poder manipular la tabla. (Se crean nuevos métodos).
  • 16.  
  • 17. 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.
  • 18.
    • Creamos una clase llamada ZCL_SPFLI_BOC.
  • 19.
    • Dentro de nuestra clase creamos 4 métodos públicos, llamados CREAR_SPFLI, MODIFICAR_SPFLI, LEER_SPFLI y BORRAR_SPFLI.
  • 20.
    • CREAR_SPFLI recibe solo un parámetro de tipo IMPORTING llamado I_SPFLI.
  • 21.
    • 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 .
  • 22.
    • MODIFICAR_SPFLI recibe 3 parámetros de tipo IMPORTING llamados I_CARRID, I_CONNID y I_SPFLI.
  • 23.
    • 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 .
  • 24.
    • LEER_SPFLI recibe 2 parámetros de tipo IMPORTING llamados I_CARRID, I_CONNID y un parámetro de tipo RETURNING llamado I_SPFLI.
  • 25.
    • 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 .
  • 26.
    • BORRAR_SPFLI recibe 2 parámetros de tipo IMPORTING llamados I_CARRID, I_CONNID.
  • 27.
    • 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 .
  • 28.
    • 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.
  • 29.
    • 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' .
  • 30.
    • 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 ).
  • 31.
    • Para probarlo, nos vamos a la tabla SPFLI y seleccionamos los registros con CARRID igual a “AA”.
  • 32.
    • Es importante que ejecutemos el código, comentando las partes que no vamos a utilizar. Recuerden que este es un programa de prueba.
  • 33.
    • Ejecutamos la creación del nuevo registro.
  • 34.
    • Ejecutamos la modificación del nuevo registro.
  • 35.
    • Ejecutamos la lectura del nuevo registro.
  • 36.
    • Ejecutamos la eliminación del nuevo registro.
  • 37.
    • 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.
  • 38.
    • Creamos una estructura llamada ZCS_SPFLI_OBJ.
  • 39.
    • Como se darán cuenta, estamos usando una clase como tipo de dato. Es por eso que marcamos el check de Rty.
  • 40.
    • Con la estructura que hemos creado, debemos crear ahora un Tipo de Tabla llamado ZCL_SPFLI_TBL.
  • 41.
    • 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.
  • 42.
    • Creamos un método CONSTRUCTOR, y otro método llamado MAPEAR_CAMPOS, además declaramos los atributos PERSISTENT_OBJECT y SPFLI_TAB.
  • 43.
    • El método CONTRUCTOR recibe solo un parámetro.
  • 44.
    • METHOD  constructor.   me->persistent_object = i_persistent_object.   me->mapear_campos( ). ENDMETHOD .
  • 45.
    • 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 .
  • 46.
    • 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 .
  • 47.
    • Regresamos a nuestro programa Z_SPFLI_PERSISTENTE para poder probar el método LEER_TODO_SPFLI.
  • 48.
    • 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 .
  • 49.  
  • 50. Fin
    • Preguntas?
    • Comentarios?

×