gelöst Dynamischer Strukturzugriff mit Field Symbols


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

Moderatoren: Jan, Steff

gelöst Dynamischer Strukturzugriff mit Field Symbols

Beitragvon Abaphalbsocke » 17.05.2018, 12: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.
Abaphalbsocke
ForumUser
 
Beiträge: 42
Registriert: 27.04.2018, 14:57
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Sponsor

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

Re: Dynamischer Strukturzugriff mit Field Symbols

Beitragvon lausek » 17.05.2018, 12: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.

Für diese Nachricht hat lausek einen Dank bekommen :
Abaphalbsocke
lausek
ForumUser
 
Beiträge: 60
Registriert: 23.03.2017, 07:54
Dank erhalten: 19 mal
Ich bin: Student/in

Re: Dynamischer Strukturzugriff mit Field Symbols

Beitragvon Abaphalbsocke » 17.05.2018, 12: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.
Abaphalbsocke
ForumUser
 
Beiträge: 42
Registriert: 27.04.2018, 14:57
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Dynamischer Strukturzugriff mit Field Symbols

Beitragvon lausek » 17.05.2018, 12: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?

Für diese Nachricht hat lausek einen Dank bekommen :
Abaphalbsocke
lausek
ForumUser
 
Beiträge: 60
Registriert: 23.03.2017, 07:54
Dank erhalten: 19 mal
Ich bin: Student/in

Re: Dynamischer Strukturzugriff mit Field Symbols

Beitragvon Abaphalbsocke » 17.05.2018, 12:32

Ganz simpel DEC 4
Abaphalbsocke
ForumUser
 
Beiträge: 42
Registriert: 27.04.2018, 14:57
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Dynamischer Strukturzugriff mit Field Symbols

Beitragvon lausek » 17.05.2018, 12: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.

Für diese Nachricht hat lausek einen Dank bekommen :
Abaphalbsocke
lausek
ForumUser
 
Beiträge: 60
Registriert: 23.03.2017, 07:54
Dank erhalten: 19 mal
Ich bin: Student/in

Re: Dynamischer Strukturzugriff mit Field Symbols

Beitragvon Abaphalbsocke » 17.05.2018, 13: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...
Abaphalbsocke
ForumUser
 
Beiträge: 42
Registriert: 27.04.2018, 14:57
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Dynamischer Strukturzugriff mit Field Symbols

Beitragvon lausek » 17.05.2018, 13: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.

Für diese Nachricht hat lausek einen Dank bekommen :
Abaphalbsocke
lausek
ForumUser
 
Beiträge: 60
Registriert: 23.03.2017, 07:54
Dank erhalten: 19 mal
Ich bin: Student/in

Re: Dynamischer Strukturzugriff mit Field Symbols

Beitragvon Abaphalbsocke » 17.05.2018, 14: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.  
Abaphalbsocke
ForumUser
 
Beiträge: 42
Registriert: 27.04.2018, 14:57
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Dynamischer Strukturzugriff mit Field Symbols

Beitragvon lausek » 17.05.2018, 14: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.05.2018, 14:27, insgesamt 1-mal geändert.

Für diese Nachricht hat lausek einen Dank bekommen :
Abaphalbsocke
lausek
ForumUser
 
Beiträge: 60
Registriert: 23.03.2017, 07:54
Dank erhalten: 19 mal
Ich bin: Student/in

Re: Dynamischer Strukturzugriff mit Field Symbols

Beitragvon Abaphalbsocke » 17.05.2018, 14:23

So tat ich:
Sidenote: In meiner Version muss es statt Field-Symbol Field-SymbolS mit S heißen.
VERDAMMTE AXT
Abaphalbsocke
ForumUser
 
Beiträge: 42
Registriert: 27.04.2018, 14:57
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Dynamischer Strukturzugriff mit Field Symbols

Beitragvon lausek » 17.05.2018, 14:29

Stimmt, mein Fehler. Das kommt davon wenn man nicht alles nochmal in der SE38 eintippt :?
lausek
ForumUser
 
Beiträge: 60
Registriert: 23.03.2017, 07:54
Dank erhalten: 19 mal
Ich bin: Student/in

Re: Dynamischer Strukturzugriff mit Field Symbols

Beitragvon schick » 17.05.2018, 14: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.

Für diese Nachricht hat schick einen Dank bekommen :
Abaphalbsocke
schick
ForumUser
 
Beiträge: 17
Registriert: 16.02.2018, 08:22
Dank erhalten: 2 mal
Ich bin: Berater/in

Re: Dynamischer Strukturzugriff mit Field Symbols

Beitragvon ewx » 17.05.2018, 14: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>).

Für diese Nachricht hat ewx einen Dank bekommen :
Abaphalbsocke
ewx
Top Expert
 
Beiträge: 3707
Registriert: 04.08.2003, 19:55
Wohnort: Schleswig-Holstein
Dank erhalten: 282 mal

Re: Dynamischer Strukturzugriff mit Field Symbols

Beitragvon Abaphalbsocke » 17.05.2018, 16: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.
Abaphalbsocke
ForumUser
 
Beiträge: 42
Registriert: 27.04.2018, 14:57
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Nächste

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

  Aktuelle Beiträge   
gelöst Nachricht nach Beendigung der Verbuchung
vor 2 Stunden von ewx 2 Antw.
BCS sendet Mails immer als express?
vor 3 Stunden von Legxis 2 Antw.
Zuordnung in Grid (Screen)
vor 7 Stunden von HH_ABAP 0 Antw.
FBL3N ---> FB60
vor 8 Stunden von HH_ABAP 2 Antw.
Klasse zum lesen der Adressdaten
vor 7 Stunden von AdrianSchm 2 Antw.

  Ähnliche Beiträge beta
field symbols
20.10.2006, 16:01 von zzcpak 7 Antw.
FIELD-SYMBOLS
18.08.2008, 10:29 von GastX 10 Antw.
Field-Symbols
23.08.2012, 16:05 von ralf.wenzel 13 Antw.
Field Symbols
15.07.2014, 12:57 von a-dead-trousers 13 Antw.
field-symbols definierung
13.07.2005, 12:40 von babap 7 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder