Tree Control - Eventhandling

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

Tree Control - Eventhandling

Beitrag von ralf.wenzel (Top Expert / 3772 / 176 / 262 ) »
Moin moin,

ich werde gerade betriebsblind. Kann mir wer sagen, wo in folgendem Coding der Fehler liegt? Eigentlich sollte bei Klick auf eine der Tree-Nodes rechts der Inhalt angezeigt werden. Das geht bei mir genau einmal....

Code: Alles auswählen.

class lcl_tree_events definition deferred.

data:
  flights      type standard table of sflight,
  carriers     type standard table of scarr,
  tree_control type ref to cl_gui_custom_container,
  tree         type ref to cl_simple_tree_model,
  tree_events  type ref to lcl_tree_events,
  events       type cntl_simple_events.

field-symbols:
  <flight>  type sflight,
  <carrier> type scarr.


class lcl_tree_events definition.
  public section.

    methods:
      on_double_click
      for event node_double_click
                    of cl_simple_tree_model   ##NEEDED
        importing sender node_key.

endclass.


select * from sflight into table flights.
select * from scarr into table carriers.

create object tree_control
  exporting
    container_name = 'TREE_CONTAINER'.

create object tree
  exporting
    node_selection_mode = cl_list_tree_model=>node_sel_mode_single
    hide_selection      = abap_false.

tree->create_tree_control(
  exporting
    parent                       = tree_control
).

append initial line to events assigning field-symbol(<event>).
<event>-eventid = tree->eventid_node_double_click.
<event>-appl_event = abap_true.
tree->set_registered_events( events ).

create object tree_events.
set handler tree_events->on_double_click for tree.

loop at carriers assigning <carrier>.

  tree->add_node(
  exporting
    node_key = 'SCARR' && <carrier>-carrid
    isfolder = abap_true
    image    = '@3P@'
    text     = 'Carrier'
  exceptions
    others   = 1
  ).

  loop at flights assigning <flight>
  where carrid = <carrier>-carrid.

    tree->add_node(
    exporting
      node_key = 'SFLIGHT' && <flight>-carrid && <flight>-connid && <flight>-fldate
      isfolder = abap_true
          relative_node_key = 'SCARR' && <carrier>-carrid
          relationship      = cl_simple_tree_model=>relat_last_child
      image    = '@3P@'
      text     = 'Fluege'
    exceptions
      others   = 1
    ).

  endloop.
endloop.

call screen 0200.

class lcl_tree_events implementation.

  method on_double_click.

    types:
      begin of fieldline,
        fieldname type fieldname,
        value     type string,
      end of fieldline.

    data:
      fieldname      type abap_abstypename,
      struct         type ref to cl_abap_structdescr,
      components     type abap_compdescr_tab,
      fieldtab       type standard table of fieldline,
      rec_list       type ref to cl_salv_table,
      rec_container  type ref to cl_gui_custom_container,
      tree_container type ref to cl_gui_custom_container,
      container_name type c length 50.


    field-symbols:
      <record>    type any,
      <feld>      type any,
      <component> like line of components,
      <fieldline> type fieldline.

    case node_key(4).
      when 'SFLI'.
        read table flights assigning <record>
        with key carrid = node_key+7(2)
                 connid = node_key+9(4)
                 fldate = node_key+13(8).
      when 'SCAR'.
        read table carriers assigning <record>
        with key carrid = node_key+5(2).
      when others.
    endcase.

    do.
      assign component sy-index of structure <record> to <feld>.

      if sy-subrc ne 0.
        exit.
      endif.

      if <feld> is initial.
        continue.
      endif.

      fieldname = cl_abap_datadescr=>describe_by_data( p_data = <feld> )->absolute_name.
      shift fieldname:
        up to '=',
        by 1 places.

      struct ?= cl_abap_structdescr=>describe_by_data( p_data = <record> ).
      components = struct->components.

      read table components
      assigning <component>
      index sy-index.

      " write fieldname and fieldvalue to SALV table
      append initial line to fieldtab assigning <fieldline>.
      <fieldline>-fieldname = <component>-name.
      <fieldline>-value = <feld>.

    enddo.

    if rec_container is not bound.
      if cl_salv_table=>is_offline( ) eq if_salv_c_bool_sap=>false.
        create object rec_container
          exporting
            container_name = 'RECORD_CONTAINER'
            repid          = sy-repid
            dynnr          = sy-dynnr.
      endif.
    endif.

    if rec_list is not bound.
      try.
          cl_salv_table=>factory(
          exporting
            r_container = rec_container
            container_name = conv #( container_name )
          importing
            r_salv_table = rec_list
          changing
            t_table      = fieldtab ).
        catch cx_salv_msg.                              "#EC NO_HANDLER
      endtry.
    endif.

    rec_list->display( ).

  endmethod.

endclass.
Hinweis: Das Dynpro 0200 hat nur die beiden Controls nebeneinander in gleicher Größe.
Sorry, ein kürzeres Beispielcoding hab ich nicht hinbekommen ;)
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Tree Control - Eventhandling

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Debuggen....

