ALV aktualisieren bei verschiedenen Dynpros

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

ALV aktualisieren bei verschiedenen Dynpros

Beitrag von siggi76 (ForumUser / 19 / 5 / 0 ) »
Hallo zusammen,
ich stehe hier vor einem Problem, bei welchem ich einfach nicht weiter komme.

Kurze Info vorab:

Ich erstelle ein Programm, welches nach dem Selektionsbildschirm den Dynpro 9000 anzeigt.
Auf diesem Dynpro sind 2 ALVs, welche Informationen bereitstellen.
Über einen Button kann man via leave to screen auf das Dynpro 9100 gelangen.
Hier ist wiederum ein ALV, bei dem Änderungen vorgenommen werden können. Die Logik zum Abspeichern dieser Änderungen funktioniert einwandfrei.

Habe ich nun auf dem 9100 Dynpro eine Änderung im ALV vorgenommen, erscheint ein Speicherbutton innerhalb des ALVs.

Gehe ich nun über den OK-Code "BACK" im User-Command über die Anweisung "Leave to screen 9000" zurück auf das Dynpro 9000, kann ich vorher das Popup (Die Änderungen werden verloren gehen) bestätigen oder auf dem Dynpro bleiben.

Wenn ich mit OK bestätige, sollen auch die gemachten Änderungen innerhalb des ALVs verworfen werden.

Da ich erst im PBO-Modul des 9100- Dynpros die prepare_data und die prepare_alv anweisungen habe, wird auch die abzubildende interne Tabelle des ALVs neu gefüllt mit den ursprünglichen Daten. Sobald das PBO- Modul durchlaufen ist, ich aber noch im Debugger bin, kann ich sehen, dass die interne Tabelle richtig ist. Bei der Anzeige des ALVs sind aber die Werte trotzdem noch die "Geänderten".

Ich vermute, dass bei dem Aufruf des "set_table_for_first_display" noch die alten Informationen gespeichert sind.

Code: Alles auswählen.

FORM ok_code_9100 .

  DATA: lf_ok_9100 TYPE gui_code.


  lf_ok_9100 = ok_9100.
  CLEAR ok_9100.

  CASE lf_ok_9100.
    WHEN 'BACK'.

      LOOP AT gt_belege INTO gs_belege
        WHERE zvbkz IS NOT INITIAL.
        lf_belege_zvbkz = 1.
        EXIT.
      ENDLOOP.

      IF lf_belege_zvbkz IS NOT INITIAL.
        CALL FUNCTION 'POPUP_TO_CONFIRM'
          EXPORTING
            titlebar              = text-p01
            text_question         = text-p02
            text_button_1         = text-pok
            text_button_2         = text-pca
            default_button        = '1'
            display_cancel_button = space
          IMPORTING
            answer                = gf_reallyquit
          EXCEPTIONS
            text_not_found        = 1
            OTHERS                = 2.
        IF sy-subrc NE 0.
          gf_reallyquit = 2.
        ENDIF.
      ENDIF.

     IF gf_really_quit NE 2.
       LEAVE TO SCREEN 9000.
     ENDIF.
  ENDCASE.

ENDFORM.                    " OK_CODE_9100

Code: Alles auswählen.

IF gf_reallyquit NE 1.
* Belegeübersicht
  CALL METHOD g_alv_belege->set_table_for_first_display
    EXPORTING
      is_layout                     = gs_layout_belege
      it_toolbar_excluding          = gt_extool_belege
    CHANGING
      it_outtab                     = gt_belege
      it_fieldcatalog               = gt_fk_belege
      it_sort                       = gt_sort_belege
    EXCEPTIONS
      invalid_parameter_combination = 1
      program_error                 = 2
      too_many_lines                = 3
      OTHERS                        = 4.
  IF sy-subrc <> 0.
*   interner Fehler
    MESSAGE e107(ckcc).
  ENDIF.
ELSE.

* Anzeige auffrischen
  Call METHOD g_alv_belege->refresh_table_display.

  ENDIF.
Hat jemand von euch eine Idee, wie ich hier weiter vorgehen könnte?

Vielen Dank!

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


Re: ALV aktualisieren bei verschiedenen Dynpros

Beitrag von siggi76 (ForumUser / 19 / 5 / 0 ) »
Und hier die Lösung :)
Quelle: http://www.yaabb.de/viewtopic.php?t=1756
Hallihallo,

das was du beschreibst ist ein nerviges Thema - da kann man sich zu Tode suchen woran es liegt. Ich hab mir dein Coding kurz angeschaut und das Problem ist meines Eindrucks nach die folgende Zeile:
Code: ‹ Download › ‹ Auswählen ›
FREE: cl_container2, cl_grid_alv2, lt_alv_t.



