最近のアクセス:
ネイティブ モバイル アプリケーションのサーバー側のイベント

システムイベントとも呼ばれるサーバー側のイベントには、Start、Refresh、および Load があります。
キャッシュは除外して (ここではキャッシュが無効化されていると想定)、各レイアウトをデバイスにロードするには、サーバーへの 2 つの呼び出しを実行する必要があります。1 つの呼び出しでは値を参照するコントロール (固定部分)、もう 1 つの呼び出しではグリッド (存在する場合) がロードされます。つまり、2 つのベーステーブル (固定部分とグリッド) が関係します。そのため、2 つのデータプロバイダーが GeneXus によって内部的に作成されます (ナビゲーションレポートに表示)。最初のデータプロバイダーには Start イベントと Refresh イベントにプログラミングされたロジックが、2 番目のデータプロバイダーには Load イベントのロジックが (条件セレクターで指定された条件と順序とともに) それぞれ含まれます。

Start イベント

Start イベントPanel オブジェクトまたは Work With for Smart Devices オブジェクト リスト ノードがデバイスで最初に開かれたときに実行されます (後で複数のセクションの例で詳細を確認します)。パネルを終了してからもう一度開かない限り、再度実行されることはありません。

Refresh イベント

Refresh イベントは Start の後に実行されます (初回を除く。初回の場合は Start が実行されず Refresh が実行されます)。フォームの固定部分のナビゲーションとグリッドのナビゲーションが分離されているため、それぞれに (項目属性が存在する場合) ベーステーブルがあります。そのため、Refresh イベントは固定部分のベーステーブルにアクセスして値を参照するコントロールの情報を取得します。条件を満たすレコードがない場合、Refresh イベントコードは実行されません。
グリッドが SDT に基づく場合を除き、Refresh 内ではグリッド情報にアクセスできません。

Load イベント

Load イベントは、最後に実行されるシステムイベントです。このイベントは、レイアウト上にグリッドがある場合にのみ実行されます。グリッドにベーステーブルがある場合、Load イベントは存在するベーステーブルのレジスタと同じ回数だけ実行されます。また、グリッドが変数に基づく場合は、Web パネルでの場合と同様に 1 回だけ実行されます。グリッドが SDT 変数に基づく場合、Load イベントは実行されません。

変数が永続的かどうか

どのような GeneXus オブジェクトにおいても、オブジェクト内で定義された変数はその中でグローバルです。そのため、Refresh イベントに割り当てられた変数は、Load 内で参照できます。ただし、クライアントで割り当てられた値は、サーバーでは認識されません。これは一時的な制限です。クライアントで割り当てられた値を永続化するには、クライアントイベント内で REST プロシージャーを呼び出して (Web サーバー上)、セッション変数に値を保存する必要があります。そうすることで、後で Refresh イベントまたは Load イベントでそれらの値を取得できます (クライアントイベントですぐに Refresh コマンドが実行される場合など)。レイアウトに挿入された変数の場合も同様です (Web パネルでの処理とは異なる)。

次に、理解に役立つ例を示します。
不動産会社が管理するすべての不動産物件を一覧表示できる Menu オブジェクトがあるとします (Property トランザクションに関連する WWSD の List ノードの呼び出し)。List ノードを呼び出すと、そのレイアウトにグリッドがあるため、前述のように 2 つのデータプロバイダーが作成され、実行されて、デバイスの画面にロードするデータが取得されます。
イメージ:24235.jpg
この物件のリストをユーザーが呼び出すと、次の処理が実行されます。
  1. ユーザーがメニューアイテムである物件リストをタップすると、クライアント側で対応するイベントが実行されます (List ノードでの WorkWithDevicesProperty の呼び出し)。
  2. リストの値に対応する情報を取得するデータプロバイダーの呼び出し (REST 要求) が実行されます。
  3. 情報をデータベースから取得する必要がある場合は、そのデータベースへの呼び出しが実行されます。
  4. データベースは、Web サーバー上でデータプロバイダーに要求された情報を取得します。
  5. データプロバイダーは、クライアントがレイアウトの値をロードするために必要なデータを取得します (REST 応答)。
  6. レイアウトの値を参照するコントロールがデバイスの画面に描画されます。
  7. 手順 2 から手順 6 が実行されて、データプロバイダーがグリッド情報を取得します。
ここで、パネル ( [ リスト ] または [ 詳細 ] ) と Web パネルとの違いを説明することが重要です。固定部分のナビゲーションとグリッドのナビゲーションは分離されており、固定部分に対応する画面は、グリッドからは独立して描画されます。項目属性がある場合は、2 つのベーステーブルがあります。そのため、ロードされた不動産物件をすべてグリッドの固定部分に表示する場合、Web パネルでの操作と同じようには操作できません。Web パネルの場合、&total 変数を 0 に設定して Refresh に追加すると、Load イベントが実行されるたびにこの値が増加します。
イメージ:24259.jpg
Work With の固定部分は、行を返すデータプロバイダーを呼び出す前に描画されるため、変数の値は常に 0 を示します。キャッシュについては別の問題もあります。詳しくはネイティブ モバイル アプリケーションのキャッシュを参照してください。
レコード数の表示問題を解決するには、Refresh イベントで For Each コマンドを追加して、数をカウントします。

ロードの例

見学者の多い物件を分類するため、ある物件を見学した人が一定の数を超えたかどうかに応じて、変数をグリッドにロードする必要があります。また、物件がここ数日の間にリストに入った場合は、新しい物件であることを示す画像を表示します。
イメージ:24255.jpg
その方法については、「スマートデバイスの Load イベント - 例」を参照してください。



サブページ
Created: 15/01/07 22:49 by Admin Last update: 22/04/05 18:17 by Admin
カテゴリ
Powered by GXwiki 3.0