Wie übergebe ich Parameter an eine FORM-Routine?

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV

Wie übergebe ich Parameter an eine FORM-Routine?

Postby Quinn1225 » Tue Jan 07, 2003 9:17 pm

Bei der Typisierung von Parametern für eine FROM-Routine hat man die Qual der Wahl. Leider bietet die Freiheit an dieser Stelle auch Anlaß zur Verwirrung. Man hat insgesamt 4 Möglichkeiten.
Einerseits kann man zwischen Referenz- und Wertparameter wählen, anderseits kann man als Zugriff "ändernd" und "nichtändernd" wählen. Ändernd bezieht sich dabei auf den Aktualparameter, als das was man beim Aufruf angibt. Eine Unschönheit ist, dass USING nicht unbedingt das bedeuted was man erwartet. Wählt man einen USING Referenzparameter (also ohne VALUE), so passiert genau daselbe wie bei CHANGING. Ändert man den Formalparameter so ändert sich auch sofort der Aktualparameter (man ändert also, ohne das man "ändernd" also CHANGING angeben hat). Wählt man also einen USING-Referenzparameter, so sollte man den Formalparameter innerhalb der Routine nicht ändern. Ansonsten greift man lieber zu einem USING VALUE. Man arbeit dann quasi auf einer lokalen Kopie. Der wesentliche Unterschied zwischen VALUE oder nicht VALUE besteht darin, dass bei VALUE kopiert wird. Dies kann bei großen Datenvolumina tuer sein. Zudem kann man keine generischen Typen für Value-Parameter angeben. Will man ändern, so empfehlen sich in der Regel CHANGING-Referenzparameter. Der Unterschied zu CHANGING VALUE ist, dass die Änderungen sofort aktiv werden. Bei VALUE werden die Änderungen erst nach ordungsgemäßem Verlassen der Routine wirksam (also nicht bei vorzeitigem Abbruch).
Abschließend kann man eigentlich sagen:
    Will man ändern, so sollte man CHANGING verwenden.
    Will man nicht ändern, hat keine "großen" Datenvolumina und benötigt keine generische Parametertypen, so sollte man USING VALUE verwenden.
    ansonsten sollte man USING verwenden und den Formalparameter nicht ändern.
    CHANGING VALUE sollte man eigentlich vermeiden
Quinn1225
..
..
 
Posts: 30
Joined: Thu Jan 02, 2003 4:16 pm

Beispiel zum PERFORM mit Parameterübergabe

Postby Cecilia1751 » Fri Jan 10, 2003 10:47 am

Hallo DRABAP,

erlaube mir noch ein kleines Beispiel zum Thema Parameterübergabe beizusteuern. ;)

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.    p_gdat  TYPE syst-datum,                   " Gültig ab Datum
  2.    p_gzeit TYPE syst-uzeit.                   " Gültig ab Zeit
  3.  
  4. DATA:  datum                 TYPE d,
  5.            zeit                     TYPE t,
  6.            zeitstempel_akt   TYPE yrdsdwk0_zeitpunkt_fmt,
  7.            tzonref                TYPE tzonref,
  8.            mein_zeitstempel TYPE timestamp.
  9.  
  10. *Datum und Zeit konvertieren in Zeitstempel
  11.   PERFORM convert_date
  12.                           USING    p_gdat
  13.                                        p_gzeit
  14.                    CHANGING    zeitstempel_akt.
  15.  
  16.  
  17. *&---------------------------------------------------------------------*
  18. *&      Form  CONVERT_DATE
  19. *&---------------------------------------------------------------------*
  20. *       text
  21. *----------------------------------------------------------------------*
  22. *      -->P_DATUM  text
  23. *      -->P_ZEIT  text
  24. *      <--P_ZEITSTEMPEL_AKT  text
  25. *----------------------------------------------------------------------*
  26. FORM convert_date USING    p_datum
  27.                            p_zeit
  28.                   CHANGING p_zeitstempel_akt.
  29.  
  30.   CLEAR tzonref-tzone.
  31.  
  32.   CONVERT DATE            p_gdat
  33.           TIME            p_gzeit
  34.           INTO TIME STAMP tzonref-tstamps
  35.                TIME ZONE  tzonref-tzone.
  36.  
  37.  
  38.   zeitstempel_akt = tzonref-tstamps.
  39.  
  40.  
  41. ENDFORM.                    " CONVERT_DATE
  42.  
GeSHi ©


weiterhin frohes schaffen! gse
Cecilia1751
...
...
 
Posts: 110
Joined: Wed Dec 18, 2002 11:04 am


Return to ABAP® Core

Who is online

Users browsing this forum: No registered users and 3 guests

cron