gelöst cl_gui_alv_tree Daten ändern


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

gelöst cl_gui_alv_tree Daten ändern

Beitragvon Icke0801 » 29.01.2019, 11:08

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
-= Icke0801 =-
Icke0801
ForumUser
 
Beiträge: 85
Registriert: 28.12.2007, 19:08
Wohnort: Berlin
Dank erhalten: 2 mal
Ich bin: Entwickler/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: cl_gui_alv_tree Daten ändern

Beitragvon black_adept » 29.01.2019, 11:54

Wie hast du die Checkbox erstellt und wie reagierst du auf die Checkboxänderung ( was steht im Feldkatalog) ?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Für diese Nachricht hat black_adept einen Dank bekommen :
Icke0801
black_adept
Top Expert
 
Beiträge: 3184
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 553 mal
Ich bin: Freiberufler/in

Re: cl_gui_alv_tree Daten ändern

Beitragvon Icke0801 » 29.01.2019, 13:06

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
-= Icke0801 =-
Icke0801
ForumUser
 
Beiträge: 85
Registriert: 28.12.2007, 19:08
Wohnort: Berlin
Dank erhalten: 2 mal
Ich bin: Entwickler/in

Re: cl_gui_alv_tree Daten ändern

Beitragvon black_adept » 29.01.2019, 14:01

Löst der Klick in die Checkbox einen Event aus? Und wenn ja ( du hast ja den handler ) - wie hast du den Event registriert
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Für diese Nachricht hat black_adept einen Dank bekommen :
Icke0801
black_adept
Top Expert
 
Beiträge: 3184
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 553 mal
Ich bin: Freiberufler/in

Re: cl_gui_alv_tree Daten ändern

Beitragvon Icke0801 » 29.01.2019, 14:38

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
-= Icke0801 =-
Icke0801
ForumUser
 
Beiträge: 85
Registriert: 28.12.2007, 19:08
Wohnort: Berlin
Dank erhalten: 2 mal
Ich bin: Entwickler/in

Re: cl_gui_alv_tree Daten ändern

Beitragvon black_adept » 29.01.2019, 21:26

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.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Für diese Nachricht hat black_adept einen Dank bekommen :
Icke0801
black_adept
Top Expert
 
Beiträge: 3184
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 553 mal
Ich bin: Freiberufler/in

Re: cl_gui_alv_tree Daten ändern

Beitragvon Icke0801 » 30.01.2019, 09:07

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
-= Icke0801 =-
Icke0801
ForumUser
 
Beiträge: 85
Registriert: 28.12.2007, 19:08
Wohnort: Berlin
Dank erhalten: 2 mal
Ich bin: Entwickler/in

Re: cl_gui_alv_tree Daten ändern

Beitragvon black_adept » 30.01.2019, 11:09

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.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Für diese Nachricht hat black_adept einen Dank bekommen :
Icke0801
black_adept
Top Expert
 
Beiträge: 3184
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 553 mal
Ich bin: Freiberufler/in

Re: cl_gui_alv_tree Daten ändern

Beitragvon Icke0801 » 30.01.2019, 14:41

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
-= Icke0801 =-
Icke0801
ForumUser
 
Beiträge: 85
Registriert: 28.12.2007, 19:08
Wohnort: Berlin
Dank erhalten: 2 mal
Ich bin: Entwickler/in

Re: cl_gui_alv_tree Daten ändern

Beitragvon black_adept » 30.01.2019, 15:42

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
black_adept
Top Expert
 
Beiträge: 3184
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 553 mal
Ich bin: Freiberufler/in

Re: cl_gui_alv_tree Daten ändern

Beitragvon Icke0801 » 30.01.2019, 16:18

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
-= Icke0801 =-
Icke0801
ForumUser
 
Beiträge: 85
Registriert: 28.12.2007, 19:08
Wohnort: Berlin
Dank erhalten: 2 mal
Ich bin: Entwickler/in

Re: cl_gui_alv_tree Daten ändern

Beitragvon black_adept » 30.01.2019, 17:12

Andere Änderungen kommen an?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de
black_adept
Top Expert
 
Beiträge: 3184
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 553 mal
Ich bin: Freiberufler/in

Re: cl_gui_alv_tree Daten ändern

Beitragvon Icke0801 » 30.01.2019, 17:20

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
-= Icke0801 =-
Icke0801
ForumUser
 
Beiträge: 85
Registriert: 28.12.2007, 19:08
Wohnort: Berlin
Dank erhalten: 2 mal
Ich bin: Entwickler/in

Re: cl_gui_alv_tree Daten ändern

Beitragvon black_adept » 31.01.2019, 09:45

Ä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
black_adept
Top Expert
 
Beiträge: 3184
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 553 mal
Ich bin: Freiberufler/in

Re: cl_gui_alv_tree Daten ändern

Beitragvon Icke0801 » 31.01.2019, 11:42

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
-= Icke0801 =-
Icke0801
ForumUser
 
Beiträge: 85
Registriert: 28.12.2007, 19:08
Wohnort: Berlin
Dank erhalten: 2 mal
Ich bin: Entwickler/in

Nächste

Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
Adobe Forms - Download - Keine Seiten
vor 11 Stunden von shimsham 2 Antw.
UTF-8 mit Funktionsbaustein
vor 13 Stunden von a-dead-trousers 4 Antw.
gelöst Fehler SAVE NOT ALLOWED bei F4IF_START_VALUE_REQUEST
vor 10 Stunden von AdrianSchm 1 Antw.
SAP Logon bei Aufruf WebGUI
Gestern von msfox 0 Antw.
Formatierung Textdatei aus Query und ABAP
vor 13 Stunden von wreichelt 5 Antw.

  Ähnliche Beiträge beta
ALV Grid Daten ändern und speichern.
27.03.2008, 12:41 von uh 3 Antw.
gelöst Daten ändern und zurückschreiben mit REUSE_ALV_GRID_DISPLAY
10.04.2018, 08:59 von SaskuAc 2 Antw.
ALV-liste-Daten mit der DB-Tabelle-Daten vergleichen
31.08.2011, 12:06 von km216 4 Antw.
Daten aus 2 Tabellen + Vergleich von Daten
15.10.2009, 06:02 von Thomas R. 9 Antw.
daten aus der DB löschen
16.01.2008, 14:03 von Handeglo 0 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder