Dynamische Programmierung

Getting started ... Alles für einen gelungenen Start.
38 Beiträge • Seite 1 von 3 (current) Nächste
38 Beiträge Seite 1 von 3 (current) Nächste

Dynamische Programmierung

Beitrag von ZF_SAPler (Specialist / 100 / 14 / 2 ) »
Hallo,

ich habe ein generisches Attribut erstellt in einer Klasse: mt_output type ref to data.

Code: Alles auswählen.

"Methode A:
Select ..........

...
..
INTO TABLE @DATA(lt_result).

GET REFERENCE OF lt_result INTO mt_output.   " die Tabelle zeigt jetzt in die Datenreferenz und die Datenreferenz ist ja als Attreibut gespeichert
Wie bekomme ich in Methode B jetzt die Daten von mt_output?
Mit

Code: Alles auswählen.

"Methode B:
    FIELD-SYMBOLS: <ft_result> TYPE STANDARD TABLE.
    ASSIGN mt_result->* TO <ft_result>.
funktioniert es leider nicht. Die Daten sind nicht im Feldsymbol.

Das Feldsymbol würde ich dann in der Methode B ausgeben. Dump, weil das Feldsymbol nicht zugewiesen ist, die Datenreferenz ist auch leer!


----------------------------------------------------------------------------------

Wenn ich alles in Methode A lasse, funktioniert es

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


Re: Dynamische Programmierung

Beitrag von LeMinion (ForumUser / 20 / 1 / 6 ) »
Hast Du Dich hier einfach verschrieben? Im zweiten Teil schreibst Du

Code: Alles auswählen.

ASSIGN mt_result->* TO <ft_result>.
Müßte das nicht so heißen?

Code: Alles auswählen.

ASSIGN mt_output->* TO <ft_result>.

Re: Dynamische Programmierung

Beitrag von ZF_SAPler (Specialist / 100 / 14 / 2 ) »
LeMinion hat geschrieben:
16.09.2022 15:05
Hast Du Dich hier einfach verschrieben? Im zweiten Teil schreibst Du

Code: Alles auswählen.

ASSIGN mt_result->* TO <ft_result>.
Müßte das nicht so heißen?

Code: Alles auswählen.

ASSIGN mt_output->* TO <ft_result>.
Hallo,
ich habe nur hier im Forum mich verschrieben. wurde verbessert. Hat aber leider damit nichts zu tun.

Re: Dynamische Programmierung

Beitrag von ZF_SAPler (Specialist / 100 / 14 / 2 ) »
ZF_SAPler hat geschrieben:
16.09.2022 14:57
Hallo,

ich habe ein generisches Attribut erstellt in einer Klasse: mt_output type ref to data.

Code: Alles auswählen.

"Methode A:
Select ..........

...
..
INTO TABLE @DATA(lt_result).

GET REFERENCE OF lt_result INTO mt_output.   " die Tabelle zeigt jetzt in die Datenreferenz und die Datenreferenz ist ja als Attreibut gespeichert
Wie bekomme ich in Methode B jetzt die Daten von mt_output?
Mit

Code: Alles auswählen.

"Methode B:
    FIELD-SYMBOLS: <ft_result> TYPE STANDARD TABLE.
    ASSIGN mt_output->* TO <ft_result>.
funktioniert es leider nicht. Die Daten sind nicht im Feldsymbol.

Das Feldsymbol würde ich dann in der Methode B ausgeben. Dump, weil das Feldsymbol nicht zugewiesen ist, die Datenreferenz ist auch leer!


----------------------------------------------------------------------------------

Wenn ich alles in Methode A lasse, funktioniert es

Re: Dynamische Programmierung

Beitrag von ewx (Top Expert / 4854 / 313 / 644 ) »
lt_result darf keine lokale Variable sein!

Re: Dynamische Programmierung

Beitrag von ZF_SAPler (Specialist / 100 / 14 / 2 ) »
ewx hat geschrieben:
16.09.2022 15:52
lt_result darf keine lokale Variable sein!
Kann man das nicht so lösen?
Wieso sind die Daten in der Referenz ersichtlich in Methode A und Methode B nicht?

