Qu es ODATA?
El protocolo Open Data (OData) le permite tener acceso a un origen de datos, como una
base de datos a travs de una direccin URL construida especialmente. Esto permite un
enfoque simplificado para conectarse y trabajar con orgenes de datos hospedados en una
organizacin.
OData es un protocolo que usa HTTP, Atom y Notacin de objetos de JavaScript (JSON)
que permiten a los desarrolladores escribir aplicaciones que se comunican con un nmero
creciente de orgenes de datos. Microsoft admite la creacin de este estndar como una
forma de habilitar el intercambio de datos entre las aplicaciones y los almacenes de datos
accesibles desde la web.
2. Ingresamos los datos necesarios para crear nuestro proyecto como objeto local y
aceptamos
3. Para hacer completo este ejemplo vamos a crear un Entity Type llamado Carrier que
tendr como referencia la tabla SCARR, con la finalidad de servir de estructura para
mostrar los registros de las Aerolneas.
Clic derecho en Data Model, y seleccionar Import>DDIC Structure
Ingresar el nombre del tipo de entidad y de la estructura del diccionario ABAP que
vamos a usar, para este caso es la tabla SCARR. Dejar marcado la opcin Create
Default Entity Set que luego lo usaremos y presionar el botn Next.
Tener en cuenta que se puede cambiar los nombres de cualquiera de las propiedades
Modificamos el nombre del Entity Set CarrierSet por Carriers, para luego acceder
desde el navegador y obtener los registros de las aerolneas.
Presionamos el botn Aceptar y lo guardamos como objeto local. Tener en cuenta que
necesitaremos el nombre del servicio ZSFLIGHT_PROYECTO_SRV para acceder desde la
web.
Buscamos nuestro servicio con valor System Alias = LOCAL porque el proyecto fue
grabado como objeto local y presionamos el botn Get Services.
Agregamos el siguiente cdigo para obtener los registros de las aerolneas de la tabla
SCARR
SELECT * from scarr into CORRESPONDING FIELDS OF TABLE ET_ENTITY
SET.
Cambiamos el enlace:
http://psaperp02.xternal.biz:8000/sap/opu/odata/sap/ZSFLIGHT_PROYECTO_SRV/?$f
ormat=xml
Por
http://psaperp02.xternal.biz:8000/sap/opu/odata/sap/ZSFLIGHT_PROYECTO_SRV/Car
riers para poder obtener los registros de la tabla SCARR, ya que al llamar a Carriers
har que ingres al mtodo CARRIERS_GET_ENTITYSET que hemos implementado.
Para poder tener una mejor vista de los registros vamos a utilizar la terminacin
?$format=json&sap-ds-debug=true en el enlace, de la siguiente manera:
http://psaperp02.xternal.biz:8000/sap/opu/odata/sap/ZSFLIGHT_PROYECTO_SRV/Car
riers?$format=json&sap-ds-debug=true
9. Ahora vamos a modifica el el GetEntity (Read) del Service Implentation Carriers para
obtener un solo registro en base a la llave Carrid
Nos dirigimos al GetEntity (Read) de Carriers. Ahora hacemos clic derecho en
GetEntity (Read) de Carriers y no dirigimos a Go to ABAP Workbench
Cambiamos el enlace:
http://psaperp02.xternal.biz:8000/sap/opu/odata/sap/ZSFLIGHT_PROYECTO_SRV/?$f
ormat=xml
Por
http://psaperp02.xternal.biz:8000/sap/opu/odata/sap/ZSFLIGHT_PROYECTO_SRV/Car
riers(AA)?$format=json&sap-ds-debug=true para poder obtener el registro de la
tabla SCARR que tenga el cdigo Carrid = AA, ya que al llamar a Carriers(AA) har
que ingres al mtodo CARRIERS_GET_ENTITY que hemos implementado y no al
mtodo CARRIERS_GET_ENTITYSET.
Ingresar el nombre del tipo de entidad y de la estructura del diccionario ABAP que
vamos a usar, para este caso es la tabla SFLIGHT. Dejar marcado la opcin Create
Default Entity Set que luego lo usaremos y presionar el botn Next.
Tener en cuenta que se puede cambiar los nombres de cualquiera de las propiedades
2. Modificar nombre de Entity Sets FlightSet ,creado por defecto, a Flights
Nos vamos a Entity Sets y hacemos doble click en FlightSet
Modificamos el nombre del Entity Set FlightSet por Flights, para luego acceder
desde el navegador.
Luego relacionamos los campos claves de ambas entidades, para este caso es el
campo Carrid. Clic en Next
Por ltimo clic en Finalizar para terminar con el paso de crear la asociacin de las
entidades.
Luego relacionamos los campos claves de ambas entidades, para este caso es el
campo Carrid. Clic en Next
Por ltimo clic en Finalizar para terminar con el paso de crear la asociacin de las
entidades.
Agregamos el siguiente cdigo para obtener los vuelos de una determinada aerolnea.
TYPES: ty_flight TYPE STANDARD TABLE OF ZCL_ZSFLIGHT_PROYECTO
_MPC=>TS_FLIGHT WITH DEFAULT KEY.
TYPES: BEGIN OF ty_carrier.
INCLUDE
TYPE ZCL_ZSFLIGHT_PROYECTO_MPC=>TS_C
ARRIER.
types: vuelosdeaerolinea type ty_flight,
END OF ty_carrier.
DATA:
ls_key_tab
lv_carrid
TYPE /iwbep/s_mgw_name_value_pair,
TYPE scarr-carrid.
CONSTANTS: lc_expand_tech_clause
EROLINEA'.
*Get the key property values and Read Sales Order and Item data
READ TABLE it_key_tab WITH KEY name = 'Carrid' INTO ls_key_tab
.
IF sy-subrc = 0.
lv_carrid = ls_key_tab-value.
SELECT SINGLE * from scarr
into lwa_carrier2
WHERE carrid EQ lv_carrid.
IF lwa_carrier2 is NOT INITIAL.
SELECT * from sflight
into CORRESPONDING FIELDS OF TABLE ltd_flight
WHERE carrid EQ lv_carrid.
IF ltd_flight[] is not INITIAL.
MOVE-CORRESPONDING lwa_carrier2 to lwa_carrier.
lwa_carrier-VUELOSDEAEROLINEA = ltd_flight[].
ENDIF.
ENDIF.
ENDIF.
* Fill ER_ENTITY
copy_data_to_ref(
EXPORTING
is_data = lwa_carrier
CHANGING
cr_data = er_entity ).
* Insert Navigation property into ET_EXPANDED_TECH_CLAUSES
INSERT lc_expand_tech_clause INTO TABLE et_expanded_tech_claus
es.
Agregamos el siguiente cdigo para obtener las aerolneas con sus respectivos vuelos
TYPES: ty_flight TYPE STANDARD TABLE OF ZCL_ZSFLIGHT_PROYECT
O_MPC=>TS_FLIGHT WITH DEFAULT KEY.
TYPES: BEGIN OF ty_carrier.
INCLUDE
TYPE ZCL_ZSFLIGHT_PROYECTO_MPC=>TS_C
ARRIER.
types: vuelosdeaerolinea type ty_flight,
END OF ty_carrier.
DATA:
ls_key_tab
lv_carrid
DATA: ltd_flight
lwa_flight
ltd_carrier
lwa_carrier
DATA: ltd_carrier2
lwa_carrier2
ltd_flight2
lwa_flight2
TYPE /iwbep/s_mgw_name_value_pair,
TYPE scarr-carrid.
TYPE
like
TYPE
TYPE
TYPE
TYPE
TYPE
like
ZCL_ZSFLIGHT_PROYECTO_MPC=>TT_FLIGHT,
LINE OF ltd_flight,
STANDARD TABLE OF ty_carrier,
ty_carrier.
STANDARD TABLE OF scarr,
scarr,
STANDARD TABLE OF sflight,
LINE OF ltd_flight2.
CONSTANTS: lc_expand_tech_clause
EROLINEA'.
lwa_carrier-VUELOSDEAEROLINEA[] = LTD_FLIGHT.
ENDLOOP.
MOVE-CORRESPONDING lwa_carrier2 to lwa_carrier.
lwa_carrier-VUELOSDEAEROLINEA = ltd_flight[].
append lwa_carrier to LTD_CARRIER.
ENDIF.
ENDIF.
* Fill ER_ENTITY
copy_data_to_ref(
EXPORTING
is_data = ltd_carrier
CHANGING
cr_data = ER_ENTITYSET ).
* Insert Navigation property into ET_EXPANDED_TECH_CLAUSES
INSERT lc_expand_tech_clause INTO TABLE et_expanded_tech_claus
es.