最近のアクセス:
イベント実行スキーム

このドキュメントでは、[ Web User Experience ] プロパティが Smooth に設定されている場合の Web アプリケーション内のイベントトリガー動作について説明します。
GeneXus のユーザーが考慮する必要がある、イベント処理の主な特徴は、次のとおりです:
  • Refresh イベントが、ユーザーイベント後に自動的にトリガーされることはありません。
  • Start イベントは、オブジェクトの実行時に 1 回だけトリガーされます。
  • Web コンポーネントは、コンテナとは独立して再表示されます。アプリケーションは、各 Web コンポーネントの再表示を受けてフィードバックを返します。

ユーザーイベントが Refresh イベントを自動的にトリガーすることはない

ユーザーイベントが、終了時に Refresh イベントを自動的にトリガーすることはありません。
ユーザー定義イベントが実行され、[ Web User Experience ] プロパティが Smooth に設定されている場合、次の処理が発生します:
  • 画面上の変数が読み取られる
  • ユーザーイベントが実行される
フォーム変数と Web パネルパラメーターは、ユーザーイベントから参照できます。つまり、ユーザーイベントがトリガーされるときは、いつでもフォーム変数とパラメーターを使用できます。
Refresh 操作に関しては、ユーザーは必要に応じて Refresh コマンドまたは Grid Refresh メソッドを使用することで、強制的に実行できます。 

グリッド行の自動再表示

上記で説明した動作の結果、グリッドの行に対してユーザーイベントがトリガーされるとき、グリッドが暗示的にリロードされることはないため、その行のみが影響を受けます。
たとえば、&ProductId 列および &ProductPrice 列を含むグリッドがあるとします。次のコードは、グリッド列に含まれるコントロールに関連付けられており、&ProductId を渡すと新しい &ProductPrice を返すプロシージャーを呼び出します。
Event "Update Price of Line"
      &ProductNewPrice = CalculatePrice(&ProductId)
      &ProductPrice = &ProductNewPrice
EndEvent
この場合、"CalculatePrice" プロシージャーが実行されても、再表示が暗示的に実行されることはありません。そのため、グリッドの &ProductPrice 列は更新されますが、グリッドの他の行はリロードされず、変化しません。
一般的に、グリッド行のユーザーイベント内でグリッド変数が割り当てられる際に、グリッド行は自動的に再表示されます:
Event "X」

&Var=expression //または
&Var=Procedure.call(InParams) //&Var はプロシージャーの出力です (Out または InOut パラメーター)。

EndEvent

Start イベントの動作

これは、GET HTTP メソッドを使用した、オブジェクトの初回実行時にのみトリガーされます。POST HTTP メソッドを使用して実行される場合、トリガーされません。
Web パネル X が Web パネル Y を呼び出し、Web パネル Y が X に戻る (または X を呼び出す) 場合、X の Start イベントがトリガーされることに注意してください。

Web コンポーネントイベントは Web コンポーネントに対してローカル

Web コンポーネント内での再表示は、そのコンポーネントの実行元の場所と、そのコンポーネントにネストされている Web コンポーネントのみに影響します。

ほかの Web コンポーネントを再表示する方法

Web コンポーネントを明示的に再表示するためのメソッドが提供されています。次の状況を考えてみます:
1. イベントがトリガーされた Web コンポーネントの子孫である Web コンポーネントを再表示する必要があるとします:
たとえば、Web コンポーネント A をロードする Web ページがあるとします (さらに、A は Web コンポーネント B をロードします)。Web コンポーネント A には次のコードがあります:
Event "GetBalance"
   &UserBalance = GetUserBalance(&UserId)
   &websession.set("UserBalance",&UserBalance)
EndEvent
Web コンポーネント B は、フォーム内に情報を表示するために、&UserBalance を使用します。これは、以前のコードに Web コンポーネント B の再表示が明示的に含まれている場合を除いては、&UserBalance から情報を取得しません。
Event "GetBalance"
   &UserBalance = GetUserBalance(&UserId)
   &websession.set("UserBalance",&UserBalance)
   WebComponentB.refresh()
EndEvent
この結果、Web コンポーネント B が Start イベント、Refresh イベント、Load イベントを実行するため、Refresh イベント内の Web セッションから &UserBalance を読み取ることができます。
注: Web コンポーネントの Refresh コマンドの範囲には、Web コンポーネントおよびそこに格納されたコンポーネントが含まれます。
2. 親 Web コンポーネントまたは親 Web ページを再表示する必要がある場合:
ページ全体を再表示するためには、フォームの Refresh コマンドを使用します。 
親 Web コンポーネントを再表示するには、グローバルイベントを使用します。
3. Web コンポーネントのすべての子孫を再表示する必要がある場合、Web の Refresh コマンドを使用します。
4. Web コンポーネントを個別に再表示するには、グローバルイベントを使用します。親 Web コンポーネントや同じ親を持つ Web コンポーネントを再表示する場合も同様です。
Web オブジェクトでグローバルイベントを使用する方法」を参照してください。

互換性のため、[ Web User Experience ] プロパティが Previous Versions Compatible に設定されている場合、ユーザーイベントを実行すると次のアクションがトリガーされます:
  • Start イベント
  • 画面上の変数が読み取られる
  • ユーザーイベントが実行される
  • 再表示
  • ロード
スムースモデルと互換モデルのイベント実行の比較」を参照してください。
異なる値の [ Web User Experience ] プロパティを持つオブジェクトを同じ Web ページ内に配置することはできません。



 




サブページ
Created: 15/01/07 22:48 by Admin Last update: 21/05/21 03:31 by Admin
カテゴリ
Powered by GXwiki 3.0