Wie übergebe ich Parameter an eine FORM-Routine?

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
2 Beiträge Seite 1 von 1
2 Beiträge Seite 1 von 1

Wie übergebe ich Parameter an eine FORM-Routine?

Beitrag von DRABAP (ForumUser / 30 / 0 / 1 ) » 7. Jan 2003 20:17

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

Folgende Benutzer bedankten sich beim Autor DRABAP für den Beitrag:
erzoo24

Dr. ABAP


Beispiel zum PERFORM mit Parameterübergabe

Beitrag von gse (ForumUser / 97 / 0 / 1 ) » 10. Jan 2003 09:47

Hallo DRABAP,

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

Code: Alles auswählen.

PARAMETERS :
   p_gdat  TYPE syst-datum,                   " Gültig ab Datum
   p_gzeit TYPE syst-uzeit.                   " Gültig ab Zeit

DATA:  datum                 TYPE d,
           zeit                     TYPE t,
           zeitstempel_akt   TYPE yrdsdwk0_zeitpunkt_fmt,
           tzonref                TYPE tzonref,
           mein_zeitstempel TYPE timestamp.

*Datum und Zeit konvertieren in Zeitstempel
  PERFORM convert_date
                          USING    p_gdat
                                       p_gzeit
                   CHANGING    zeitstempel_akt.


*&---------------------------------------------------------------------*
*&      Form  CONVERT_DATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_DATUM  text
*      -->P_ZEIT  text
*      <--P_ZEITSTEMPEL_AKT  text
*----------------------------------------------------------------------*
FORM convert_date USING    p_datum
                           p_zeit
                  CHANGING p_zeitstempel_akt.

  CLEAR tzonref-tzone.

  CONVERT DATE            p_gdat
          TIME            p_gzeit
          INTO TIME STAMP tzonref-tstamps
               TIME ZONE  tzonref-tzone.


  zeitstempel_akt = tzonref-tstamps.


ENDFORM.                    " CONVERT_DATE
weiterhin frohes schaffen! gse

Folgende Benutzer bedankten sich beim Autor gse für den Beitrag:
erzoo24


Seite 1 von 1

Aktuelle Forenbeiträge

PopUp bei Fakturaerstellung
vor 52 Minuten von TravellingEntwickler 1 / 10
Unterschiedliche Konditionen AB und Rechnungdruck
vor 5 Stunden von Sebastian82 1 / 34
Anzahlungsrechnung drucken
vor 6 Stunden von Sebastian82 1 / 30
Generierte Datei auf bestimmte Email Adresse versenden gelöst
vor 22 Stunden von M@atze! 9 / 2081

Unbeantwortete Forenbeiträge

PopUp bei Fakturaerstellung
vor 52 Minuten von TravellingEntwickler 1 / 10
Unterschiedliche Konditionen AB und Rechnungdruck
vor 5 Stunden von Sebastian82 1 / 34
Anzahlungsrechnung drucken
vor 6 Stunden von Sebastian82 1 / 30
Änderungsbelege für Kundenfelder im BP
vor 4 Tagen von GerryRe 1 / 1990