Dynamischer Strukturzugriff mit Field Symbols

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

Dynamischer Strukturzugriff mit Field Symbols

Beitrag von Abaphalbsocke (ForumUser / 42 / 18 / 0 ) » 17. Mai 2018 13:01

Hallo abap Community!
das suchen mit Google hat mir nicht weitergeholfen darum versuche ich es mal hier!

Ich möchte hier gerade auf die Komponente einer eigenen DDIC Struktur zugreifen, aber nicht hardkodiert sondern über usereingabe im dynpro.

Ich habe diese beiden strukturen mit einer gleichen komponente:
die cv variablen sind changing Parameter für mein fuba.

cv_station_inv = station_struc1-treibstoff
cv_spieler_inv = player_struc-treibstoff.


Dann habe ich noch ein eingabefeld im dynpro mit der variablen lv_name.
Nun möchte ich dass diese eingabe genommen wird um die beiden CV variablen zuzuweisen.

Also wenn der user Treibstoff eingibt, soll dann mit treibstoff gearbeitet werden im code.

Statt das:
cv_station_inv = station_struc1-treibstoff
cv_spieler_inv = player_struc-treibstoff.


Soll dann sowas wie das da stehen:

cv_station_inv = station_struc1-lv_name
cv_spieler_inv = player_struc-lv_name.

Damit man verschiedene gueter handeln kann indem man nur die namen dieser güter eingibt..

Ist sowas möglich? Im internet hab ich nix hilfreiches gefunden.


Re: Dynamischer Strukturzugriff mit Field Symbols

Beitrag von lausek (ForumUser / 64 / 2 / 20 ) » 17. Mai 2018 13:09

Code: Alles auswählen.

DATA lv_name TYPE string VALUE 'TREIBSTOFF'.

ASSIGN COMPONENT lv_name OF STRUCTURE station_struc1 TO FIELD-SYMBOL(<lfs_sstruc1>).
IF sy-subrc = 0.
  " komponente gefunden
ENDIF.
Das Gleiche dann noch mit

Code: Alles auswählen.

player_struc
und du hast zwei Feldsymbole mit den jeweiligen Werten.

Folgende Benutzer bedankten sich beim Autor lausek für den Beitrag:
Abaphalbsocke


Re: Dynamischer Strukturzugriff mit Field Symbols

Beitrag von Abaphalbsocke (ForumUser / 42 / 18 / 0 ) » 17. Mai 2018 13:23

Danke für diese Schnelle antwort, aber nun bin ich noch verwirrter:
wofür steht denn das <lfs_sstruc1>?

Ich verstehe nicht wie ich das einbauen und dann verwenden muss... :/

Code: Alles auswählen.

  CASE sy-ucomm.
    WHEN 'BACK' OR 'EXIT' OR 'CNCL'.
      LEAVE PROGRAM.

    WHEN 'FCT_BUY'.

      CALL FUNCTION 'ZCB_HANDELSMODUL'
        EXPORTING
          iv_preis           = ls_gueter-preis
          iv_menge           = lv_menge
        CHANGING
          cv_credits         = player_struc-credits
          cv_station_inv     = station_struc1-treibstoff
          cv_spieler_inv     = player_struc-treibstoff
          cv_station_credits = station_struc1-credits.

    WHEN 'FCT_BACK'.
      CALL SCREEN 0100.
  ENDCASE.
ENDMODULE.

Re: Dynamischer Strukturzugriff mit Field Symbols

Beitrag von lausek (ForumUser / 64 / 2 / 20 ) » 17. Mai 2018 13:26

Feldsymbole sind Referenzen auf andere Felder. ASSIGN COMPONENT sucht sich die Strukturkomponente mit dem passenden Namen und sagt dem angegebenen Feldsymbol, dass es jetzt so tun soll, als ob es dieses Feld ist.

Welchen Datentyp haben cv_station_inv und cv_spielver_inc in deinem Funktionsbaustein?

Folgende Benutzer bedankten sich beim Autor lausek für den Beitrag:
Abaphalbsocke


Re: Dynamischer Strukturzugriff mit Field Symbols

Beitrag von Abaphalbsocke (ForumUser / 42 / 18 / 0 ) » 17. Mai 2018 13:32

Ganz simpel DEC 4

Re: Dynamischer Strukturzugriff mit Field Symbols

Beitrag von lausek (ForumUser / 64 / 2 / 20 ) » 17. Mai 2018 13:35

