/ Published in: Other
Expand |
Embed | Plain Text
REPORT zca_export . DATA export TYPE cacs_s_vers1. TYPES: BEGIN OF export, verion TYPE cacs_ctrtbu-version, busi_begin TYPE cacs_s_vers1-busi_begin, busi_end TYPE cacs_s_vers1-busi_end, tech_begin TYPE cacs_s_vers1-tech_begin, tech_end TYPE cacs_s_vers1-tech_end, END OF export. TYPES: lty_knoten LIKE hrp1001-objid. TYPES: BEGIN OF edge, von TYPE hrp1001-objid, nach TYPE hrp1001-sobid, relat TYPE t777e-relat, level TYPE i, begda TYPE hrp1001-begda, enda TYPE hrp1001-endda, END OF edge. TYPES: BEGIN OF knoten, id TYPE hrp1001-sobid, level TYPE i, ctrtbu_id TYPE cacs_ctrtbu-ctrtbu_id, orga_nr TYPE hrp1000-short, END OF knoten. DATA knoten_queue TYPE TABLE OF knoten. DATA edge_types TYPE TABLE OF t777e-relat. DATA kanten TYPE TABLE OF kante. * data knoten_queue TYPE lty_knoten_queue. DATA result_such_nachbarn TYPE TABLE OF edge. DATA all_edges TYPE TABLE OF edge. DATA current_node TYPE knoten. DATA current_neighbour_edge TYPE edge. DATA tmp TYPE edge. DATA tmp_knoten TYPE knoten. * Breitensuchen DATA: out_dat(128). DATA: ausgabesatz(1000) TYPE c. START-OF-SELECTION. *** Ausgabe CONCATENATE '/SAPFTP/' sy-sysid '/pdorgtest' INTO out_dat. OPEN DATASET out_dat FOR OUTPUT IN TEXT MODE ENCODING DEFAULT. current_node-id = '60045082'. current_node-id = '40000001'. current_node-level = 0. APPEND '002' TO edge_types. APPEND '003' TO edge_types. * Start Knoten einfügen APPEND current_node TO knoten_queue. * durch die queue loopen LOOP AT knoten_queue INTO current_node. * die nachbarn des aktuellen knotens suchen PERFORM such_nachbarn USING current_node edge_types. * für alle nachbarn LOOP AT result_such_nachbarn INTO current_neighbour_edge. * falls nachbar noch nicht in der queue und nicht zu weit entfernt READ TABLE knoten_queue WITH KEY id = current_neighbour_edge-nach INTO tmp-nach. IF ( ( current_neighbour_edge-level <= 2 ) AND sy-subrc <> 0 ). * Knoten sammeln tmp_knoten-id = current_neighbour_edge-nach. tmp_knoten-level = current_neighbour_edge-level. APPEND tmp_knoten TO knoten_queue. ENDIF. * Kanten sammeln APPEND current_neighbour_edge TO all_edges. ENDLOOP. ENDLOOP. CONCATENATE 'Digraph G{' '' into ausgabesatz. TRANSFER ausgabesatz to out_dat. PERFORM print_nodes. PERFORM print_edges. CONCATENATE '}' '' into ausgabesatz. TRANSFER ausgabesatz to out_dat. CLOSE DATASET out_dat. *&---------------------------------------------------------------------* *& Form such_nachbarn *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->START_NODE text * -->EDGE_TYPE text *----------------------------------------------------------------------* FORM such_nachbarn USING start_node TYPE knoten edge_type LIKE edge_types. CLEAR result_such_nachbarn. DATA current_edge TYPE edge. DATA neighbour_edges TYPE TABLE OF edge. DATA wa_edge LIKE t777e-relat. * todo schleife fü zeitpunkte * schleife für kanten typen LOOP AT edge_types INTO wa_edge. SELECT objid sobid relat FROM hrp1001 INTO (current_edge-von, current_edge-nach, current_edge-relat) WHERE objid = start_node-id AND begda <= sy-datum AND endda >= sy-datum AND relat = wa_edge. current_edge-level = start_node-level + 1. APPEND current_edge TO neighbour_edges. ENDSELECT. ENDLOOP. result_such_nachbarn = neighbour_edges. ENDFORM. "such_nachbarn *&---------------------------------------------------------------------* *& Form enrich_node *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->NODE text *----------------------------------------------------------------------* FORM enrich_node USING node TYPE knoten. SELECT SINGLE short INTO node-orga_nr FROM hrp1000 WHERE objid = node-id. ENDFORM. "enrich_node *&---------------------------------------------------------------------* *& Form print_edges *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM print_edges. DATA tmp_edge TYPE edge. LOOP AT all_edges INTO tmp_edge. CLEAR ausgabesatz. CONCATENATE tmp_edge-von space ' -> ' space tmp_edge-nach '[label="' tmp_edge-relat '"];' into ausgabesatz. TRANSFER ausgabesatz TO out_dat. ENDLOOP. ENDFORM. "print_edges *&---------------------------------------------------------------------* *& Form print_nodes *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM print_nodes. LOOP AT knoten_queue INTO tmp_knoten. PERFORM enrich_node USING tmp_knoten. CLEAR ausgabesatz. CONCATENATE tmp_knoten-id '[label="' tmp_knoten-orga_nr '"];' into ausgabesatz. TRANSFER ausgabesatz TO out_dat. ENDLOOP. ENDFORM. "print_nodes *FUNCTION suche_nachbarn(knoten) *select objid from hrp1001
You need to login to post a comment.