Re: Tree Control - Eventhandling

Beitrag von ralf.wenzel (Top Expert / 3772 / 176 / 262 ) »
Lt Debugger wird der richtige Eintrag beim Doppelklick ausgewählt. So komme ich nicht weiter.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Tree Control - Eventhandling

Beitrag von black_adept (Top Expert / 3942 / 105 / 885 ) »
Nur ganz kurz ohne System, daher bitte folgends prüfen

1.) Wird der Event beim 2. Mal ausgelöst?
2.) Wird der 1. Event bei dem es klappt auch vollständig bearbeitet ( also wenn du in die Aufrufhistorie schaust, ist der Event nicht mehr auf dem Stack )
3.) "Rechts" wird was angezeigt: Hast du in dem Container geschaut, dass auch wirklich nur 1 Child-Element vorhanden ist?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Tree Control - Eventhandling

Beitrag von ewx (Top Expert / 4782 / 294 / 628 ) »
Du darfst REC_LIST nicht lokal definieren!
/EDIT: Und FIELDTAB auch nicht.

Re: Tree Control - Eventhandling

Beitrag von ralf.wenzel (Top Expert / 3772 / 176 / 262 ) »
*heul* Das wars, danke, Enno.

Ich wusste, ich hab was ganz Einfaches übersehen.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Tree Control - Eventhandling

Beitrag von ralf.wenzel (Top Expert / 3772 / 176 / 262 ) »
Noch einen Effekt habe ich: Ich habe einen SALV-Liste, aus der ich einen Eintrag auswähle und per Klick auf einen Button ein Popup mit genau der Anzeige darstelle, wie ihr sie im Tree sehen könnt. Wenn ich das Tree-Popup schließe, einen anderen SALV-Eintrag auswähle und wieder auf den Button drücke, sehe ich die alte Anzeige. Erste wenn ich einen Node doppelklicke, dann wird die Anzeige aufgefrischt.

Das Komische ist: Ich zerstöre beim Schließen des Trees alle Objekte - den Tree, das Control, sogar den Eventhandler. Trotzdem ist die alte Anzeige da, wenn ich die Funktion nochmal auswähle.

Woran kann das liegen???
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Tree Control - Eventhandling

Beitrag von jensschladitz (Specialist / 417 / 0 / 56 ) »
Sali,

wie schliesst du denn das Popup - über einen PF Button des Popup oder über das X oben rechts ? Was ist es für ein Popup - eigenes Dynpro mit Control und ALV oder SALV oder ?

Gruss
thanks Jens

Re: Tree Control - Eventhandling

Beitrag von ralf.wenzel (Top Expert / 3772 / 176 / 262 ) »
Es ist ein eigenes Dynpro, links sitzt der Tree, rechts der ALV (einspaltig). Ich schließe das Dynpro über einen Button des Status, den ich dafür angelegt habe.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Tree Control - Eventhandling

Beitrag von a-dead-trousers (Top Expert / 4267 / 213 / 1140 ) »
Ich würde trotzdem darauf tippen, dass du irgendwo vergessen hast ein Control (oder Container) zu zerstören.
Schau mal die CL_GUI_CFW=>CFW_SUBSCRIBERLIST im Debugger an. Da sollten alle Controls drinnen stehen die aktuell am GUI (noch) instanziert sind.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
ralf.wenzel

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Tree Control - Eventhandling

Beitrag von ralf.wenzel (Top Expert / 3772 / 176 / 262 ) »
Moin,

mit der Liste habe ich das tote Objekt gefunden - es war das Tree Control, das per create_tree_control erzeugt wird, dessen Instanz ich mir aber nicht habe zurückgeben lassen. Darum ist es mir bei meinen free-Anweisungen durchgerutscht.

Danke!
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Tree Control - Eventhandling

Beitrag von ralf.wenzel (Top Expert / 3772 / 176 / 262 ) »
ewx hat geschrieben:Du darfst REC_LIST nicht lokal definieren!
/EDIT: Und FIELDTAB auch nicht.
Ich habe das Problem schon wieder - jetzt habe ich (weil es eine Klasse ist und kein Programm), die beiden als Klassenattribute deklariert. Kann es sein, dass das nicht reicht?
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Seite 1 von 1

Vergleichbare Themen

17
Antw.
6921
Views
ALV Tree Control
von ralf.wenzel » 04.08.2013 21:49 • Verfasst in ABAP® Core
2
Antw.
2130
Views
tree control
von immo » 27.10.2005 08:18 • Verfasst in ABAP Objects®
7
Antw.
3895
Views
Problem mit tree control...
von Priapso » 16.06.2004 10:54 • Verfasst in ABAP Objects®
0
Antw.
1330
Views
Verbindungslinien im Tree Control
von Dele » 22.10.2014 16:23 • Verfasst in ABAP Objects®
2
Antw.
1647
Views
Tree Control ausdrucken - aber wie?
von Rob » 08.12.2005 13:21 • Verfasst in ABAP Objects®

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.