Tabelle auf Dynpro "aktualisieren"

Getting started ... Alles für einen gelungenen Start.
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

Tabelle auf Dynpro "aktualisieren"

Beitrag von Maggonski (ForumUser / 19 / 3 / 0 ) »
Mastermind,
hallo zusammen,
ich bin absoluter Neuling und bin grade als Entwickler eingestiegen.
Nun ist meine erste Aufgabe das Spiel "Mastermind" nach zu bauen.
An sich habe ich mich auch recht gut durch gefuchst, jedoch habe ich nun ein Problem bei der Aktualisierung einer Tabelle bzw. eines Dynpros.
Folgendes ist der Stand:
In meine Tabelle werden 4 Farben (strings) und 4 pins gespeichert(strings).
Dazu gibt es eine Eingabe über Auswahlfelder. Die auswahlfelder werden per Button in die Tabelle übertragen, bzw Datenbank. Danach soll es dann die Möglichkeit geben, das Dynpro neu zu laden, so dass man die Auswahlfelder wieder auswählen kann und dann per Button diese an die Tabelle angehängt werden. Dabei soll die Tabelle aktualisiert werden.
Das Anhängen funktioniert wunderbar, jedoch aktualisiert er die Oberfläche der Tabelle nicht.
Die Tabelle wird über cl_gui_alv_grid dargestellt.
Habt ihr dafür ein paar Tipps?
Vielen dank und beste grüße

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


Re: Tabelle auf Dynpro "aktualisieren"

Beitrag von ewx (Top Expert / 4846 / 311 / 642 ) »
Ohne Code ist das Rätselraten.

Ich nehme an, dass du das Grid mit cl_gui_alv_grid->refresh_table_display bereits aktualisierst?

Ansonsten ist der häufigste Fehler, dass du das Grid mehrfach erzeugst und sozusagen unter das bereits vorher erzeugte packst. Du siehst dann immer nur das zuerst erzeugte Grid, arbeitest in der Regel aber mit der zuletzt erzeugten Instanz.

Siehe: https://tricktresor.de/blog/controls-stapeln/

Re: Tabelle auf Dynpro "aktualisieren"

Beitrag von Maggonski (ForumUser / 19 / 3 / 0 ) »
Vielen dank für die Antwort, höchst warscheinlich liegt es genau an der Stapelung. Hier mal ein Code schnippsel

Code: Alles auswählen.

DATA:
      grid                TYPE REF TO cl_gui_alv_grid,
      gt_fieldcatalog     TYPE lvc_t_fcat,
      g_custom_container  TYPE REF TO cl_gui_custom_container,
**      ls_zmastermindtable type zmastermindtable,
      gt_zmastermindtable TYPE TABLE OF zmastermindtable.


    IF g_custom_container IS INITIAL.
      CREATE OBJECT g_custom_container
        EXPORTING
          container_name = 'CCCONTAINER'.
      CREATE OBJECT grid
        EXPORTING
          i_parent = g_custom_container.

    SELECT * FROM zmastermindtable INTO TABLE gt_zmastermindtable.

         CALL METHOD grid->set_table_for_first_display
                EXPORTING I_STRUCTURE_NAME = 'ZSMASTERMINDTABLE'
                 CHANGING
                   IT_OUTTAB = gt_zmastermindtable
                it_fieldcatalog = gt_fieldcatalog.
              CALL METHOD grid->refresh_table_display.
Zuletzt geändert von Maggonski am 28.10.2022 12:00, insgesamt 2-mal geändert.

Re: Tabelle auf Dynpro "aktualisieren"

Beitrag von Maggonski (ForumUser / 19 / 3 / 0 ) »
Leider funktioniert es immer noch nicht, würde es einen Unterschied machen, wenn ich es mit der SALV probiere? Habe auch schon "is initial" oder " is not bound" versucht. die datenbanktabelle checkt die registrierung, jedoch die Anzeige auf dem Dynpro weiterhin nicht. Sonst noch ideen?

Re: Tabelle auf Dynpro "aktualisieren"