Solange alle anderen Strukturkomponenten den gleichen Typ haben, sollte es keine Probleme geben. Die zugewiesenen Feldsymbole können dann an die Aufrufstelle des Funktionsbausteins anstelle der "Treibstoff"-Felder.

Folgende Benutzer bedankten sich beim Autor lausek für den Beitrag:
Abaphalbsocke


Re: Dynamischer Strukturzugriff mit Field Symbols

Beitrag von Abaphalbsocke (ForumUser / 42 / 18 / 0 ) » 17. Mai 2018 14:13

hm.. sorry aber die Verwirrtheit hat nicht abgenommen.

ASSIGN COMPONENT lv_name OF STRUCTURE station_struc1 TO FIELD-SYMBOL(<lfs_sstruc1>).
ich sage hier also jetzt dass lv_name so tun soll als wäre es eine Komponente von der Struktur Station_struc1?



und was ich mit lfs_sstruc1 machen soll weis ich auch noch immer nicht...

Re: Dynamischer Strukturzugriff mit Field Symbols

Beitrag von lausek (ForumUser / 64 / 2 / 20 ) » 17. Mai 2018 14:39

lv_name enthält das, was dein Nutzer auf dem Dynpro eingibt. Also 'Treibstoff' als Zeichenkette. ASSIGN COMPONENT sieht sich dann die Felder von station_struc1 an und schaut ob es da ein Feld gibt, was so heißt. Wenn es eines gibt, wird <lfs_sstruc1> zugewiesen und enthält den Wert von station_struc1-treibstoff.

Das heißt, dass du überall dort wo jetzt station_struc1-treibstoff steht einfach <lfs_sstruc1> hinschreiben kannst. Sollte der Nutzer sich dann entscheiden, statt Treibstoff lieber mit Birnen zu handeln, ist das das gleiche Spiel. Dieses mal wird <lfs_sstruc1> allerdings zu station_struc1-birnen und enthält deren Werte.

Folgende Benutzer bedankten sich beim Autor lausek für den Beitrag:
Abaphalbsocke


Re: Dynamischer Strukturzugriff mit Field Symbols

Beitrag von Abaphalbsocke (ForumUser / 42 / 18 / 0 ) » 17. Mai 2018 15:07

Okay, so langsam lösen sich die Knoten im Gehirn, danke für die Ausformulierung für Dummys. Jedoch bekomme ich diverse Fehlermeldungen:
Wenn ich <lfs_sstruc1> über doppelklick anlege, verschwindet die Fehlermeldung mit <lfs_sstruc1> aber die Fehlermeldung mit "FIELD-SYMBOL(<lfs_sstruc1>) bleibt bestehen, bzw inkrementiert nur die Zeile von 120 auf 121. Zeile 120 ist übrigens leer, und auf 121 steht das Assign component

Code: Alles auswählen.

ASSIGN COMPONENT lv_name OF STRUCTURE station_struc1 TO FIELD-SYMBOL(<lfs_sstruc1>).

  CASE sy-ucomm.
    WHEN 'BACK' OR 'EXIT' OR 'CNCL'.
      LEAVE PROGRAM.

    WHEN 'FCT_BUY'.

      CALL FUNCTION 'ZCB_HANDELSMODUL'
        EXPORTING
          iv_preis           = ls_gueter-preis
          iv_menge           = lv_menge
        CHANGING
          cv_player_credits  = player_struc-credits
          cv_station_inv     = <lfs_sstruc1>
          cv_spieler_inv     = <lfs_sstruc1>
          cv_station_credits = station_struc1-credits.

    WHEN 'FCT_BACK'.
      CALL SCREEN 0100.
  ENDCASE.
ENDMODULE.   

Re: Dynamischer Strukturzugriff mit Field Symbols

Beitrag von lausek (ForumUser / 64 / 2 / 20 ) » 17. Mai 2018 15:10

Scheinbar hast du noch eine ältere NetWeaver-Version. Dann kommst du leider nicht in die Convenience-Features von ABAP 7.5... :D

Das Problem kannst du allerdings lösen, indem du dein Feldsymbol einfach wie eine Variable oben in deiner Routine anlegst.

Code: Alles auswählen.

FIELD-SYMBOLS <lfs_sstruc1> TYPE zcb_menge.
Zuletzt geändert von lausek am 17. Mai 2018 15:27, insgesamt 1-mal geändert.

Folgende Benutzer bedankten sich beim Autor lausek für den Beitrag:
Abaphalbsocke


Re: Dynamischer Strukturzugriff mit Field Symbols

