ユーザー システム イベントには、各イベントおよびそれらを構成する命令に基づいた、独自のトリガー順序があります。Start、Refresh、Load などのシステムイベントは常にサーバーで実行され、ユーザーイベントはサーバーへのラウンドトリップが必要でない限り、通常はクライアントで実行されます。次に例を示します。
Event 'Message'
Interop.Msg(&MsgText)
EndEvent
これは、フォーム上のアクションである [ Message ] ボタンに対応するユーザーイベントを表しています。サーバーサービスを必要としない単一の命令で構成されています。
だたし、次の例では、プロシージャーの呼び出しは常にサーバーで実行されるので、サーバーへのアクセスが必要です。
Event 'Message'
Composite
Interop.Msg(&MsgText)
UpdateLog.Call(&MsgText)
EndComposite
EndEvent
上記の例にかかわらず、パネル (Work With for Smart Devices の List ノードまたは Panel オブジェクト) でのイベントのトリガー順序は、基本的には「ネイティブ モバイル アプリケーションのイベント」で説明したとおりになります:
ClientStart (List) //Xev3 バージョン以降
Start
Refresh
Load (非 SDT ベースのグリッドがレイアウトにある場合)
n 個のセクションを持つ Work With の Detail ノードにパネルが対応している場合、イベントは次のようにトリガーされます: まず、Detail システムイベントがトリガーされます (つまり、WWSD の Detail ノードに関連付けられている Start、Refresh、Load イベント)。その後は、セクションによって順序が決まります:
- セクションがタブとして表示される場合、各セクションは、タブが最初に選択されると (または最初のタブの開始時に) 有効になります。このため、システムイベントがトリガーされます。タブのナビゲート後、再度選択できますが、そのセクションについてはシステムイベントは実行されません (既に "オンライン" であるため)。内部オブジェクトを一度終了した後、再度選択した場合は、すべてのシステム イベント タブが再度実行されます。
- セクションがリンクとして表示されている場合は、リンクを実行したときに各セクションがアクティブ化されます (システムイベントがトリガーされます)。
- セクションがインラインで表示されている場合は、各セクションが不確定の順序で (場合によっては同時に) アクティブ化されます。
- 挿入、更新、または削除モード (WWSD.Detail.Insert() / WWSD.Detail.Update(pk) / WWSD.Detail.Delete(pk)) で BC を呼び出すと、Start イベントも Refresh イベントも実行されません (代わりに BC 自体の既定のルールが適用されます)。ただし、Detail の Start イベントは実行されます。
概略は次のようになります:
ClientStart (Detail) //Xev3 バージョン以降
Start (Detail)
Refresh (Detail)
Load (Detail、非 SDT ベースのグリッドがある場合)
ClientStart (Section 1) //Xev3 バージョン以降
Start (Section 1)
Refresh (Section 1)
Load (Section 1、非 SDT ベースのグリッドがある場合)
…
ClientStart (Section n) //X Evo3 バージョン以降
Start (Section n)
Refresh (Section n)
Load (Section n、非 SDT ベースのグリッドがある場合)
上記を考慮して、Section m の ClientStart-Start-Refresh-Load という一連のアクションを実行してみます。
画面をロードすると、ユーザーはやり取りできる状態になります。ユーザーがアクション (クライアントイベント) をトリガーするとどうなるでしょうか。プロシージャーを呼び出す必要がある場合など、サーバーへのラウンドトリップが必要でない限り、関連付けられたコードはクライアント側 (デバイス内) で実行されます。いずれにしても、Refresh コマンドを通じて明示的に要求された場合を除き、システムイベントは実行されません。
キャッシュ処理の設定に応じて、デバイスがサーバーにアクセスして、データを取得するかどうかが決まります。
サーバーにアクセスし、サーバーのデータが変更されていない場合、クライアントには何も戻されません。データが変更されている場合は、Refresh および Load (非 SDT ベースのグリッドがある場合) イベントが実行されます。
Refresh コマンドが Detail セクションのクライアントイベントで実行された場合はどうなるでしょうか。Detail ノードおよび、以前にアクティブ化されていたセクション (前述したように、いつでもアクティブ化できるインラインは除く) のシステムイベントが実行されます。
ネイティブ モバイル アプリケーションのイベント
ネイティブ モバイル アプリケーションのサーバー側のイベント
Refresh イベント
Load イベント
|