2016-10-19 2 views
0

私はPeopleCodeを使い慣れていませんし、私が関数を学んでいるので、私はPeopleCodeで、通常は%PATIENT_IDを使用して値を渡すことに気付きました。友人からは、PeopleCodeで参照渡すこともできますが、どうすればよいのか教えてくれましたか?PeopleCodeで参照渡しできますか?

答えて

5

PeopleCodeは関数の参照渡しです。あなたはそれが方法では異なる 振る舞いのAppクラスを使用している場合は10

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

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

結果:単純型(文字列、int型、数、など) の値によって

  • パス
  • オブジェクト(行セット、レコード、アプリケーションクラス)の参照渡し
  • 単純な型の場合OUTキーを使用して渡すことができます。パラメータリスト内のRD実行コードと同じコンテキストに定義されている

    method addOne(&num as integer out)

1

機能、例えばpage/component/record/fieldイベントPeopleCodeでは、常に参照としてパラメーターを考慮します。

アプリケーションクラス内で、メソッド上の単純型のパラメータは、 'out'キーワードで定義され、それらが参照であることを示すことができます。また、メソッドは複雑な型の参照としてパラメータを自動的に渡します。 「多くのデータがある場合は参照です」

1

このドキュメントは非常に役に立ちます。 https://docs.oracle.com/cd/E26239_01/pt851h3/eng/psbooks/tpcr/chapter.htm?File=tpcr/htm/tpcr07.htm

オブジェクト・データ型と

パラメータは常に参照によって渡されるオブジェクト・データ型のパラメータを渡す:あなたが持つメソッドのパラメータのうち修飾子を指定した場合

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

オブジェクト データ型では、参照パラメータになります。これは、 パラメータ変数が、渡されたときに指しているオブジェクトの代わりに参照によって渡されることを意味します。例えば

、あなたが出て修飾子でオブジェクトパラメータを渡す場合:メソッドの引数はMyMethodはの本体内に再割り当てされているので

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; 

、 & O1はMyObjectClassの新しいインスタンスを指していません(メソッド呼び出しが完了した後で が "B"で初期化されました)。これは、& o1はまだ がMyObjectClassの元のインスタンスを参照するためです。

しかし、& O1は、アウト修飾子を渡されていた場合 メソッドコールの完了後、パラメータが 最後に割り当てられたものは何でもで& 01ポイント。この例では、MyObjectClassの新しいインスタンスです。オブジェクトではなく パラメータは、参照渡しされます。 パラメータのアウト指定の使用

次の例では、クラスAddStuffには、単一のパブリック メソッド、DoAddがあります。これにより、2つの数字が加算され、 の異なる番号が割り当てられます。メソッド宣言のシグニチャでは、 の最初のパラメータはoutステートメントで宣言されておらず、 の2番目のパラメータはoutステートメントで宣言されていません。以下のPeopleCode例で

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

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

、&アレフ指定されたオブジェクトは、クラスAddStuffからインスタンス あります。 2つのパラメータ、&Iおよび&Jは、 も定義されている。

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

次のコード例は正しいです。 & Jが変更されました。これは、メソッドシグネチャの範囲が であり、値が であるために変更されました。 & Iの値は更新されません。

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

次のコード例では、デザイン時エラーが発生します。 2番目の パラメータは、値ではなく参照渡しする必要があります。

&Aref.DoAdd(10, 20); /* error - second argument not variable */ 
関連する問題