Methoden

Aus SAP-Wiki
Zur Navigation springenZur Suche springen

Methoden sind in der Klasse deklariert. Während Attribute Eigenschaften der Klasse sind, beschreiben Methoden ein Verhalten der Klasse.

Es kann unterschieden werden in:

  • Instanzmethoden
  • statische Methoden

Instanzmethoden

Eine Klasse ist sozusagen der Bauplan von einer Sache. Eine Referenzvariable in Bezug auf diese Klasse wird erzeugt durch den Befehl

Data: ref_var type ref of classname.

Ein Objekt/Instanz in Bezug auf diese Klasse, wo auch physischer Hauptspeicher zugewiesen wird, bewirkt folgender Befehl

Create object ref_var.

Im neuen ABAP ab 7.40 ist auch folgendfe Syntax möglich, siehe Instanz Klasse erzeugen mit NEW im neuen ABAP

DATA(lo_class) = NEW lcl_classe( ).

Wenn die Referenzvariable bereits angelegt wurde, wird die Klassenreferenz durch "#" ersetzt.

Data: lo_class type ref to lcl_class.
DATA(lo_class) = NEW #( ).

Diese Instanz der Klasse kann nun die Instanzmethoden der Klasse ausführen

call method ref_var->methodenname
  exporting ..
  importing ..

Statische Methoden

Eine statische Methode ist eine Funktion, die von außerhalb der Klasse direkt aufgerufen werden kann. Bei statischen Methoden wird das Zeichen "=>" zwischen Klasse und Methodenname benutzt.

Es muss kein Objekt in Bezug auf eine Klasse im Programm erzeugt werden.

  data: lv_url_string type string.

  lv_url_string = 'www.eberstein.de'.

* Startet Browser mit angegebener Adresse
  call method cl_gui_frontend_services=>execute
    exporting
      document = lv_url_string
    exceptions
      others   = 1.

Methoden innerhalb der Klasse (Eigenreferenz ME->)

Methoden innerhalb einer Klasse lassen sich über das Eigenreferenz ME ansprechen. Diese Methoden sollten mit der Sichtbarkeit PRIVATE deklariert werden, sofern diese Methoden lediglich innerhalb der Klasse genutzt werden. So ist auf den ersten Blick für den Programmierer der Unterschied ersichtlich zwischen den Public-Methoden (Schnittstelle der Klasse nach außen) und den internen Methoden der Klasse.

CALL METHOD me->get_stock_per_posting_date
  EXPORTING
    budat     = i_budat
    matnr     = ls_result-matnr
    werks     = ls_result-werks
    lgort     = ls_result-lgort
    charg     = ls_result-charg
    mtart     = ls_result-mtart
    meins     = ls_result-meins
 IMPORTING
   gbest     = ls_result-gbest.

Methoden umbenennen

  • Es ist innerhalb einer Klasse extrem wichtig klare Methodennamen zu vergeben. Speziell wenn eine Klasse wächst und viele Methoden beinhaltet, geht sehr schnell die Übersicht verloren, wenn der Methodenname nicht eingängig ist.
  • Solange eine Methode noch nicht verwendet wird, ist es unkompliziert. Man kann man die Methode umbenennen und es sind keine Probleme zu erwarten.
  • Wird eine Methode von einem oder mehreren Programmen verwendet, muss man wesentlich vorsichtiger sein. Es wird bei einer Umbenennung einer Methode nicht geprüft, ob eine Methode in einem Programm verwendet wird. Benennt man nun die Methode um, ohne in der Verwendern den Methodennamen umzubenennen, wird das verwendende Programm einen Syntaxfehler haben. Das kann im schlimmsten Fall erst im Produktivsystem auffallen.
  • Es ist daher empfehlenswert zunächst ein Verwendungsnachweis auf eine Methode zu machen. Wird sie nicht verwendet, kann man sie ohne Probleme umbenennen. Wird sie verwendet, sollte die Methode zuerst kopiert werden. Es muss dann auch geprüft werden, ob man in den verwendenden Programmen den Aufrufer ändern kann und es durchtransportieren bis ins Produktiv. Es kann sein, dass aufgrund anderer Entwicklungen das Programm noch nicht ins Produktiv transportiert werden kann. Dann sollte man einen Kommentar an diese Methode schreiben und den Aufrufer ändern, aber sich auch bewusst sein, dass im Produktiv noch der alte Methodennamen steht. Dann muss in der Klasse der alte kopierte Methodenname zunächst belassen werden. Aber es sollte dann auch zeitnah versucht werden alle Verwender ins Produktiv zu bekommen, um die alte Methode löschen zu können.
  • Beim Verwendungsnachweis ist zu beachten, dass der Methodenaufruf dynamisch erfolgen kann und dies würde der Verwendungsnachweis nicht erfassen. Hier könnte man zusätzlich noch mit dem Programm RS_ABAP_SOURCE_SCAN nach dem Methodennamen suchen im Kundennamensraum. Das ist dann immer noch nicht 100% sicher, aber verringert doch die Wahrscheinlich einer nicht gefundenen Verwendung deutlich.
  • Aufgrund dieser Probleme sollte bei der Anlage einer Methode möglichst gleich ein adäquater Name gefunden werden, um spätere Probleme zu vermeiden.

Literatur