最近のアクセス:
Load イベント

このシステムイベントは、Refresh イベントの直後に実行されます。このイベントの動作は、オブジェクト (Web PanelPanel)、レイアウトにグリッドがあるかどうか、および関連付けられたベーステーブルがあるかどうかによって異なります。
ただし、常にレイアウト (グリッドがない Web パネルの場合は値を参照するコントロール、それ以外の場合はグリッド) への情報のロードに適用されます。通常は、グリッドへの変数の値のロードに使用します。これらの変数の値は、割り当てによって計算するか、For Each コマンドを使用してデータベースから読み取ることができます。

構文

Event Load
   Event_code 
EndEvent
入力値の説明:
Event_code: 
イベントがトリガーされるたびにサーバーで実行されるコードです。

レイアウト内に複数のグリッドがある Load イベントをコーディングしようとすると、エラーが発生します。一般的な Load イベント (gridName.Load イベントのように特定のグリッドコントロールにリンクされていないイベント) は、グリッドが最大で 1 個の場合にのみ使用できます。
Panel オブジェクトでは、ロード時にグリッド (SDT に基づかない) がある場合にのみ Load イベントが実行されます。また、Web パネルで Web パネルが値を参照するコントロール (グリッドなし) の場合、Load イベントは、その値を参照するコントロールの情報のロードに適用されます (Panel オブジェクトの場合は Refresh イベントがこの役割を果たします)。違いとして、Web パネルでは、グリッドの有無に関係なくすべての場合に、最大で 1 個の関連テーブル (項目属性の場合はベーステーブル) がありますが、Panel オブジェクトでは、これが必ず 2 個になります (固定部分に 1 個とグリッドに 1 個)。

Web パネル
  • 項目属性が存在する場合 (For Each の外のレイアウト、順序、条件、データセレクター、またはイベント内)、ベーステーブルがあります。Load イベントは n 回トリガーされます。ここでの n は、ベーステーブル内で条件を満たすレコードの数です。
    • Web パネルが値を参照するコントロール (グリッドなし) の場合、1 つのレコードだけが満たす条件が必要です。それ以外の場合は、正しくプログラムされません。このレコード情報 (およびその拡張テーブル関連のレコード) が、Load イベントのトリガー時にロードされます。この時点で、このときに必要な動作のコードを記述する必要があります (ロードされるデータベースレコードに基づく変数の割り当てなど)。
    • グリッドがある場合、固定部分 (グリッドの拡張テーブルに含まれる) の項目属性は、グリッドにロードされる各行の値が同じである場合にのみ有効です (それ以外の場合はグリッド上にあるはずです)。ここでは、拡張テーブル内で条件を満たすレコードごとに Load イベントがトリガーされます。この時点で、関連する行がグリッドにロードされるので、これは、ロードされる拡張テーブルのレコードに依存する変数の値の設定に最適なタイミングです。
  • それ以外の (前述の場所に変数だけがある) 場合、ベーステーブルはありません。Load イベントは 1 回だけトリガーされます。このとき、Event_code で、フォームの完全なロードをプログラムする必要があります。グリッドがある場合は、グリッドの行ごとに Load コマンドを使用します。
パネル
  • (SDT に基づかない) グリッドがない場合、Load イベントは実行されません。レイアウトの固定部分をロードするには、Refresh イベント、つまり固定部分のベーステーブルに関連付けられているイベントのコードを記述します。
  • それ以外の場合、固定部分の項目属性が、グリッドのベーステーブルではなく、独自のベーステーブルを判断します。そのため、一部の条件 (パラメーターなど) は、すべてのテーブルレジスタから検索し、1 つだけを残す必要があります。そのレコードからの割り当てを通じて変数をロードする必要がある場合は、Refresh イベントを使用します。各行にグリッド変数をロードする場合は、Web パネルと同様に、Load イベントをコーディングする必要があります。
Web パネルまたはパネルのグリッドに関連付けられているベーステーブルがあり、Load イベントのコード内で For Each コマンドが使用されている場合、この For Each は、暗示的な For Each にネストされていると見なされ (Load イベントは、ベーステーブルに対して、暗示的な For Each 処理を実行)、結合、コントロールブレーク、またはデカルト積が使用されます。Event_code では、For Each を記述せずに (暗示されるため)、Load のベーステーブルに対応する任意の拡張テーブルの項目属性を使用できます。
ベーステーブルでは、このイベントの合計実行回数が、ロードするグリッドレコードの合計数によって異なります。また、ユーザーの要求でレコードをロードすることもできます。この場合、グリッド内で [ Rows ] プロパティを使用できます。10 に設定すると、レコードが 10 個単位でロードされます (自動ページング)。

