2016-10-19 5 views
0

Ich bin neu bei PeopleCode und als ich Funktionen erlernte, bemerkte ich, dass wir in PeopleCode normalerweise Wert mit% PATIENT_ID übergeben würden. Ein Freund hat mir gesagt, dass man auch per Referenz im PeopleCode vorbeikommen kann aber wie?Können Sie durch Verweis in PeopleCode übergeben?

Antwort

5

PeopleCode wird als Referenz für Funktionen übergeben.

Function addOne(&num As integer)  
    &num = &num + 1 
End-Function; 

Local integer &val = 9; 
addOne(&val); 
MessageBox(0, "", 0, 0,String(&val)); 

Ergebnisse in 10

Wenn Sie App-Klassen verwenden es anders für Methoden verhält:

  • Pass von Wert für einfache Typen (string, int, Anzahl, etc.)
  • Pass by reference für Objekte (Rowsets, Datensätze, App-Klassen)
  • Kann als Referenz für einfache Typen mit dem OUT-Schlüsselwo übergeben werden RD in der Parameterliste

    method addOne(&num as integer out)

1

Funktionen, die in dem gleichen Kontext wie die Ausführung von Code definiert sind, z.B. page/component/record/field event PeopleCode, berücksichtige immer Parameter als Referenzen.

Innerhalb von Anwendungsklassen können Parameter einfacher Typen von Methoden mit dem Schlüsselwort 'out' definiert werden, um anzugeben, dass es sich um Referenzen handelt. Methoden übergeben Parameter auch automatisch als Referenzen für komplexe Typen. Denken Sie: "Wenn es viele Daten gibt, ist es eine Referenz"

1

Diese Dokumentation wird sehr hilfreich für Sie sein. https://docs.oracle.com/cd/E26239_01/pt851h3/eng/psbooks/tpcr/chapter.htm?File=tpcr/htm/tpcr07.htm

Geben von Parametern mit Object-Datentypen

Parameter mit Objektdatentypen werden immer als Referenz übergeben:

/* argument passed by reference */ 
method storeInfo(&f as File); 

Wenn Sie das aus Modifikator für einen Methodenparameter mit einem angeben Objekt Datentyp, wird es ein Referenzparameter. Dies bedeutet, dass die Parametervariable durch Verweis anstelle des Objekts übergeben wird, auf das es verweist, wenn es übergeben wird.

Zum Beispiel, wenn Sie ein Objekt Parameter mit dem aus Modifikator passieren:

method myMethod(&arg as MyObjectClass); 

Local MyObjectClass &o1 = create MyObjectClass("A"); 
Local MyOtherObjectClass &o2 = create MyOtherObjectClass(); 

&o2.myMethod(&o1); 

And inside myMethod this occurs: 
Method myMethod 
    &arg = create MyObjectClass("B"); 
end-method; 

Da das Verfahren Argument innerhalb des Körpers myMethod neu zugewiesen wird, & o1 verweist nicht auf die neue Instanz von MyObjectClass (initialisiert mit "B"), nachdem der Methodenaufruf abgeschlossen ist. Dies liegt daran, dass & o1 immer noch auf die ursprüngliche Instanz von MyObjectClass verweist.

Wenn jedoch & o1 war mit dem aus Modifikator geführt worden, nachdem die Methodenaufruf abgeschlossen ist, & o1 Punkte um jeden der Parameter wurde zuletzt zugewiesen; In diesem Fall die neue Instanz von MyObjectClass.Der Parameter anstelle des Objekts wird als Referenz übergeben. Verwenden der die Out-Spezifikation für einen Parameter

Im folgenden Beispiel hat eine Klasse, AddStuff, eine einzige öffentliche Methode, DoAdd. Dies fügt zwei Zahlen zusammen und weist sie dann als verschiedenen Nummern zu. In der Signatur der Methodendeklaration ist der erste Parameter nicht mit einer out-Anweisung deklariert, während der zweite ist.

class AddStuff 
    ​method DoAdd(&P1 as number, &P2 as number out); 
​end-class; 

method DoAdd 
    &X = &P1 + &P2; 
    &P1 = 1; 
    &P2 = 2; 
end-method; 

Im folgenden People Beispiel ein Objekt mit dem Namen & Aref ist aus der Klasse AddStuff instanziiert. Zwei Parameter, & I und & J sind ebenfalls definiert.

local AddStuff &Aref = Create AddStuff(); 
local number &I = 10; 
local number &J = 20; 

Das folgende Codebeispiel ist korrekt. & J wird geändert, wegen der Outstatement in der Methodensignatur und weil der Wert als Referenz übergeben wird. Der Wert von & I ist nicht aktualisiert.

&Aref.DoAdd(&I, &J); /* changes &J but not &I */ 

Das folgende Codebeispiel verursacht einen Entwurfszeitfehler. Der zweite Parameter muss als Referenz übergeben werden, nicht als Wert.

&Aref.DoAdd(10, 20); /* error - second argument not variable */ 
Verwandte Themen