Beitrag von PeterPaletti (Specialist / 348 / 32 / 97 ) »

Code: Alles auswählen.

DATA:
      grid                TYPE REF TO cl_gui_alv_grid,
      gt_fieldcatalog     TYPE lvc_t_fcat,
      g_custom_container  TYPE REF TO cl_gui_custom_container,
**      ls_zmastermindtable type zmastermindtable,
      gt_zmastermindtable TYPE TABLE OF zmastermindtable.


    IF g_custom_container IS INITIAL.
      CREATE OBJECT g_custom_container
        EXPORTING
          container_name = 'CCCONTAINER'.
      CREATE OBJECT grid
        EXPORTING
          i_parent = g_custom_container.

    SELECT * FROM zmastermindtable INTO TABLE gt_zmastermindtable.

         CALL METHOD grid->set_table_for_first_display
                EXPORTING I_STRUCTURE_NAME = 'ZSMASTERMINDTABLE'
                 CHANGING
                   IT_OUTTAB = gt_zmastermindtable
                it_fieldcatalog = gt_fieldcatalog.
         ELSE. 
              SELECT * FROM zmastermindtable INTO TABLE gt_zmastermindtable.

              CALL METHOD grid->refresh_table_display.
          ENDIF. 
So würde ich es probieren

Re: Tabelle auf Dynpro "aktualisieren"

Beitrag von Maggonski (ForumUser / 19 / 3 / 0 ) »
Das habe ich grade mal probiert und es funktioniert leider auch nicht.
Habe euch mal den Fehler im Anhang mitgesendet. Ich habe den Aufbau des Grids in einer Methode angewendet, ist dies vielleicht das Problem?

Re: Tabelle auf Dynpro "aktualisieren"

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Leider hast du genau den Teil des Kurzdumps wegegelassen wo es interessant wird:
Der Codeabschnitt wo der Fehler aufgetreten ist.

So kann man dir nur sagen, dass eine Objektvariable offensichtlich nicht initialisiert worden ist.

Wenn ich mir deine bisherigen Antworten so ansehe, dürftest du vermutlich mit mehreren Methoden arbeiten, die keinen direkten Bezug, sprich ein gemeinsames Objekt bzw. Attribut, zueinander haben.
Du hast wahrscheinlich in beiden Methoden eine (lokale) Variable GRID (oder ähnlich) die du in einer Methode erzeugst (CREATE) und in der anderen versuchst du darauf zuzugreifen. Das geht aber so nicht. Du brauchst eine gemeinsame (globale) Variable oder ein Klassenattribut dafür.
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: Tabelle auf Dynpro "aktualisieren"

Beitrag von PeterPaletti (Specialist / 348 / 32 / 97 ) »
ADT hat recht. Vermutlich braucht deine Klasse eine Instanz des Grids als Attribut.

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


Re: Tabelle auf Dynpro "aktualisieren"

Beitrag von Maggonski (ForumUser / 19 / 3 / 0 ) »
Vielen dank schonmal für die viele Hilfe.
In der Methode "Speichern" erzeuge ich die objecte grid und g_custom_container. vorher habe ich auch hier diese definiert. Nun habe ich die DATA in das Topinclude gepackt und mit hilfe der export und import werte (habe hier variablen definiert für die beiden) wollte ich diese dann in der methode " speichern " aufrufen. nun sagt mir das programm jedoch, dass diese nicht verändert werden können. im anhang poste ich so weit es geht den ganzen code.
TOPINCLUDE:
DATA: grid TYPE REF TO cl_gui_alv_grid,

g_custom_container TYPE REF TO cl_gui_custom_container.
Methoden Aufruf im PAI:
CALL METHOD zmastermind=>speichern
EXPORTING
ep_custom_container = g_custom_container
ep_grid = grid

IMPORTING
ip_custom_container = g_custom_container
ip_grid = grid

.

