cl_gui_alv_tree Daten ändern

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

Getting started ... Alles für einen gelungenen Start.
17 Beiträge • Seite 1 von 2 (current) Nächste
17 Beiträge Seite 1 von 2 (current) Nächste

cl_gui_alv_tree Daten ändern

Beitrag von Icke0801 (Specialist / 126 / 97 / 7 ) »
Hallo zusammen,

ich habe hier einen ALV-Tree (cl_gui_alv_tree ) in welchem ich Daten (Checkbox, aber nicht die aus dem Layout) maschinell ändern muss.

Wenn ich die checkbox manuell änder, wird die Änderung auch schön an das Frontend gegeben.
Bei der maschinellen Bearbeitung wird die Änderung allerdings nicht an das Frontend gegeben. Dabei mache ich im Prinzip das gleiche wie bei der manuellen Variante.

Code: Alles auswählen.

* maschinell
LOOP AT t_alv_outtab ASSIGNING <alv_outtab>
                          WHERE ( bom_stufe EQ is_select-stufe
                                OR bom_stufe < is_select-stufe )
                            AND lang  EQ is_select-lang
                            AND bomnr IS NOT INITIAL.

      lv_node_key = sy-tabix.

      handle_checkbox_change(
        EXPORTING
          node_key = lv_node_key ).
    ENDLOOP.

Code: Alles auswählen.

  METHOD handle_checkbox_change.
*    BREAK-POINT.
    DATA: lt_item_layout TYPE lvc_t_layi.
    FIELD-SYMBOLS: <alv_output>  TYPE ts_outtab.
    DATA ls_outtab_line TYPE ts_outtab.

*---------------------------------------------------------------------*
    refresh = ' '.
*---------------------------------------------------------------------*
    READ TABLE t_alv_outtab ASSIGNING <alv_output> INDEX node_key.
    IF sy-subrc EQ 0.
      CASE <alv_output>-checkbox.
        WHEN abap_true.
          <alv_output>-checkbox = abap_false.
        WHEN abap_false.
          <alv_output>-checkbox = abap_true.
      ENDCASE.
    ELSE.
      EXIT.
    ENDIF.
*---------------------------------------------------------------------*
    o_alv_tree->get_outtab_line(
      EXPORTING
        i_node_key     =  node_key   " node key
      IMPORTING
        e_outtab_line  =  ls_outtab_line   " line of outtab
*    e_node_text    =     " node-text
        et_item_layout =   lt_item_layout  " Layoutstruktur für Items des ALV-Tree Controls
*    es_node_layout =     " Knotenlayout ALV-Tree Control
      EXCEPTIONS
        node_not_found = 1
        OTHERS         = 2
    ).
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    ls_outtab_line-checkbox = <alv_output>-checkbox.
*---------------------------------------------------------------------*
    o_alv_tree->change_node(
      EXPORTING
        i_node_key     = node_key    " key of the changed line
        i_outtab_line  = ls_outtab_line    " outtab line to be changed
*        is_node_layout =     " node layout
*        it_item_layout =     " item layout
*        i_node_text    =     " Knotentext
*        i_u_node_text  =     " 'X': Knotentext ändern
      EXCEPTIONS
        node_not_found = 1
        OTHERS         = 2
    ).
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
*---------------------------------------------------------------------*


*---------------------------------------------------------------------*
    o_alv_tree->frontend_update( ).

    CALL METHOD cl_gui_cfw=>flush.

  ENDMETHOD.
Hat da jemand einen Tipp für mich, wie ich die Änderungen an das Frontend übertragen kann?
--
Grüße aus der Endlosschleife
-= Icke =-
abapTools

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


Re: cl_gui_alv_tree Daten ändern

Beitrag von black_adept (Top Expert / 3946 / 105 / 886 ) »
Wie hast du die Checkbox erstellt und wie reagierst du auf die Checkboxänderung ( was steht im Feldkatalog) ?

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Icke0801

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: cl_gui_alv_tree Daten ändern

Beitrag von Icke0801 (Specialist / 126 / 97 / 7 ) »
Aufbau fieldcat:

Code: Alles auswählen.

      
CASE <fcat>-fieldname.
        WHEN 'CHECKBOX'.
          <fcat>-outputlen = 4.
          <fcat>-fix_column = 'X'.
          <fcat>-checkbox = 'X'.
          <fcat>-edit = 'X'.
          s_item_layout-class    = cl_gui_column_tree=>item_class_checkbox.
          s_item_layout-editable = abap_true.
ENDCASE.
Bei der maschinellen Verarbeitung reagiere ich im PAI und rufe die Methode auf (siehe Eingangspost).
--
Grüße aus der Endlosschleife
-= Icke =-
abapTools

