Wert über Referenz abgrasen

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Wert über Referenz abgrasen

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
Liebes Forum,

einfache Sache, aber noch nicht für mich:

Folgendes Coding dienst als Grundlage, alle Referenzen sind nicht initial.

Code: Alles auswählen.

loop at lt_cordpos ASSIGNING <lr_cordpos>.

  CALL METHOD <lr_cordpos>->GET_DATA
    EXPORTING
      I_FILL_PREREG  = OFF
    IMPORTING
      E_ENVIRONMENT  = lr_environment
    CHANGING
      C_ERRORHANDLER = cr_errorhandler.

  CALL METHOD lr_environment->GET_DATA
    IMPORTING
      E_RC           = e_rc
      ET_OBJECTLIST  = lt_objectlist
    CHANGING
      C_ERRORHANDLER = cr_errorhandler.

ENDLOOP.
Das LT_OBJECTLIST liefert mir folgende Referenzen:

Bild

Ich möchte nun an den Eintrag ZCL_KLATGEWICHT_DATA heran, um dort das Attribut GS_DATA samt Inhalt abzusaugen:

Bild

Bild

Welches Coding würde das realisieren?

VD + VG
sapdepp

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


Re: Wert über Referenz abgrasen

Beitrag von jensschladitz (Specialist / 417 / 0 / 56 ) »
Sali,

also da das Attribut in der Ansicht rot dargestellt ist - kannst du es nur mit einer methode der Klasse ermitteln - daher schau nach, welche Methoden die Klasse ZCL_KLATGEWICHT_DATA hat.
Du kommst an die Referencen indem du über die Tabelle LT_OBJECTLIST einen Loop machst und dann das Feld Object auf eine global oder Lokal definierte Referencvariable vom Type ZCL_KLATGEWICHT_DATA dereferenzierst
- sagen wir mal so

data ref_klatgewicht_data type ref to zcl_klatgewicht_data.
data ref_objekctlist type ref to ... (hier die struktur einer Zeile der Tabelle LT_OBJECTLIST einstellen)

loop at lt_objectlist reference into ref_objectlist.
ref_klatgewicht_data ?= ref_objectlist->object.

Na und zu guter Letzt mit der entsprechenden Methode das Attribut ermitteln und weiter verarbeiten oder was immer du willst.

Gruss
thanks Jens

Re: Wert über Referenz abgrasen

Beitrag von a-dead-trousers (Top Expert / 4267 / 213 / 1140 ) »
TRY ... CATCH ... fehlt aber ansonsten stimme ich der lösung von jens zu.

Code: Alles auswählen.

data ref_klatgewicht_data type ref to zcl_klatgewicht_data.
data ref_objekctlist type ref to ish_OBJECTLIST.
loop at lt_objectlist reference into ref_objectlist.
  try.
    ref_klatgewicht_data ?= ref_objectlist->object.
* hier was machen
  catch cx_root.
  endtry.
endloop.
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: Wert über Referenz abgrasen

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
Vielen Dank euch beiden.

Der Compiler schimpft nun, dass hier Typinkonsistenzen bestehen:

Code: Alles auswählen.

DATA: lt_objectlist       TYPE ish_objectlist,
      lr_objectlist       TYPE REF TO ish_objectlist,
      lr_klatgewicht_data TYPE REF TO zcl_klatgewicht_data.

LOOP AT lt_objectlist REFERENCE INTO lr_objectlist.
  TRY.
      lr_klatgewicht_data ?= lr_objectlist->object.

    CATCH cx_root.
  ENDTRY.
ENDLOOP.
Bild

Geht da noch was?

Besten Dank!

Re: Wert über Referenz abgrasen

Beitrag von jensschladitz (Specialist / 417 / 0 / 56 ) »
Sali,

sagt dioch die Fehlermeldung - du hast eine reference auf die Tabelle und nicht auf eine Zeile der Tabelle angelegt mit Lr_objectlist.
schau dir an wie die Tabelle LT_objectlist definiert ist -> hier das Objekt -> ISH_Objectlist und diesen Type Structur dann für dein LR_Objectlist für die Refernce Variable benutzen
Die Tabelle hat eine Struktur - doppelklick auf ISH_objectlist und dann schauen welcher Typ darunter liegt - diesen dann für LR_objectlist

Gruss
thanks Jens

Re: Wert über Referenz abgrasen

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
Sorry, ja, stimmt. Der Syntax-Error ist nun (natürlich) weg.

Das nächste Problem liegt beim Cast. Der funktioniert nicht (CX_SY_MOVE_CAST_ERROR). Gibt es da noch eine andere Möglichkeit, an das Attribut GS_DATA von ZCL_KLATGEWICHT_DATA heranzukommen?

Vielen Dank.

sapdepp

Re: Wert über Referenz abgrasen

Beitrag von a-dead-trousers (Top Expert / 4267 / 213 / 1140 ) »
Der CX_SY_MOVE_CAST_ERROR ist doch genau was wir hier bezwecken wollen. Alle Objekte in der objectlist die NICHT vom gesuchten Typ sind werden damit ausgefiltert.

Code: Alles auswählen.

LOOP AT lt_objectlist REFERENCE INTO lr_objectlist.
  TRY.
      lr_klatgewicht_data ?= lr_objectlist->object.
* HIER kannst du auf lr_klatgewicht_data->get_data( ) abfragen.
    CATCH cx_root.
  ENDTRY.
ENDLOOP.
lg ADT
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: Wert über Referenz abgrasen

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
Aha, na wie gesagt, sapdepp. Beim Casting sowieso. :P

Nun funktioniert es prächtig.

Code: Alles auswählen.

LOOP AT lt_objectlist REFERENCE INTO lr_objectlist.
  TRY.
      lr_klatgewicht_data ?= lr_objectlist->object.
      lr_klatgewicht_data->get_data( IMPORTING es_data = ls_data ).

    CATCH cx_root.

  ENDTRY.
ENDLOOP.
Vielen Dank für eure Hilfe!

Seite 1 von 1

Vergleichbare Themen

3
Antw.
3092
Views
Referenz-Tabelle UND Referenz-Feld f.BRGEW und NTGEW
von bohne » 22.02.2007 10:52 • Verfasst in ABAP® für Anfänger
4
Antw.
3557
Views
dynamische Struktur abgrasen
von sapdepp » 27.06.2016 12:24 • Verfasst in ABAP Objects®
2
Antw.
6060
Views
Referenz-Tabelle und Referenz-Feld
von dyv » 28.08.2014 15:25 • Verfasst in ABAP® für Anfänger
2
Antw.
2220
Views
Dynamische Referenz
von sapnup » 24.10.2016 13:07 • Verfasst in ABAP® für Anfänger
2
Antw.
1596
Views
Referenz auf eingebauten Typ (per FB)
von gs3rr4 » 30.08.2016 17:27 • Verfasst in ABAP® Core

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

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.