Re: Dynamische Programmierung

Beitrag von ewx (Top Expert / 4854 / 313 / 644 ) »
weil es eine lokale Variable ist. die gibt es nicht mehr, nachdem Methode A beendet wurde!

Re: Dynamische Programmierung

Beitrag von ZF_SAPler (Specialist / 100 / 14 / 2 ) »
ewx hat geschrieben:
16.09.2022 15:58
weil es eine lokale Variable ist. die gibt es nicht mehr, nachdem Methode A beendet wurde!
Weil Datenreferenz einer Zeiger ist und nicht wirklich die Daten enthält, richtig?

Gibt es eine andere Möglichkeit OHNE, dass ich jetzt ein Typ erstelle?
Mittels dynamische Programmierung?


Ich möchte einfach eine GLOBALE Tabelle in Attributen speichern können und diese wiederverwenden können.

Re: Dynamische Programmierung

Beitrag von nickname8 (Specialist / 134 / 17 / 19 ) »
klar:

Code: Alles auswählen.

"Methode A
INTO TABLE @DATA(lt_result).

 FIELD-SYMBOLS: <ft_result> TYPE STANDARD TABLE.
    ASSIGN mt_output->* TO <ft_result>.
<ft_result> = lt_result.

Code: Alles auswählen.

"Methode B
 FIELD-SYMBOLS: <ft_result> TYPE STANDARD TABLE.
    ASSIGN mt_output->* TO <ft_result>.

So ungefähr, hab grad kein SAP zum Testen da.

Re: Dynamische Programmierung

Beitrag von ZF_SAPler (Specialist / 100 / 14 / 2 ) »
nickname8 hat geschrieben:
16.09.2022 16:55
klar:

"Methode A
INTO TABLE @DATA(lt_result).

FIELD-SYMBOLS: <ft_result> TYPE STANDARD TABLE.
ASSIGN mt_output->* TO <ft_result>.
<ft_result> = lt_result.

"Methode B
FIELD-SYMBOLS: <ft_result> TYPE STANDARD TABLE.
ASSIGN mt_output->* TO <ft_result>.


So ungefähr, hab grad kein SAP zum Testen da.

Nein, so funktioniert es nicht :/

Re: Dynamische Programmierung

Beitrag von ewx (Top Expert / 4854 / 313 / 644 ) »
aber so:

Code: Alles auswählen.

CLASS main DEFINITION.
  PUBLIC SECTION.

    METHODS read.
    METHODS show.
    METHODS get_ref
      RETURNING
        VALUE(result) type REF TO data.

  PRIVATE SECTION.
    DATA datref TYPE REF TO data.

ENDCLASS.

CLASS main IMPLEMENTATION.
  METHOD read.

    SELECT * FROM t000 INTO TABLE @DATA(clients).

    FIELD-SYMBOLS: <data> TYPE STANDARD TABLE.
    CREATE DATA datref LIKE clients.
    ASSIGN datref->* TO <data>.
    <data> = clients.

  ENDMETHOD.

  method get_Ref.
    result = datref.
  ENDMETHOD.

  METHOD show.

    FIELD-SYMBOLS: <data> TYPE STANDARD TABLE.
    ASSIGN datref->* TO <data>.

    cl_demo_output=>display_data( name = 'Inside class' value = <data> ).
  ENDMETHOD.

ENDCLASS.


START-OF-SELECTION.

  DATA(appl) = NEW main( ).
  appl->read( ).
  appl->show( ).

  data(datref) = appl->get_ref( ).
  FIELD-SYMBOLS <tab> type ANY TABLE.
  ASSIGN datref->* to <tab>.

    cl_demo_output=>display_data( name = 'outside class' value = <tab> ).
danke nickname8 für den Denkanstoß! ich hatte schon wieder zu kompliziert gedacht...

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


Re: Dynamische Programmierung

Beitrag von ZF_SAPler (Specialist / 100 / 14 / 2 ) »
ewx hat geschrieben:
16.09.2022 17:17
aber so:

Code: Alles auswählen.

CLASS main DEFINITION.
  PUBLIC SECTION.

    METHODS read.
    METHODS show.
    METHODS get_ref
      RETURNING
        VALUE(result) type REF TO data.

  PRIVATE SECTION.
    DATA datref TYPE REF TO data.

ENDCLASS.

CLASS main IMPLEMENTATION.
  METHOD read.

    SELECT * FROM t000 INTO TABLE @DATA(clients).

    FIELD-SYMBOLS: <data> TYPE STANDARD TABLE.
    CREATE DATA datref LIKE clients.
    ASSIGN datref->* TO <data>.
    <data> = clients.

  ENDMETHOD.

  method get_Ref.
    result = datref.
  ENDMETHOD.

  METHOD show.

    FIELD-SYMBOLS: <data> TYPE STANDARD TABLE.
    ASSIGN datref->* TO <data>.

    cl_demo_output=>display_data( name = 'Inside class' value = <data> ).
  ENDMETHOD.

ENDCLASS.


START-OF-SELECTION.

  DATA(appl) = NEW main( ).
  appl->read( ).
  appl->show( ).

  data(datref) = appl->get_ref( ).
  FIELD-SYMBOLS <tab> type ANY TABLE.
  ASSIGN datref->* to <tab>.

    cl_demo_output=>display_data( name = 'outside class' value = <tab> ).
danke nickname8 für den Denkanstoß! ich hatte schon wieder zu kompliziert gedacht...
Danke!

ich habe davor mit get reference gearbeitet & jetzt mit create data funktionierts.
Wann verwende ich get reference und was create data?

Re: Dynamische Programmierung

Beitrag von ralf.wenzel (Top Expert / 3946 / 201 / 281 ) »
get reference setzt einen Zeiger einer bekannten Referenzvariablen so, dass sie auf ein bekanntes Datenobjekt zeigt. Das ist eine Zuweisung.

create data erzeugt ein neues Datenobjekt. Das ist also eine deklarative Anweisung.

Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Dynamische Programmierung

Beitrag von ZF_SAPler (Specialist / 100 / 14 / 2 ) »
Danke für die Hilfe.
Eine Sache habe ich noch..

Wenn ich jetzt das ALV anzeigen lasse und ein Doppelklick mache, dann bekomme ich ein Dump, weil die Datenreferenz intial ist und somit auch das Feldsymbol.

Anscheinend verliert er die Werte nach dem die Tabelle im Screen angezeigt wird.
Ich würde aber gerne die Daten noch in der Datenreferenz haben

Re: Dynamische Programmierung

Beitrag von a-dead-trousers (Top Expert / 4414 / 224 / 1186 ) »
Das könnte am grundsätzlichen Aufbau deines Programms liegen (z.B. einer mehrfachen Instanzierung des ALV Grids im Zuge von PAI/PBO oder am Verhalten von Reports beim Rücksprung in den Selection-Screen das Programm neu zu starten)

Da müsstest du uns mehr Infos zum Programablauf liefern. Eventuell auch den Quellcode posten.
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

Vergleichbare Themen

17
Antw.
7739
Views
SD-Programmierung: Was soll ich tun?
von ralf.wenzel » 25.04.2006 11:44 • Verfasst in ABAP® Core
2
Antw.
1091
Views
SAP Entwicklungssystem und RFC Programmierung
von sNud » 28.08.2021 13:36 • Verfasst in ABAP® für Anfänger
6
Antw.
1548
Views
Programmierung von SAP-Programm für API´s
von Bright4.5 » 12.12.2024 10:37 • Verfasst in ABAP® für Anfänger
1
Antw.
2263
Views
GUI Programmierung: Dynpro?
von fabis » 01.03.2012 20:35 • Verfasst in ABAP® für Anfänger
0
Antw.
1610
Views
Unicodevorgaben bei der Programmierung
von JürgenFFM » 07.11.2007 11:29 • Verfasst in Dialogprogrammierung

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.