Re: cl_gui_alv_tree Daten ändern

Beitrag von black_adept (Top Expert / 3946 / 105 / 886 ) »
Löst der Klick in die Checkbox einen Event aus? Und wenn ja ( du hast ja den handler ) - wie hast du den Event registriert

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Icke0801

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: cl_gui_alv_tree Daten ändern

Beitrag von Icke0801 (Specialist / 126 / 97 / 7 ) »
Der klick in die Checkbox löst das Event aus, und transportiert den Wert auch wieder an die GUI.

Bei der maschinellen Verarbeitung wird die Event-Methode direkt aufgerufen.

Event wird so registriert:

Code: Alles auswählen.

  METHOD register_events.

    DATA: lt_events TYPE cntl_simple_events,
          ls_event  TYPE cntl_simple_event.

    o_alv_tree->get_registered_events(
      IMPORTING
        events     = lt_events    " simple_events
      EXCEPTIONS
        cntl_error = 1
        OTHERS     = 2 ).
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    ls_event-eventid        = cl_gui_column_tree=>eventid_checkbox_change.
    ls_event-appl_event     = 'X'.
    APPEND ls_event         TO lt_events.


    CALL METHOD o_alv_tree->set_registered_events
      EXPORTING
        events                    = lt_events
      EXCEPTIONS
        cntl_error                = 1
        cntl_system_error         = 2
        illegal_event_combination = 3.
    IF sy-subrc <> 0.
      MESSAGE x208(00) WITH 'ERROR'.                        "#EC NOTEXT
    ENDIF.

  ENDMETHOD.
--
Grüße aus der Endlosschleife
-= Icke =-
abapTools

Re: cl_gui_alv_tree Daten ändern

Beitrag von black_adept (Top Expert / 3946 / 105 / 886 ) »

Code: Alles auswählen.

    READ TABLE t_alv_outtab ASSIGNING <alv_output> INDEX node_key.
    IF sy-subrc EQ 0.
      CASE <alv_output>-checkbox.
        WHEN abap_true.
          <alv_output>-checkbox = abap_false.
        WHEN abap_false.
          <alv_output>-checkbox = abap_true.
      ENDCASE.
    ELSE.
      EXIT.
    ENDIF.
...
    ls_outtab_line-checkbox = <alv_output>-checkbox.
Der ALV-Tree ist eine Krücke wegen diverser Einschränkugnen, die nirgends groß dokumentiert werden.
Hier: Keine eigenen Änderungen an t_alv_outtab. Änderungen nur über die Tree-Methoden!!!!!!!. Lass in dem Coding also den CASE-Bock weg da du dort an der Tabelle rumfummelst. Mit "get_outtab_line" bekommst du die Daten eh auf anderem Wege noch mal. Dann sollte es funktinionieren.

Und noch ein Hinweis - wenn du den "handle" auch maschinell aufrufst, dann gib noch einen optionalen Parameter mit, der dafür sorgt, dass der frontend update nicht bei jeder Zeile passiert sondern erst nach der Verarbeitung deiner Schleife. Das wird deutlich schneller werden.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Icke0801

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: cl_gui_alv_tree Daten ändern

Beitrag von Icke0801 (Specialist / 126 / 97 / 7 ) »
Stefan, vielen Dank bis dahin :up: Das Problem ist nun erstmal gelöst.

Nachfrage: Wenn ich herausfinden möchte, welche Knoten nun mit ausgewählter Checkbox versehen sind, muss ich etwa über alle Knoten lesen und das Layout prüfen? Ein Transport in die ALV_TAB findet ja anscheinend nicht statt. Ist das wirklich so umständlich, oder gibt es da einen einfacheren Weg?
--
Grüße aus der Endlosschleife
-= Icke =-
abapTools

Re: cl_gui_alv_tree Daten ändern

Beitrag von black_adept (Top Expert / 3946 / 105 / 886 ) »
Icke0801 hat geschrieben:Nachfrage: Wenn ich herausfinden möchte, welche Knoten nun mit ausgewählter Checkbox versehen sind, muss ich etwa über alle Knoten lesen und das Layout prüfen? Ein Transport in die ALV_TAB findet ja anscheinend nicht statt. Ist das wirklich so umständlich, oder gibt es da einen einfacheren Weg?
Doch - der Transport sollte eigentlich stattfinden. Aber nur in Richtung "Vom TreeGrid in Richtung Tabelle". D.h., dass du normalerweise nach dem Update der ALV-Zeile über die Tree-Methoden auch in der Originaltabelle die Daten angepasst haben solltest.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Icke0801

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: cl_gui_alv_tree Daten ändern