1. 値を参照するコントロールを持つ Web パネルに顧客情報を表示します (顧客はパラメーターで取得)。レイアウトの項目属性は次のとおりです。ナビゲーションレポートは、Load イベントが暗示的に Customer テーブルをナビゲートし、CustomerId による自動フィルタが適用されていることを示しています (CustomerId パラメーターで取得しているため)。
イメージ:24302.jpg
パラメーター値を 2 として、この Web パネルを別のオブジェクトから呼び出すとします。この場合、CustomerId 2 の情報が表示されます:
イメージ:24303.jpg
顧客に関連付けられたフライトが複数あるかどうかを示す画像を画面に表示する必要がある場合 (各フライトの座席に CustomerId がある)、この画像 (Image1) を画面に挿入します:
イメージ:24304.jpg
そして、必要に応じて (たとえば顧客に 10 を超えるフライトがある場合) 表示します:
Event Load
     &total = 0
     for each defined by FlightSetLocation
        &total += 1
     endfor
     if &total >10
        Image1.Visible = True
     else
        Image1.Visible = False
     endif
EndEvent
明示的な For Each が暗示的な For Each (Customer) にネストされていることが分かります。

2. Web パネルのグリッドに、すべての顧客と、座席を予約しているすべてのフライトの合計金額が表示されています。
イメージ:24305.jpg
グリッドに &flightPrice 変数が挿入されており、各顧客の必要金額が計算されています。CustomerFullName 項目属性が、グリッドにベーステーブルがあることを判別しています。それは Customer です。
行 (顧客) がグリッドにロードされるたびに、対応する変数値を計算する必要があります:
Event Load
   &flightPrices = 0
   for each defined by FlightSeatLocation
      &flightPrices = &flightPrices + FlightFinalPrice
   endfor
   &totalFlightPrices = &totalFlightPrices + &flightPrices //グリッドにロードされるすべてのクライアントの合計金額を計算
EndEvent
For Each が、暗示的な For Each にネストされていることが分かります (このため、CustomerId によるフィルタを指定する必要がありません)。
ナビゲーションレポートでは、次のように、Web パネルにベーステーブル (Customer) があることが分かります:
イメージ:24306.jpg
Load イベントは、このテーブル内の顧客ごとに実行されます。Load には For Each があるため、ベーステーブルをナビゲートする必要があります。ナビゲーションレポートには、フライトの座席が含まれているテーブルで、顧客に対応するレコードを取得し、特定の時点でグリッドにロードすることが示されています。
グリッドにロードされる顧客には制限があります。これは、グリッドに次の条件が指定されているためです:
イメージ:24308.jpg

3. 同様に、Panel オブジェクトでは、不動産物件に一定数以上の訪問があったかどうかに応じて変数をグリッドにロードし、物件が訪問数において上位かどうかを分類する必要があります。また、物件がここ数日の間にリストに入った場合は、新しい物件であることを示す画像を表示するとします。
イメージ:24255.jpg
その方法については、「スマートデバイスの Load イベント - 例」を参照してください。

4. 2 つのトランザクションについて考えます: Invoice と Order です。
Invoice
{
     InvoiceNumber*
     InvoiceDate
}
Order
{
     OrderNumber*
     OrderDate
}
Web Panel オブジェクトのグリッドで、一部の行に Order の情報を表示し、その他の行に Invoice の情報を表示するとします。異なるタイプのグリッド行を定義する (ある行に Invoice 項目属性を表示し、その下の行に Order 項目属性を表示する、など) ことはできないので、これは簡単にはできません。
解決策として、ベーステーブルのない Web パネルを定義し、変数から構成されるグリッド行を定義し、Load イベントと Load コマンドを使用して、これらの変数のロードを処理します。
ベーステーブルのない Web パネルを構築するには、Web レイアウトまたはイベントで項目属性が指定されていないことを確認する必要があります (For Each コマンドと条件に含まれるものを除く)。どちらにせよ、グリッドの [ Base Trn ] プロパティを設定することはできません。

イメージ:8194.jpg

最後に、次の Load イベントを宣言します:
Event Load
    For each
        &InvoiceNumber = InvoiceNumber
        &InvoiceDate   = InvoiceDate
        ...
        Load
    EndFor
    For each
        &OrderNumber = OrderNumber
        &OrderDate   = OrderDate
        ...
        Load
    EndFor
EndEvent
Load コマンドによって、現在の For Each 行が強制的にグリッドにロードされます。この方法は、このような特別な場合にのみ使用します。
この方法は、Load イベントの一般的な使用方法ではありません。この場合、ベーステーブルが定義されていないので、暗示的な For Each がありません。ロードは、既定のロードを使用せずに、すべて手動で (明示的なコマンドを使用して) 一度に行う必要があります。

適用範囲

参考情報

Refresh イベント
Load コマンド
ネイティブ モバイル アプリケーションのイベント
ネイティブ モバイル アプリケーションのサーバー側のイベント
パネルでイベントをトリガーする順序

動画

イメージ:20668.png Events in Mobile Applications



サブページ
Created: 15/01/07 22:57 by Admin Last update: 23/05/08 21:27 by Admin
カテゴリ
Powered by GXwiki 3.0