最近のアクセス:
Udp メソッド

値を返す GeneXus オブジェクトを呼び出します。

構文

&VariableName|AttributeName =ObjectName.Udp( [ par1, ...., parN ] )
入力値の説明:
&VariableName
呼び出し元オブジェクトで定義された-ローカルまたは一時変数の名前です。呼び出されたオブジェクト (ObjectName) が返すデータを受け取ります。
AttributeName
    ナレッジベース内で定義された有効な項目属性名です。呼び出されたオブジェクト (ObjectName) が返すデータを受け取ります。
ObjectName
      呼び出すオブジェクトの名前です。
par1, …, parN
呼び先オブジェクトに送信できるオプションのパラメーターです。項目属性、変数、固定値、またはエクスプレッションになります。

説明

通常、Udp (ユーザー定義プロシージャー) メソッドは Procedure オブジェクトData Provider オブジェクトを呼び出すために使用します。これは、これらのオブジェクトを呼び出すと、実行後に呼び出し元に制御が戻り、データを返すことができるためです。Web 環境の場合、UI があるオブジェクトは呼び出し元に制御を返しません。
呼び出し元が Transaction オブジェクトWeb パネルオブジェクトProcedure オブジェクトのいずれであるかに応じて、呼び出し元オブジェクトのさまざまなセクションに Udp メソッドを記述できます。たとえば、呼び出し元が Procedure オブジェクトの場合は、Udp メソッドをオブジェクトのソースの行に含める必要があります。一方、呼び出し元オブジェクトが Transaction オブジェクトの場合は、要件に応じて、オブジェクトの Rules セクションやイベント内から呼び出す必要があります。さらに、式項目属性の定義に Udp メソッドを使用することも可能です。
呼び出しが定義されているコンテキストに応じて、特定の項目属性と変数のどちらが結果の受け取りに適しているかを判断する必要があります。
Udp メソッドの構文では「.Udp」を省略できます。その場合も、呼び出し内容は同じです。

1) この例では、Udp メソッドを使用して GetDiscount という名前のプロシージャーを呼び出します (「.Udp」と Udp メソッドの記述はオプションであるため、ここでは省略しています):
&discount= GetDiscount(CustomerId,FlightId); //Transaction オブジェクトで定義されたルール
Parm(CustomerId,FlightId,&discount); //GetDiscount プロシージャーで定義されたルール
GetDiscount プロシージャーで実行される処理について詳しく知ることは重要ではありません。名前が示しているとおり、このプロシージャーは、1 つの値と、プロシージャーから返された値を受け取る変数の名前を返します。まとめると、次のようになります:
  • プロシージャーが割引額を返します。
  • 2 つのデータ (顧客の識別子とフライトの識別子) がプロシージャーに送信されます。
  • プロシージャーでは、そのデータを使用して、割引額を返すために必要なすべての項目を評価および計算します。
呼び先オブジェクトで Parm ルールがどのように宣言されているかを確認することが重要です。
GetDiscount プロシージャーの Rules セクションでは、3 つのパラメーターを使用して Parm ルールを宣言しています。
「パラメーター」は、2 つのオブジェクト間 (一方のオブジェクトがもう一方のオブジェクトを呼び出します) で送受信されるデータを意味します。パラメーターを参照すると、変数、項目属性、または固定値を送信するか受信するかに関係なく、話を一般化することができます。
送信された 2 つのパラメーターを受信する仕組みについて確認してみましょう。なお、Parm ルールで定義された 3 つ目のパラメーターはプロシージャーで値が計算 (または取得) され、呼び出しの等号の前にある &discount 変数に割り当てられたパラメーターに相当します。
この例では、送信された 2 つのパラメーターは項目属性です。これは、プロシージャーがトランザクションから呼び出され、顧客を識別する値とフライトを識別する値がそれぞれ項目属性に格納されるためです。
2) この例と前の例を比較した場合の唯一の違いは、Udp メソッドを使用して呼び出したプロシージャーから返される結果が、項目属性に割り当てられている点です。
&discount= GetDiscount(CustomerId,FlightId); //Transaction オブジェクトで定義されたルール
Parm(CustomerId,FlightId,&discount); //GetDiscount プロシージャーで定義されたルール
項目属性に値を割り当てることができるのは、トランザクションの Rules セクションまたはプロシージャーの For Each コマンド内のみである点を考慮します。
GeneXus でデータベースが更新される可能性はほかにもありますが、値を項目属性に直接割り当てることができるのはこれらの場合だけです。
3) 次の例では、式の定義で同じプロシージャーが呼び出されます:
イメージ:24309.png
CustomerDiscount 項目属性には式の定義があるため、データベースに存在しない項目属性、つまり仮想項目属性とみなすことができます。この項目属性の値は、式の定義で指定された計算を実行 (この場合はプロシージャーを実行) することで、毎回算出されます。
プロシージャーにパラメーターとして送信される項目属性には値が必要です。具体的には、式の項目属性が存在するトランザクションレベルに関連付けられたテーブルの拡張テーブルに、項目属性が属している必要があります。
プロシージャーは Udp メソッドを使用して実行されます (Udp メソッドが省略されていてもかまいません)。これは、プロシージャーから出力値が返され、式の項目属性に割り当てられるためです。プロシージャーでは、3 つのパラメーターを使用して Parm ルールを定義する必要があります。最後のパラメーターが返されると、式の項目属性に割り当てられます。
注: 呼び出されたプロシージャーは、割引額を計算するために、CustomerDiscount 項目属性の拡張テーブル以外のテーブルにもアクセスすることを想定しておきます。これは、割引額の計算に関連するすべての項目属性が CustomerDiscount 項目属性の拡張テーブルに属している場合、プロシージャーの呼び出しは不要であり、式エディターで計算を直接定義する必要があるためです。
4) 次の例では、Udp メソッドを使用して (記述は省略されています)、パラメーターを送信せずに Data Provider オブジェクトを呼び出しています:
&FranceCustomers=DataProviderCustomersFromFrance()
データプロバイダーは、構造化データタイプに基づいて変数 (コレクション) をロードします。&FranceCustomers 変数に割り当てられたコレクションは、各エレメントを処理するために反復処理したり、表示したりできます。
重要な検討事項: Udp メソッドを使用して (オブジェクトがデータを返すため、記述が省略されている場合でもこのメソッドは使用されます) データプロバイダーを呼び出す場合でも、メソッドにパラメーターが送信されない、つまり、メソッドがパラメーターを受信しないため、データプロバイダーには Parm ルールが定義されません。返されるデータのデータタイプとして、データプロバイダーでは Output というプロパティを設定します。

参考情報

Call メソッド

動画

イメージ:20668.png オブジェクト間の通信


サブページ
Created: 15/01/07 22:51 by Admin Last update: 20/04/20 20:57 by Admin
カテゴリ
Powered by GXwiki 3.0