Die Methode selbst:
DATA:ls_zmastermindtable TYPE zmastermindtable,
ps_zmastermindtable TYPE TABLE OF zmastermindtable,
gt_fieldcatalog TYPE lvc_t_fcat,
gt_zmastermindtable TYPE TABLE OF zmastermindtable.


DATA: ckfeld1farbe TYPE string,
ckfeld2farbe TYPE string,
ckfeld3farbe TYPE string,
ckfeld4farbe TYPE string,
pin1 TYPE string,
pin2 TYPE string,
pin3 TYPE string,
pin4 TYPE string.

CALL METHOD zcodeknacker=>get_ckfarben
IMPORTING
ev_ckfeld1 = ckfeld1farbe
ev_ckfeld2 = ckfeld2farbe
ev_ckfeld3 = ckfeld3farbe
ev_ckfeld4 = ckfeld4farbe.

zmastermind=>farbenvergleichen(
IMPORTING
ev_vergleich1 = pin1
ev_vergleich2 = pin2
ev_vergleich3 = pin3
ev_vergleich4 = pin4
).



ls_zmastermindtable-zfeld1 = ckfeld1farbe.
ls_zmastermindtable-zfeld2 = ckfeld2farbe.
ls_zmastermindtable-zfeld3 = ckfeld3farbe.
ls_zmastermindtable-zfeld4 = ckfeld4farbe.
ls_zmastermindtable-pin = pin1.
ls_zmastermindtable-pin2 = pin2.
ls_zmastermindtable-pin3 = pin3.
ls_zmastermindtable-pin4 = pin4.
ls_zmastermindtable-runde = zmastermind=>runde.





INSERT INTO zmastermindtable VALUES @ls_zmastermindtable.

SELECT * FROM zmastermindtable INTO TABLE gt_zmastermindtable.
* IF runde = 1.
IF ep_custom_container IS INITIAL.
CREATE OBJECT ep_custom_container
EXPORTING
container_name = 'CCCONTAINER'.
CREATE OBJECT ep_grid
EXPORTING
i_parent = ep_custom_container.



CALL METHOD ep_grid->set_table_for_first_display
EXPORTING
i_structure_name = 'ZSMASTERMINDTABLE'
CHANGING
it_outtab = gt_zmastermindtable.
* it_fieldcatalog = gt_fieldcatalog.
ELSE.


CALL METHOD ep_grid->refresh_table_display.
ENDIF.

ip_custom_container = ep_custom_container.
ip_grid = ep_grid.



ENDMETHOD.

Die Parameter:
EP_CUSTOM_CONTAINER Importing
EP_GRID Importing
IP_CUSTOM_CONTAINER Exporting
IP_GRID Exporting

Re: Tabelle auf Dynpro "aktualisieren"

Beitrag von PeterPaletti (Specialist / 348 / 32 / 97 ) »
Und wenn du statt IMPORTING/EXPORTING Parameter ganz einfach CHANGING Parameter nimmst?

Re: Tabelle auf Dynpro "aktualisieren"

Beitrag von Maggonski (ForumUser / 19 / 3 / 0 ) »
Jo das kann ich machen. Jetzt wirft er aber aber folgenden Fehler aus.
fehler mastermind2.PNG
Wenn ich nun versuche die Tabelle im Topinclude zu definieren und Attribute festzulegen, habe ich das Problem, dass ich ja nur type und type ref to wählen kann. Er wirft also als fehler aus, dass es nicht Typkompatibel wäre zu Outtab usw.

Re: Tabelle auf Dynpro "aktualisieren"

Beitrag von PeterPaletti (Specialist / 348 / 32 / 97 ) »
Hallo, auf die Schnelle eine Logik mit Klasse und Methoden zur Ausgabe von Materialien aus der MARA im ALV-Grid.

Hope this helps.

Code: Alles auswählen.

CLASS my_class DEFINITION.
  PUBLIC SECTION.
    METHODS:
      constructor,
      show_alv.
  PRIVATE SECTION.
    DATA materials TYPE TABLE OF mara.
    DATA grid TYPE REF TO cl_gui_alv_grid.
    DATA docking TYPE REF TO cl_gui_docking_container.