Beitrag von Abaphalbsocke (ForumUser / 42 / 18 / 0 ) » 17. Mai 2018 15:23

So tat ich:
Sidenote: In meiner Version muss es statt Field-Symbol Field-SymbolS mit S heißen.
VERDAMMTE AXT

Re: Dynamischer Strukturzugriff mit Field Symbols

Beitrag von lausek (ForumUser / 64 / 2 / 20 ) » 17. Mai 2018 15:29

Stimmt, mein Fehler. Das kommt davon wenn man nicht alles nochmal in der SE38 eintippt :?

Re: Dynamischer Strukturzugriff mit Field Symbols

Beitrag von schick (ForumUser / 28 / 3 / 5 ) » 17. Mai 2018 15:42

Wenn du das Feld-Symbol schon definiert hast musst du anschließend mit

Code: Alles auswählen.

ASSIGN COMPONENT lv_name OF STRUCTURE station_struc1 TO <lfs_sstruc1>.
statt

Code: Alles auswählen.

ASSIGN COMPONENT lv_name OF STRUCTURE station_struc1 TO FIELD-SYMBOL(<lfs_sstruc1>).
weiter machen.

Folgende Benutzer bedankten sich beim Autor schick für den Beitrag:
Abaphalbsocke


Re: Dynamischer Strukturzugriff mit Field Symbols

Beitrag von ewx (Top Expert / 3917 / 159 / 348 ) » 17. Mai 2018 15:47

Und wenn du das Ganze dann wieder vereinfachst, wird es auch wieder verständlicher:

Code: Alles auswählen.

ASSIGN COMPONENT 'TREIBSTOFF' OF STRUCTURE station_struc1 TO FIELD-SYMBOL(<lv_treibstoff_01>).

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
Abaphalbsocke


Re: Dynamischer Strukturzugriff mit Field Symbols

Beitrag von Abaphalbsocke (ForumUser / 42 / 18 / 0 ) » 17. Mai 2018 17:05

Vielen vielen Dank, nun funktioniert der Kot auch wieder ohne murren, aber ich bin noch nicht fertig xD
Ich möchte ja erreichen dass je nach eingabe des users:
1. Die entsprechende Strukturkomponente angesprochen wird
2. Mein Dynpro je nach eingabe eben auch die Menge der angesprochenen Komponente ausgibt

Bei Item gebe ich den Namen der Komponente ein.

Einfach den Feldnamen im Dynpro ändern funktioniert nicht, weil er dann versucht mehrfach das gleiche zu deklarieren. Evtl Platzhalter einbauen und die dynamisch zuweisen wie eben schon?

Code: Alles auswählen.

  ASSIGN COMPONENT lv_name OF STRUCTURE station_struc1 TO <lfs_sstruc1>.
  ASSIGN COMPONENT lv_name OF STRUCTURE player_struc TO <lfs_sstruc2>.

  CASE sy-ucomm.
    WHEN 'BACK' OR 'EXIT' OR 'CNCL'.
      LEAVE PROGRAM.

    WHEN 'FCT_BUY'.
      CALL FUNCTION 'ZCB_HANDELSMODUL'
        EXPORTING
          iv_preis           = ls_gueter-preis
          iv_menge           = lv_menge
        CHANGING
          cv_player_credits  = player_struc-credits
          cv_station_inv     = <lfs_sstruc1>
          cv_spieler_inv     = <lfs_sstruc2>
          cv_station_credits = station_struc1-credits.

    WHEN 'FCT_BACK'.
      CALL SCREEN 0100.
  ENDCASE.
ENDMODULE.

Seite 1 von 2 (current) Nächste

Aktuelle Forenbeiträge

Kreditlimitprüfung Obligo
vor 2 Tagen von wreichelt 2 / 89
Business Partner Konzept
vor 2 Tagen von SAP_ENTWICKLER 1 / 135
Fortführen der Schleife
vor 2 Tagen von ichse18577 2 / 119
Verursachervormerkung OCM manuell anlegen
vor 3 Tagen von Aba 1 / 98

Unbeantwortete Forenbeiträge

Business Partner Konzept
vor 2 Tagen von SAP_ENTWICKLER 1 / 135
Verursachervormerkung OCM manuell anlegen
vor 3 Tagen von Aba 1 / 98
Auflösen MILL_OC - Auftragszusammenfassung
vor einer Woche von tofralu 1 / 97
Löschen von archivierten Drucklisten
vor einer Woche von Asaph 1 / 87