Das sieht ja an sich harmlos aus und du möchtest damit sicher deinen alten dargestellten Grid inkl. des zugehörigen Containers löschen.

Aber wenn ich mich nicht sehr täusche passiert genau dieses nicht.

Grund: Du hast einen Dynpro mit einem Customcontrol. An dieses Control wird dein cl_container_2 gebunden und in diesen container dann dein ALV.
Wenn du nun "nur" ein Free machst, gibst du die Variable scheinbar frei. Aber da der Dynpro noch existiert und der Customcontainer sich in der "Child"-Liste des Dynpros eingetragen hat, wird der Garbagecollector die zugehörigen Objekte noch nicht abräumen. Du hast zwar über die Variablen cl_container2 etc keinen Zugriff mehr darauf - aber sie existieren momentan noch.
Das ist etwa so wie wenn man eine Eventhandlerklasse definiert und beim Registrieren der Handler an ein Objekt (z.B. ein Grid ) innerhalb einer Formroutine vorher eine (form-)lokale Instanz der Klasse erzeugt. Nach Verlassen der Formroutine existiert die grade eben erzeugte (form-lokale) Instanz zwar nicht mehr für dein Programm - aber da der handler registriert wurde existiert sie noch für das Objekt solange bis das Objekt abgebaut wird.

Nun wird dein Coding durchlaufen und mit Code: ‹ Download › ‹ Auswählen › ‹ Aufklappen ›
# IF cl_container2 IS INITIAL.


wird ein neuer Container erzeugt, der sich an denselben Bereich des Dynpros klemmt wie der vorherige. Damit sind dem Bereich des Dynpros nun 2 Customcontainer zugeordnet. Und angezeigt wird immer noch der erste, weil er "vorne" liegt.

Das kannst du überprüfen, indem du im Debugger beim 2. Doppelklick und nach Erzeugung des Customcontrols dir dieses Control anschaust, von hier in den "parent" verzweigst und dir von ebendiesem mal die "Childliste" anschaust. Hier solltest du nun 2 Container vorfinden.


Lösung: Wie kannst du das umgehen?
Du musst dafür sorgen, dass das vorher angezeigte Customcontrol vollständig abgebaut wird - und das machst du am Besten, indem du den Destruktor des Controls aufrufst, welcher üblicherweise "DESTRUCTOR" oder "FREE" heißt, bevor du die am Anfang zitierten Codingzeilen "Free....." aufrufst

_________________
live long and prosper
Stefan

email: black_adept@yaAbb.de

Re: ALV aktualisieren bei verschiedenen Dynpros

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
Oder du zerstört nicht jedesmal deine Controls, sondern lässt sie für die ganze Laufzeit deines Programms leben ;)
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

Seite 1 von 1

Vergleichbare Themen

6
Antw.
2652
Views
Dynpros aktualisieren
von rune » 09.12.2007 23:54 • Verfasst in ABAP® Core
9
Antw.
4237
Views
Von verschiedenen Email aus SAP raussenden
von Adrian » 16.05.2014 13:49 • Verfasst in ABAP® für Anfänger
2
Antw.
1774
Views
Standardtexte in SAP in verschiedenen Sprachen
von debianfan » 14.06.2018 14:18 • Verfasst in ABAP® für Anfänger
12
Antw.
25425
Views
Email aus SAP mit verschiedenen Dateianhängen
von Anchi » 20.08.2007 16:18 • Verfasst in ABAP® Core
0
Antw.
1191
Views
Funktionaler Vergleich von verschiedenen Releaseständen
von Margolwes » 21.04.2006 15:25 • Verfasst in Sonstige Module

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Regex in where
vor 4 Stunden von black_adept 2 / 56
Programm anlegen mit Vorlage
vor 10 Stunden von DeathAndPain 2 / 111
IT0024 Qualifikationen CP-ID
vor 10 Stunden von DeathAndPain 2 / 351
BUSOBJEKT zu CMIS PHIO ermitteln
vor 12 Stunden von snooga87 1 / 84

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.

Aktuelle Forenbeiträge

Regex in where
vor 4 Stunden von black_adept 2 / 56
Programm anlegen mit Vorlage
vor 10 Stunden von DeathAndPain 2 / 111
IT0024 Qualifikationen CP-ID
vor 10 Stunden von DeathAndPain 2 / 351
BUSOBJEKT zu CMIS PHIO ermitteln
vor 12 Stunden von snooga87 1 / 84

Unbeantwortete Forenbeiträge

BUSOBJEKT zu CMIS PHIO ermitteln
vor 12 Stunden von snooga87 1 / 84
aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3260
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821