Referenz auf lokale Klasse -> Methode nicht bekannt

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

Referenz auf lokale Klasse -> Methode nicht bekannt

Beitrag von ChrisB85 (ForumUser / 6 / 0 / 0 ) »
Hi Leute,

nachdem ich mit der Hilfe nicht fündig geworden bin, frag ich einfach mal direkt nach. :D

Also:
Ich habe eine lokale Klasse als Porgramm angelegt (lc_Backup).
Zudem habe ich eine Funktionsgruppe mit einem FuBa zum Aufruf, Dynpors, einer Klasse für die Oberfläche etc.

Nun rufe ich über eine Tansaktion die Methode "start" der lokalen Klasse lc_backup auf. Diese erzeugt von der Klasse ein Objekt und ruft im Anschluss den FuBa der Funktionsgruppe für die Oberfläche auf. Als Importparameter hat er "P_REF_OBJECT TYPE REF TO OBJECT".
Ich will dem FuBa und somit der Funktionsgruppe eine Referenz zu dem in der Methode Start erstellten Object übergeben.
Nun sollte nach bestimmten Kriterien der Oberfläche die Methode "Backup" aufgerufen werden.

FuBa
ref_object = p_ref_object

ref_object ist im Top-Inlcude ebenfalls mit
"REF_OBJECT TYPE REF TO OBJECT"
da ich nicht die Klasse angeben kann, weil sie lokal ist und er sie nicht findet.

MODULE execute INPUT.
ref_object->backup

Nun wird mir hier aber ein Fehler ausgeworfen, weil er die Methode nicht kennt, bzw. sie Private oder protected ist. Sie ist aber Public.

Mit dem Debugger hab ich bereits gesehen, dass er die Refernz ohne Probleme übergibt, aber mir ist es nicht möglich die Methode aufzurufen :(
Kann ich der Funktionsgruppe irgendwie sagen das es eine lokale Klasse ist und er die Refernz bekommt und somit dann die Methode aufrufen soll?

Vielen Dank im vorraus

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


Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo ChrisB85,

sofern deine Klasse nicht Bestandteil deiner Funktiongruppe oder global im ClassBuilder vorhanden ist, kannst Du Instanzen nicht an andere 'Programme/Funktionsgruppen' übergeben.

SAP macht hier einen Unterschied zwischen globalen und lokalen Klassen, da es für lokale Klassen keine DDIC-Informationen gibt.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von ChrisB85 (ForumUser / 6 / 0 / 0 ) »
oke, danke für die Antwort, hatte sowas schon befürchtet :(

Wie wäre es denn nun am sinnvollsten die Klasse unterzubringen?
Die Klasse ist an sich zu uninteressant und speziell auf eine Problem ausgerichtet, weswegen ich sie nicht unbedingt global bekannt machen will, um das DDIC nicht zuzumüllen.
Wenn ich Sie in die Funktionsgruppe mit integriere, dann kommt mir das ganze gemäß der Seperation of Concerns nicht ganz richtig vor. Da ich in der Funktionsgruppe eigentlich nur Oberflächenbezogene Klassen etc. anlegen und die eigentlich Anwendungslogik entweder in einem Programm oder über den Class-Builder realisieren wollte.
Oder soll ich die Klasse nun einfach lokal belassen und die Schnittstellenparamter ändern?
Sprich ich ruf nicht mehr direkt aus der Oberfläche (im PAI-Modul) mein benötigtes Objekt auf, sondern gebe immer über den FuBa die relevanten Daten zurück?

Irgendwie ist mir das noch nicht so ganz klar :(

Beitrag von Flo (Specialist / 161 / 0 / 0 ) »
Hallo,

also bei mir in 4.6C kann ich lokale Klassen instanzieren und diese Instanz an einen Funktionsbausteine übergeben. Ich kann auch Methoden der Isntanz dynamisch aufrufen (man muss halt den Namen wissen) und es funktioniert soweit.
BSP Code hängt an:

Code: Alles auswählen.

CLASS lcl_test DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS: start.
    METHODS: test.
ENDCLASS.

call method lcl_test=>start( ).

CLASS lcl_test IMPLEMENTATION.
  METHOD start.
    DATA class TYPE REF TO lcl_test.
    CREATE OBJECT class.
    CALL FUNCTION 'TEST_CLASS''
         EXPORTING
              im_value = class.
  ENDMETHOD.
  METHOD test.
    WRITE 'Hui'.
  ENDMETHOD.
ENDCLASS.
Im Funktionsbaustein steht nur:
CALL METHOD im_value->('TEST').

Ergebnis des Reports ist dann 'Hui'.
Man kann auch im Funktionsbaustein über
obj = cl_abap_typedescr=>describe_by_object_ref( im_value ).
den Laufzeittyp des Objektes bestimmen. In einem der Tabellenparameter erhält man dann auch die Methodennamen der Objektinstanz.

Gruß,
Flo

Beitrag von ChrisB85 (ForumUser / 6 / 0 / 0 ) »
hi Flo,

das hat super funktioniert und ist genau das was ich wollte. :)
Vielen Dank, dachte schon ich muss nun alles vom Code her umschmeissen und neu gestalten. :shock:

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
:shock:
hm, ich sollte mich mal ein wenig mit dynamischen ABAP OO beschäfftigen... :oops:

@ChrisB85,
sorry, daran hatte ich überhaupt nicht gedacht... :?
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Flo (Specialist / 161 / 0 / 0 ) »
In diesem Fall würde ich ja eher die Klasse global im Dictionary anlegen, da ich dann auf die dynamische Programmierung verzichten könnte (Zumindest im Kommentar sollte ich sehr deutlich beschreiben warum ich hier dynamisch etwas aufrufe und wo die Klasse definiert ist). Wenn man aber lokale Klassen benutzen muß, kann man auf diese Weise auch Instanzen übergeben.

Gruß,
Flo

Seite 1 von 1

Vergleichbare Themen

1
Antw.
2470
Views
Lokale Klasse autom. in globale Klasse ändern
von JohnLocklay » 09.01.2019 09:10 • Verfasst in ABAP Objects®
6
Antw.
3751
Views
Lokale Klasse importieren
von ewx » 16.04.2013 19:33 • Verfasst in ABAP Objects®
1
Antw.
1474
Views
Referenz auf eine Klasse
von A6272 » 09.05.2019 14:11 • Verfasst in ABAP Objects®
10
Antw.
2941
Views
Lokale Klasse in zwei Dynpros
von Aba » 15.02.2018 16:43 • Verfasst in ABAP® für Anfänger
12
Antw.
7682
Views
Lokale Klassendefinition in globaler Klasse
von ewx » 23.11.2017 21:52 • Verfasst in ABAP Objects®

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 7 Stunden von DeathAndPain gelöst 22 / 2908
Daten an Tabelle binden
vor 12 Stunden von Lukas Sanders 2 / 927
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 495

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 7 Stunden von DeathAndPain gelöst 22 / 2908
Daten an Tabelle binden
vor 12 Stunden von Lukas Sanders 2 / 927
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 495

Unbeantwortete Forenbeiträge

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