ENDCLASS.

CLASS my_class IMPLEMENTATION.
  METHOD show_alv.

    IF docking IS INITIAL.
      CREATE OBJECT docking
        EXPORTING
*         PARENT                      =
*         REPID                       =
*         DYNNR                       =
          side                        = cl_gui_docking_container=>dock_at_top
          extension                   = 400
*         STYLE                       =
*         LIFETIME                    = lifetime_default
*         CAPTION                     =
*         METRIC                      = 0
*         RATIO                       =
*         NO_AUTODEF_PROGID_DYNNR     =
*         NAME                        =
        EXCEPTIONS
          cntl_error                  = 1
          cntl_system_error           = 2
          create_error                = 3
          lifetime_error              = 4
          lifetime_dynpro_dynpro_link = 5
          OTHERS                      = 6.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                   WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.


      CREATE OBJECT grid
        EXPORTING
          i_parent = docking.

      CALL METHOD grid->set_table_for_first_display
        EXPORTING
*         I_BUFFER_ACTIVE               =
*         I_BYPASSING_BUFFER            =
*         I_CONSISTENCY_CHECK           =
          i_structure_name              = 'MARA'
*         is_variant                    =
*         i_save                        =
*         i_default                     = 'X'
*         is_layout                     =
*         IS_PRINT                      =
*         IT_SPECIAL_GROUPS             =
*         it_toolbar_excluding          =
*         IT_HYPERLINK                  =
*         IT_ALV_GRAPHICS               =
        CHANGING
          it_outtab                     = materials
*         it_fieldcatalog               = 
*         it_sort                       =
*         IT_FILTER                     =
        EXCEPTIONS
          invalid_parameter_combination = 1
          program_error                 = 2
          too_many_lines                = 3
          OTHERS                        = 4.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno   
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.  
      ENDIF.
    ELSE.
      CALL METHOD grid->refresh_table_display.
    ENDIF.

  ENDMETHOD.

  METHOD constructor.
    SELECT * FROM mara INTO TABLE materials UP TO 10 ROWS.
  ENDMETHOD.
ENDCLASS.

DATA: my_app TYPE REF TO my_class.

START-OF-SELECTION.
  CREATE OBJECT my_app.
  CALL SCREEN '0100'.


*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS '0100'.
  CALL METHOD my_app->show_alv.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE sy-ucomm.
    WHEN 'BACK' OR 'EXIT' OR 'CANC'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.

Folgende Benutzer bedankten sich beim Autor PeterPaletti für den Beitrag:
Maggonski


Seite 1 von 1

Vergleichbare Themen

1
Antw.
1830
Views
Web Dynpro Tabelle aktualisieren
von Dyrdek » 18.08.2014 10:36 • Verfasst in Web-Dynpro, BSP + BHTML
10
Antw.
5689
Views
Ausgabefeld auf Dynpro ohne PBO aktualisieren
von kkauerau » 30.01.2018 09:26 • Verfasst in ABAP® für Anfänger
9
Antw.
2605
Views
Durch Zeilenmarkierung Dynpro TC zweites TC aktualisieren
von Michi83 » 04.03.2013 10:13 • Verfasst in ABAP® für Anfänger
1
Antw.
3522
Views
Ausgabefeld auf Dynpro per Event ohne PBO aktualisieren?
von RIG » 16.04.2014 13:33 • Verfasst in ABAP® für Anfänger
1
Antw.
1800
Views
Dynpro Table Control aktualisieren nach Eingabe
von Michi83 » 25.02.2013 10:21 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 5 Stunden von DeathAndPain gelöst 22 / 2800
Daten an Tabelle binden
vor 10 Stunden von Lukas Sanders 2 / 876
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 430

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

Dialog-Container mit Toolbar/Status
vor 5 Stunden von DeathAndPain gelöst 22 / 2800
Daten an Tabelle binden
vor 10 Stunden von Lukas Sanders 2 / 876
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 430

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2467
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9050