Dynamischer Methodenaufruf

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).

Dynamischer Methodenaufruf

Postby Neo2677 » Fri Sep 30, 2011 3:32 pm

Hallo zusammen,

ich möchte in meinem Coding gerne die Möglichkeit nutzen, eine Objektmethode dynamisch aufzurufen. Mein Quelltext sieht folgendermaßen aus:

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.       go_re_object       TYPE REF TO            if_reca_bus_object,
  2.       go_be                  TYPE REF TO            if_rebd_business_entity,
  3.       go_optrate_mngr TYPE REF TO            if_reit_option_rate_mngr.
  4.  
  5.  
  6. *   Immobilienobjekt erzeugen (unabhängig vom Typ)
  7.     CALL METHOD cf_reca_bus_object=>find_by_imkey
  8.       EXPORTING
  9.         id_imkey    = i_postab-imkey
  10.       RECEIVING
  11.         ro_instance = go_re_object.
  12.  
  13. *       dynamischer Methodenaufruf -> funktioniert so leider nicht ... erzeugt Kurzdump
  14.         CALL METHOD go_re_object->('IF_REIT_HAS_OPTION_RATE~GET_OPTION_RATE_MNGR')
  15.           RECEIVING
  16.             ro_option_rate_mngr = go_optrate_mngr.
  17.  
  18. *       Lösung, die funktioniert (Widening Cast)
  19.         go_be ?= go_re_object.
  20.  
  21. *       Optionssatzmanager lesen
  22.         CALL METHOD go_be->('IF_REIT_HAS_OPTION_RATE~GET_OPTION_RATE_MNGR')
  23.           RECEIVING
  24.             ro_option_rate_mngr = go_optrate_mngr.
GeSHi ©


Allerdings würde ich gerne die obere Variante mit dem Objekt go_re_object nutzen, da ich hier keine weiteren Objektvariablen wie bspw. go_be für eine Wirtschaftseinheit oder etwa go_ro für ein Mietobjekt definieren und den Methodenaufruf mehrfach im Quelltext unterbringen muss. Das Objekt go_re_object besitzt zur Laufzeit den Typ "cl_rebd_business_entity", genau wie das Objekt go_be nach dem Widening Cast.

Der Kurzdump, den ich erhalte, lautet: DYN_CALL_METH_NOT_FOUND, CX_SY_DYN_CALL_ILLEGAL_METHOD ("Es wurde versucht die Methode "IF_REIT_HAS_OPTION_RATE~GET_OPTION_RATE_MNGR"
der Klasse "CL_REBD_BUSINESS_ENTITY" aufzurufen.
In der Klasse "CL_REBD_BUSINESS_ENTITY" konnte aber die Methode
"IF_REIT_HAS_OPTION_RATE~GET_OPTION_RATE_MNGR" nicht gefunden werden.")

Besteht das Problem darin, dass der ursprüngliche definierte Datentyp des Objekts go_re_object, der if_reca_bus_object bzw. cl_reca_bus_object lautet, eine solch definierte Methode gar nicht aufweist?

Eigentlich dachte ich, dass ich mir zusätzliche Objektvariablen und mehrfache, gleiche Methodenaufrufe (die get_option_rate_manager ist bei allen Immobilienobjekten gleich) sparen kann.

Vllt. kann mir jemand weiterhelfen? Würde mich riesig freuen.

Vielen Dank schon einmal im Voraus!

Grüße
Stephan
Neo2677
.
.
 
Posts: 4
Joined: Wed Sep 19, 2007 3:33 pm

Re: Dynamischer Methodenaufruf

Postby Jim3723 » Tue Oct 11, 2011 2:13 pm

hallo,

wie du schon geschrieben hast, beide objekte (GO_RE_OBJECT und GO_BE) besitzen zur laufzeit den type "cl_rebd_business_entity". aber erst durch dein casting auf das interface IF_REBD_BUSINESS_ENTITY erhältst du die möglichkeit, auf die methode GET_OPTION_RATE_MNGR des interfaces IF_REIT_HAS_OPTION_RATE zuzugreifen. das interface IF_RECA_BUS_OBJECT besitzt gar nicht das interface IF_REIT_HAS_OPTION_RATE, IF_REBD_BUSINESS_ENTITY schon. aus diesem grund schlägt der erste dynamische methodenaufruf fehl.
wenn du dir bei FIND_BY_IMKEY sicher bist, das immer eine wirtschaftseinheit zurückkommt, dann müsstest du doch dort schon das rückgabeobjekt in die objektvariable GO_BE schieben können...

viele grüße
Jim3723
..
..
 
Posts: 99
Joined: Mon Jan 29, 2007 12:21 pm


Return to ABAP Objects®

Who is online

Users browsing this forum: No registered users and 10 guests