Beitrag von Icke0801 (Specialist / 126 / 97 / 7 ) »
black_adept hat geschrieben: Doch - der Transport sollte eigentlich stattfinden. Aber nur in Richtung "Vom TreeGrid in Richtung Tabelle". D.h., dass du normalerweise nach dem Update der ALV-Zeile über die Tree-Methoden auch in der Originaltabelle die Daten angepasst haben solltest.

hmm, das ist wohl leider nicht gleich nach dem update über die Tree-Methoden in der ALV-Tabelle hinterlegt.
Gibt es eine Möglichkeit, den Abgleich nochmal anzustoßen?
--
Grüße aus der Endlosschleife
-= Icke =-
abapTools

Re: cl_gui_alv_tree Daten ändern

Beitrag von black_adept (Top Expert / 3946 / 105 / 886 ) »
Bei mir klappt das.
Bist du sicher, dass du auch in die Tabelle schaust, die du beim 1. Anlegen des Tree hinterlegt hast ( und die zu dem Zeitpunkt normalerweise leer sein sollte ? )
Und hast du auch den Flush abgewartet?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: cl_gui_alv_tree Daten ändern

Beitrag von Icke0801 (Specialist / 126 / 97 / 7 ) »
ja, ich schaue in richtige Tabelle :-)

In der ALV-Tabelle ist das Feld CHECKBOX immer leer. Sowohl bei manuell als auch bei maschinell.

Nach allen Änderungen durchlaufe ich immer folgenden Code:

Code: Alles auswählen.

 
    o_alv_tree->column_optimize( ).

    o_alv_tree->update_calculations( ).

    o_alv_tree->frontend_update( ).

    CALL METHOD cl_gui_cfw=>flush.
--
Grüße aus der Endlosschleife
-= Icke =-
abapTools

Re: cl_gui_alv_tree Daten ändern

Beitrag von black_adept (Top Expert / 3946 / 105 / 886 ) »
Andere Änderungen kommen an?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: cl_gui_alv_tree Daten ändern

Beitrag von Icke0801 (Specialist / 126 / 97 / 7 ) »
Sonst sind keine Änderungen vorgesehen. Ich brauche nur die Checkbox.
Und ich glaube, mehr kann dieser ALV Tree auch gar nicht.
--
Grüße aus der Endlosschleife
-= Icke =-
abapTools

Re: cl_gui_alv_tree Daten ändern

Beitrag von black_adept (Top Expert / 3946 / 105 / 886 ) »
Änderst du die Checkbox abhängig von dem Wert der internen Tabelle oder aus dem Wert den du vorher mit o_alv_tree->get_outtab_line gelesen hast.
In letzerem Fall mach mal nach dem "get_outtab_line" ein Flush und schau im Debugger was da dann drin steht . Also vor allem, ob beim manuellen ankreuzen du dann ein X übermittelt bekommst ( so wie es am Frontend sichtbar ist ) oder ein "leer" (wie es in der korrespondierenden Tabelle steht ). Denn das ist der Hauptunteschied beim manuellen und maschinellen Bearbeiten .
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: cl_gui_alv_tree Daten ändern

Beitrag von Icke0801 (Specialist / 126 / 97 / 7 ) »
Ich ändere nur das Layout. (chosen)

Die "outtab_line " ansich bleibt unberührt.
Wenn ich doch in der outtab_line die checkbox setze, sieht es so aus wie im Anhang :)

Der FLush brachte leider nichts. Die ALV_Outtab bleibt weiterhin unberührt.

Im Moment fällt mir nur die Alternative ein, ein "Backend-Outtab" mitzuführen, und dort die Änderungen mitzuschreiben. Allerdings hätte ich es gerne eleganter.
any Ideas? :)
--
Grüße aus der Endlosschleife
-= Icke =-
abapTools

Vergleichbare Themen

3
Antw.
3738
Views
Doku über ALV Tree / SAP Tree
von SkyHobbit » 14.06.2005 11:56 • Verfasst in ABAP® für Anfänger
6
Antw.
9146
Views
ALV Tree / List Tree?
von wega83 » 02.04.2012 16:06 • Verfasst in ABAP® Core
4
Antw.
2744
Views
ALV-liste-Daten mit der DB-Tabelle-Daten vergleichen
von Nadine_2706 » 31.08.2011 11:57 • Verfasst in ABAP® für Anfänger
9
Antw.
4759
Views
Daten aus 2 Tabellen + Vergleich von Daten
von dv88 » 06.10.2009 12:26 • Verfasst in ABAP® für Anfänger
1
Antw.
1327
Views
ALV tree
von HZK » 01.04.2005 10:31 • Verfasst in ABAP® für Anfänger

Ü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.