cl_gui_alv_tree - Nach dem expandieren doppelte Knoten

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).

cl_gui_alv_tree - Nach dem expandieren doppelte Knoten

Postby Giuliano508 » Thu Sep 06, 2012 10:58 am

Hallo,
ich habe hier ein kleines Problem mit meinem Tree, welches sich aber irgendwie nicht reproduzieren lässt. Manchmal passiert es, dass nach dem expandieren plötzlich alle Hauptknoten des Baumes doppelt und dreifach vorhanden sind. Wenn ich das Programm neu starte passiert das komischerweise (meistens) nicht mehr.

Ich hab mir hier schon die FInger wund gesucht, kann das Probelm aber nicht finden, vielleicht hat ja einer von euch noch eine Idee wo das Problem liegen könnte.

Hier der Code zum Aufbau des Tree:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. METHOD init_tree.
  2. *** Initialisieren des Trees und binden an den entsprechenden Container.
  3.   DATA: lt_events           TYPE cntl_simple_events,
  4.         ls_event            TYPE cntl_simple_event,
  5.         ls_folder           TYPE zcs_nodes,
  6.         ls_hierarchy_header TYPE treev_hhdr.
  7.  
  8.   FIELD-SYMBOLS: <fs_node> TYPE zcs_nodes.
  9.  
  10.   SORT me->gt_nodes BY is_folder DESCENDING node_key.
  11.  
  12.   CHECK gr_tree IS NOT BOUND.
  13. *** Instanz erzeugen
  14.   CREATE OBJECT gr_tree
  15.     EXPORTING
  16.       parent              = me->gr_cont_tree
  17.       node_selection_mode = cl_gui_column_tree=>node_sel_mode_single
  18.       no_toolbar          = abap_true
  19.       no_html_header      = abap_true.
  20.  
  21.   ls_hierarchy_header-heading   = 'Baugruppen/Arbeitsplätze/Befundarten'(t99).
  22.   ls_hierarchy_header-tooltip   = 'Filterkriterien'(t98).
  23.   ls_hierarchy_header-width     = 40.
  24.   ls_hierarchy_header-width_pix = space.
  25.  
  26.   CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
  27.     EXPORTING
  28.       i_structure_name       = me->co_node_struct
  29.     CHANGING
  30.       ct_fieldcat            = me->gt_node_fcat
  31.     EXCEPTIONS
  32.       inconsistent_interface = 1
  33.       program_error          = 2
  34.       OTHERS                 = 3.
  35.  
  36.   gr_tree->set_table_for_first_display(
  37.     EXPORTING
  38.       i_structure_name     = me->co_node_struct
  39.       is_hierarchy_header  = ls_hierarchy_header
  40.     CHANGING
  41.       it_outtab            = me->gt_node_lines
  42.       it_fieldcatalog      = me->gt_node_fcat ).
  43.  
  44. *** Zuerst die Verzeichnisse an den Tree hängen.
  45.   LOOP AT me->gt_nodes ASSIGNING <fs_node>
  46.       WHERE is_folder = abap_true.
  47.  
  48.     gr_tree->add_node(
  49.       EXPORTING
  50.         i_relat_node_key = ls_folder-node_key
  51.         i_relationship   = <fs_node>-relatship
  52.         i_node_text      = <fs_node>-node_text
  53.       IMPORTING
  54.         e_new_node_key   = <fs_node>-node_key ).
  55.  
  56.  
  57. *** Dann die Blätter des Baumes :-)
  58.   LOOP AT me->gt_nodes ASSIGNING <fs_node>
  59.       WHERE is_folder = abap_false.
  60.  
  61.     IF <fs_node>-relat_key IS INITIAL.
  62.       READ TABLE me->gt_nodes INTO ls_folder
  63.           WITH KEY intern_key = <fs_node>-intern_relat.
  64.       <fs_node>-relat_key = ls_folder-node_key.
  65.     ENDIF.
  66.  
  67.     gr_tree->add_node(
  68.       EXPORTING
  69.         i_relat_node_key = <fs_node>-relat_key
  70.         i_relationship   = <fs_node>-relatship
  71.         i_node_text      = <fs_node>-node_text
  72.       IMPORTING
  73.         e_new_node_key   = <fs_node>-node_key ).
  74.  
  75.  
  76. ** Ereignis registrieren
  77.   CALL METHOD gr_tree->get_registered_events
  78.     IMPORTING
  79.       events = lt_events.
  80.  
  81.   CLEAR ls_event.
  82.   ls_event-eventid    = cl_item_tree_control=>eventid_item_double_click.
  83.   ls_event-appl_event = 'X'.  "PAI nach event durchlaufen
  84.   APPEND ls_event TO lt_events.
  85.  
  86.   CALL METHOD gr_tree->set_registered_events
  87.     EXPORTING
  88.       events = lt_events.
  89.  
  90. *** Ereignisbehandler zuordnen
  91.   SET HANDLER me->handle_double_click_node FOR gr_tree.
  92.  
  93.   gr_tree->frontend_update( ).
  94.  
GeSHi ©


Und hier noch ein Screenshot:
Image

Uploaded with ImageShack.us

Danke schonmal.
Viele Grüße
Sascha
Giuliano508
..
..
 
Posts: 10
Joined: Thu Feb 25, 2010 5:31 pm

Re: cl_gui_alv_tree - Nach dem expandieren doppelte Knoten

Postby Giuliano508 » Thu Sep 20, 2012 1:35 pm

Hallo,
nur noch kurz zur Info, das Probelm ist gelöst, ich hatte da noch einen Fehler bei der Zuordnung meines internen Schlüssels zum NODE_KEY, damit konnte es passieren, dass er Einträge erneut angelegt, obwohl er die schon hatte....

Naja, wie war das noch mit dem Wald und den Bäumen? :?
Giuliano508
..
..
 
Posts: 10
Joined: Thu Feb 25, 2010 5:31 pm


Return to ABAP Objects®

Who is online

Users browsing this forum: No registered users and 5 guests