Problem
A SQL-Statement is needed (here Access / .eap) that gets all Coordinate-, Routing- and Position information of links in a diagram of the Sparx Systems Enterprise Architect.
Approach
Data Mining and the Usage of MDB Plus
Solution
The link routing is diagram dependent. In the following diagram the diagram „PLM Framework“ has been used. Further more the stereotype „BusinessProcess“ is requested (you have to replace these String according to your needs.
SELECT bp.[Object_ID] as [start_object_id], bp.[Name] as [start_object_name], tconn.[Connector_ID] as [conn_id], tconn.[Start_Edge] as [conn_start_edge], tconn.[End_Edge] as [conn_end_edge], tconn.[PtStartX] as [conn_pt_start_x], tconn.[PtStartY] as [conn_pt_start_y], tconn.[PtEndX] as [conn_pt_end_x], tconn.[PtEndY] as [conn_pt_end_y], tconn.[RouteStyle] as [conn_route_style], linkpath.[Path] as [conn_path], bpdest.[Object_ID] as [end_object_id], bpdest.[Name] as [end_object_name], bp.[Alias] as [start_key], bpdest.[Alias] as [end_key], startobjcoord.x as [start_obj_x], startobjcoord.y as [start_obj_y], endobjcoord.x as [end_obj_x], endobjcoord.y as [end_obj_y], linkpath.Geometry as [geometry] FROM ((((( SELECT Object_ID, [Alias], Name FROM t_object WHERE Stereotype='BusinessProcess' )bp INNER JOIN ( SELECT [Connector_ID],[Start_Object_ID], [End_Object_ID], [Start_Edge], [End_Edge], [PtStartX], [PtStartY], [PtEndX], [PtEndY], [RouteStyle] FROM [t_connector] )tconn ON tconn.[Start_Object_ID]=bp.[Object_ID]) INNER JOIN ( SELECT Object_ID, [Alias],Name FROM [t_object] )bpdest ON tconn.[End_Object_ID]=bpdest.Object_ID) INNER JOIN ( SELECT ConnectorID, Path, Geometry FROM t_diagramlinks WHERE DiagramID IN (SELECT Diagram_ID FROM t_diagram WHERE Name='PLM Framework') ) linkpath ON linkpath.[ConnectorID]=tconn.[Connector_ID]) INNER JOIN ( SELECT objstart.Object_ID, objstart.Alias, diaobj.RectLeft As x, diaobj.RectTop As y FROM (( [t_diagram] dia LEFT JOIN (Select Diagram_ID, Object_ID, RectLeft, RectTop from [t_diagramobjects]) diaobj ON dia.[Diagram_ID]=diaobj.[Diagram_ID]) LEFT JOIN [t_object] objstart ON objstart.[Object_ID]=diaobj.[Object_ID]) WHERE dia.Name='PLM Framework' AND objstart.stereotype='BusinessProcess' ) startobjcoord ON startobjcoord.[Object_ID]=bp.[Object_ID]) INNER JOIN ( SELECT objstart.Object_ID, objstart.Alias, diaobj.RectLeft As x, diaobj.RectTop As y FROM (( [t_diagram] dia LEFT JOIN (Select Diagram_ID, Object_ID, RectLeft, RectTop from [t_diagramobjects]) diaobj ON dia.[Diagram_ID]=diaobj.[Diagram_ID]) LEFT JOIN [t_object] objstart ON objstart.[Object_ID]=diaobj.[Object_ID]) WHERE dia.Name='PLM Framework' AND objstart.stereotype='BusinessProcess' ) endobjcoord ON endobjcoord.[Object_ID]=bpdest.[Object_ID]