
DATA ls_flight TYPE ty_s_flight.
DATA ls_carrier TYPE scarr.
DATA lv_carrid TYPE s_carr_id.
DATA lv_connid TYPE s_conn_id.
DATA lv_fldate TYPE s_date.
FIELD-SYMBOLS <ls_key> TYPE /iwbep/s_mgw_name_value_pair.
CASE iv_entity_name.
*-- get carrier entity
WHEN gc_carrier_entity.
*---- transfer key value
READ TABLE it_key_tab WITH KEY name = 'carrid'
ASSIGNING <ls_key>.
IF sy-subrc <> 0.
*------ raise business exception if key is not transferred
RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
EXPORTING
textid = /iwbep/cx_mgw_busi_exception=>business_error
message = 'Key field ''carrid'' missing'.
ENDIF.
lv_carrid = <ls_key>-value.
*---- read carrier by ID
SELECT SINGLE * FROM scarr INTO CORRESPONDING FIELDS OF ls_carrier
WHERE carrid = lv_carrid.
IF sy-subrc = 0.
copy_data_to_ref(
EXPORTING
is_data = ls_carrier
CHANGING
cr_data = er_entity
).
ENDIF.
*-- get flight entity and flight detail (complex type)
WHEN gc_flight_entity.
*---- transfer all key values based on entity type
LOOP AT it_key_tab ASSIGNING <ls_key>.
CASE <ls_key>-name.
WHEN 'carrid'.
lv_carrid = <ls_key>-value.
WHEN 'connid'.
lv_connid = <ls_key>-value.
WHEN 'fldate'.
lv_fldate = <ls_key>-value.
ENDCASE.
ENDLOOP.
*---- raise business exception if not all key fields are entered
IF lv_carrid IS INITIAL AND
lv_connid IS INITIAL AND
lv_fldate IS INITIAL.
RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
EXPORTING
textid = /iwbep/cx_mgw_busi_exception=>business_error
message = 'Key fields missing'.
ENDIF.
*---- read flight
SELECT SINGLE * FROM sflight INTO CORRESPONDING FIELDS OF ls_flight
WHERE carrid = lv_carrid
AND connid = lv_connid
AND fldate = lv_fldate.
IF sy-subrc = 0.
*------ read flight details (complex type)
SELECT SINGLE * FROM spfli INTO CORRESPONDING FIELDS OF ls_flight-flightdetails
WHERE carrid = ls_flight-carrid
AND connid = ls_flight-connid.
copy_data_to_ref(
EXPORTING
is_data = ls_flight
CHANGING
cr_data = er_entity
).
ENDIF.
ENDCASE.
DATA lt_flights TYPE ty_t_flights.
DATA lt_carriers TYPE STANDARD TABLE OF scarr.
DATA lv_carrid TYPE s_carr_id.
FIELD-SYMBOLS <ls_flight> TYPE ty_s_flight.
FIELD-SYMBOLS <ls_key> TYPE /iwbep/s_mgw_name_value_pair.
CASE iv_entity_name.
*-- Carrier Collection
WHEN gc_carrier_entity.
SELECT * FROM scarr INTO TABLE lt_carriers.
copy_data_to_ref(
EXPORTING
is_data = lt_carriers
CHANGING
cr_data = er_entityset
).
*-- Flight Collection
WHEN gc_flight_entity.
IF iv_source_name = gc_carrier_entity.
READ TABLE it_key_tab INDEX 1 ASSIGNING <ls_key>.
lv_carrid = <ls_key>-value.
*------ Get all flights of a specific carrier
SELECT * FROM sflight INTO TABLE lt_flights
WHERE carrid = lv_carrid.
ELSE.
*------ Get all flights for all carriers
SELECT * FROM sflight INTO TABLE lt_flights.
ENDIF.
*---- Determine the flight details (complex type)
LOOP AT lt_flights ASSIGNING <ls_flight>.
SELECT SINGLE * FROM spfli INTO CORRESPONDING FIELDS OF <ls_flight>-flightdetails
WHERE carrid = <ls_flight>-carrid
AND connid = <ls_flight>-connid.
ENDLOOP.
copy_data_to_ref(
EXPORTING
is_data = lt_flights
CHANGING
cr_data = er_entityset
).
ENDCASE.
DATA lt_flights TYPE ty_t_flights.
DATA lt_flight_schedules TYPE STANDARD TABLE OF spfli.
DATA ls_flight_schedule TYPE spfli.
DATA lv_from_date TYPE dats.
DATA lv_to_date TYPE dats.
DATA lv_city_from TYPE s_from_cit.
DATA lv_city_to TYPE s_to_city.
DATA lv_carrid TYPE s_carr_id.
DATA lv_connid TYPE s_conn_id.
DATA ls_parameter TYPE /iwbep/s_mgw_name_value_pair.
DATA lv_parameter_error TYPE abap_bool.
FIELD-SYMBOLS <ls_flight> TYPE ty_s_flight.
CASE iv_action_name.
*-- Function Import 'GetFlightDetails'
WHEN 'GetFlightDetails'.
*---- Get parameter to read from data base
READ TABLE it_parameter WITH KEY name = 'airlineid' INTO ls_parameter.
IF sy-subrc = 0.
lv_carrid = ls_parameter-value.
ELSE.
lv_parameter_error = abap_true.
ENDIF.
READ TABLE it_parameter WITH KEY name = 'connectionid' INTO ls_parameter.
IF sy-subrc = 0.
lv_connid = ls_parameter-value.
ELSE.
lv_parameter_error = abap_true.
ENDIF.
*---- If all parameters are transfered read from data base
IF lv_parameter_error = abap_false.
SELECT SINGLE * FROM spfli INTO ls_flight_schedule
WHERE carrid = lv_carrid
AND connid = lv_connid.
copy_data_to_ref(
EXPORTING
is_data = ls_flight_schedule
CHANGING
cr_data = er_data
).
ELSE.
RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
EXPORTING
textid = /iwbep/cx_mgw_busi_exception=>business_error
message = 'Parameter(s) not found'.
ENDIF.
*-- Function Import 'GetAvailableFlights'
WHEN 'GetAvailableFlights'.
*---- Get parameter to read from data base
READ TABLE it_parameter WITH KEY name = 'cityfrom' INTO ls_parameter.
IF sy-subrc = 0.
lv_city_from = ls_parameter-value.
ELSE.
lv_parameter_error = abap_true.
ENDIF.
READ TABLE it_parameter WITH KEY name = 'cityto' INTO ls_parameter.
IF sy-subrc = 0.
lv_city_to = ls_parameter-value.
ELSE.
lv_parameter_error = abap_true.
ENDIF.
READ TABLE it_parameter WITH KEY name = 'fromdate' INTO ls_parameter.
IF sy-subrc = 0.
lv_from_date = ls_parameter-value.
ELSE.
lv_parameter_error = abap_true.
ENDIF.
READ TABLE it_parameter WITH KEY name = 'todate' INTO ls_parameter.
IF sy-subrc = 0.
lv_to_date = ls_parameter-value.
ELSE.
lv_parameter_error = abap_true.
ENDIF.
*---- If all parameters are transfered read from data base
IF lv_parameter_error = abap_false.
SELECT * FROM spfli AS a JOIN sflight AS b
ON a~carrid = b~carrid AND
a~connid = b~connid
INTO CORRESPONDING FIELDS OF TABLE lt_flights
WHERE a~cityfrom = lv_city_from
AND a~cityto = lv_city_to
AND b~fldate BETWEEN lv_from_date AND lv_to_date.
*------ read details and add to flight details (complex type)
SELECT * FROM spfli INTO TABLE lt_flight_schedules
WHERE cityfrom = lv_city_from
AND cityto = lv_city_to.
LOOP AT lt_flights ASSIGNING <ls_flight>.
READ TABLE lt_flight_schedules INTO <_flight>-flightdetails
WITH KEY carrid = <ls_flight>-carrid
connid = <ls_flight>-connid.
ENDLOOP.
copy_data_to_ref(
EXPORTING
is_data = lt_flights
CHANGING
cr_data = er_data
).
ELSE.
RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
EXPORTING
textid = /iwbep/cx_mgw_busi_exception=>business_error
message = 'Parameter(s) not found'.
ENDIF.
ENDCASE.
$skip
The maximum number of items returned in the result set for each page.
$top
The number of rows to skip in the result set before beginning to return results.
$filter
$orderby
Specifies the sort order of the result set.
$select
Specifies the fields returned in the result set.
$skiptoken
An opaque value that must be passed back to the server in order to continue getting results for the query.
Use of the $skiptoken query parameter can be implemented, for example within /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_ENTITYSET. The example uses the $skiptoken to return ten carriers per round trip.
*---------------------------------------------------------------------
* skiptoken
*---------------------------------------------------------------------
DESCRIBE TABLE lt_carriers LINES lv_entity_count.
*---- check technical request context for skiptoken to get the current position
lv_skiptoken = io_tech_request_context->get_skiptoken( ).
IF lv_skiptoken IS NOT INITIAL.
lv_start_index = lv_skiptoken.
ELSE.
lv_start_index = 1.
ENDIF.
*---- number of entities to be displayed (10)
lv_end_index = lv_start_index + 10.
*---- set skiptoken for next round trip
IF lv_end_index <= lv_entity_count.
es_response_context-skiptoken = lv_end_index.
ENDIF.
CONDENSE es_response_context-skiptoken.
*---- remove at the end
IF lv_end_index <= lv_entity_count.
DELETE lt_carriers
FROM lv_end_index
TO lv_entity_count.
ENDIF.
*---- remove at the beginning
IF lv_start_index > 1.
lv_start_index_d = lv_start_index - 1.
DELETE lt_carriers
FROM 1
TO lv_start_index_d.
ENDIF.
$count
Returns the count of a collection of entities
$inlinecount
$inlinecount is only supported for flexible query services. It is not supported for fixed query services.
Example: Entity
MPC
lo_entity_type = model->create_entity_type(
iv_entity_type_name = 'Flight'
iv_def_entity_set = abap_false
).
lo_entity_type->set_name( 'FlightEntity' ).
Example: Entity
DPC
To handle the renaming on the DPC the following lines of code have to be entered at the beginning of method /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_ENTITY.
DATA: lv_entity_name TYPE /iwbep/mgw_tech_name.
lv_entity_name = io_tech_request_context->get_entity_type_name( ).
For further processing use LV_ENTITY_NAME instead of the importing parameter IV_ENTITY_NAME.
Example: Entity Set
MPC
lo_flight_entity_set = lo_flight_entity_type->create_entity_set( 'FlightCollection' ).
lo_flight_entity_set->/iwbep/if_mgw_odata_item~set_name( 'FlightHugoCollection' ).
Example: Entity Set
DPC
To handle the renaming on the DPC the following lines of code have to be entered at the beginning of method /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_ENTITYSET.
DATA: lv_entity_set_name TYPE /iwbep/mgw_tech_name.
lv_entity_set_name = io_tech_request_context->get_entity_type_name( ).
For further processing use LV_ENTITY_SET_NAME instead of the importing parameter IV_ENTITY_NAME.
Example: Property
MPC
The standard coding to create a property looks like this.
lo_property = lo_flight_object->create_property( 'CURRENCY' ).
Example: Property
MPC
With the request object functionality it could look like this.
lo_property = lo_flight_object->create_property(
iv_property_name = 'conn_identifier'
iv_abap_fieldname = 'CONNID'
).
or
lo_property = lo_flight_object->create_property( 'connid' ). " corresponding ABAP field name is 'CONNID'
or
lo_property = lo_flight_object->create_property( 'CONNID' ).
lo_property->set_name( 'conn_identifier' ).
The first example shows that the property name can be changed on create and does not have to be identically to the ABAP field name. The second example shows that the property name can be set on create. This means that it must be possible to determine the corresponding ABAP field name. In this case the ABAP field name is CONNID. The third example shows that the property name can be set separately after the create.