define view zabap_graph_airport_vertex
as select from sairport
{
key id as AirportId,
name as Name
}
define view zabap_graph_spfli_edge
as select from spfli
{
key concat(carrid, connid) as ConnectionKey,
carrid as Carrid,
connid as Connid,
countryfr as Countryfr,
cityfrom as Cityfrom,
airpfrom as AirportFrom,
countryto as Countryto,
cityto as Cityto,
airpto as AirportTo,
fltime as Fltime,
deptime as Deptime,
arrtime as Arrtime,
distance as Distance,
distid as Distid,
fltype as Fltype,
period as Period
}
where
mandt = $session.client
CLASS-METHODS connection_graph
FOR DDL OBJECT
OPTIONS CDS SESSION CLIENT REQUIRED.
METHOD connection_graph
BY DATABASE GRAPH WORKSPACE FOR HDB LANGUAGE SQL
USING zabap_graph_spfli_edge zabap_graph_airport_vertex.
edge table zabap_graph_spfli_edge
source column AirportFrom
target column AirportTo
key column ConnectionKey
vertex table zabap_graph_airport_vertex
key column AirportId;
endmethod.
TYPES: BEGIN OF ty_route,
ConnectionKey TYPE zabap_graph_spfli_edge-ConnectionKey,
AirportFrom TYPE zabap_graph_spfli_edge-AirportFrom,
Airportto TYPE zabap_graph_spfli_edge-Airportto,
END OF ty_route.
TYPES: tt_routes TYPE STANDARD TABLE OF ty_route WITH EMPTY KEY.
CLASS-METHODS get_shortest_path
AMDP OPTIONS CDS SESSION CLIENT current
IMPORTING VALUE(i_airport_from) TYPE zabap_graph_spfli_edge-AirportFrom
VALUE(i_airport_to) TYPE zabap_graph_spfli_edge-AirportTo
EXPORTING VALUE(e_routes) TYPE tt_routes
RAISING cx_amdp_execution_error.
METHOD get_shortest_path
BY DATABASE PROCEDURE FOR HDB LANGUAGE GRAPH
OPTIONS READ-ONLY
USING zcl_abap_graph=>connection_graph.
Graph g = Graph ( "ZCL_ABAP_GRAPH=>CONNECTION_GRAPH" );
Vertex v_from = Vertex (:g, :i_airport_from);
Vertex v_to = Vertex (:g, :i_airport_to);
WeightedPath<BigInt> p_path = Shortest_Path ( :g, :v_from, :v_to );
e_routes = select :part.ConnectionKey, :part.AirportFrom, :part.AirportTo
foreach part in edges( :p_path );
ENDMETHOD.
TRY.
zcl_abap_graph=>get_shortest_path(
EXPORTING
i_airport_from = 'FRA'
i_airport_to = 'SIN'
IMPORTING
e_routes = DATA(routes)
).
cl_demo_output=>display( routes ).
CATCH cx_amdp_execution_error INTO DATA(lcx).
cl_demo_output=>display( lcx->get_text( ) ).
ENDTRY.
CONNECTIONKEY AIRPORTFROM AIRPORTTO
UA0941 FRA SFO
SQ0015 SFO SIN
METHOD call_cypher
BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT
OPTIONS READ-ONLY.
e_routes = select * from opencypher_table( GRAPH WORKSPACE "ZCL_ABAP_GRAPH=>CONNECTION_GRAPH"
QUERY 'match (from)-[e]->(to) return e.CONNECTIONKEY as ConnectionKey, from.AIRPORTID as AitportFrom, to.AIRPORTID as AirportTo' );
ENDMETHOD.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
37 | |
10 | |
5 | |
4 | |
3 | |
3 | |
3 | |
3 | |
2 | |
2 |