グリッドコントロールに新しい行を強制的にロードします。
Load
オブジェクト: Web Panel、
Work With for Smart Devices、
Panel ジェネレーター: .NET、
.NET Framework、
Java、
Android、
Apple
このコマンドは、
Load イベント、
Web Panel オブジェクトの
ユーザー定義イベント、または 1 つのグリッドだけを含む
Panel オブジェクトで使用されます。「
Work With for Smart Devices オブジェクト」も参照してください。
Load コマンドは次のシナリオで使用します:
例 1: ベーステーブルのない Web パネル
次の 2 つの
トランザクションについて考えてみましょう:
Invoice
{
InvoiceId*
InvoiceDate
}
Receipt
{
ReceiptId*
ReceiptDate
}
次の図のように、1 つのグリッドに請求書と受領書の全データを表示する
Web Panel オブジェクトを定義するとします:
この方法の 1 つとして、
ベーステーブルのない Web パネルを定義します。Web パネルには、変数のみを含むグリッドを 1つ含める必要があります。 [ Web Form ] 、 [ Events ] (
For Each コマンド内に含まれるものを除く)、条件または順序で使用されている項目属性がないことを確認します。言うまでもなく、
[ Base Trn ] プロパティはグリッドで設定できません。
グリッドには次の変数を含めるものとします: &Id、&Date、&Type。このように、GeneXus がベーステーブルと判断するような項目属性はないため、この Web パネルにはベーステーブルはありません。つまり、この Web パネルは自動的にナビゲーションすることも、グリッドへ自動的にデータをロードすることもないため、グリッドのロードを明示的に定義する必要があります。
ベーステーブルのないすべての Web パネル (または Panel) では、Load イベントは 1 回だけトリガーされます。このイベント内に、必要なナビゲーションとグリッドへのロードを明示的に定義する必要があります。この処理を行うためには、次のコードを記述します:
Event Load
For each Invoice
&Id = InvoiceId
&Date = InvoiceDate
&Type = "INVOICE"
Load // Load コマンド
EndFor
For each Receipt
&Id = ReceiptId
&Date = ReceiptDate
&Type = "RECEIPT"
Load // Load コマンド
EndFor
EndEvent //Load
Load イベント内に連続した 2 つの For each コマンドが定義されていることにご注意ください。1 つ目の For each コマンドでは、請求書のデータをスキャンしてグリッドにロードし、2 つ目の For each コマンドでは受領書のデータをスキャンしてグリッドにロードしています。コードが示すように、各
For Each コマンドで変数が明示的に割り当てられ、項目属性の値 (または固定値、計算結果など) がインスタンス化されています。変数に値を割り当てた後、Load コマンドを記述してグリッドにこれらの値を持つ行をロードする必要があります。Load コマンドは、グリッドに 1 行分のデータを効率的にロードします。そのため、コード内の適切な場所にこのコマンドを記述し忘れると、グリッド変数に値を割り当てていたとしても、その行はロードされません。
例 2: ベーステーブルを持つ Web パネル
ここでは、請求書の
トランザクションだけについて考えてみましょう。
Invoice
{
InvoiceId*
InvoiceDate
InvoiceAmount
}
InvoiceId、InvoiceDate、InvoiceAmount という項目属性を持った 1 つのグリッドを含む Web パネルを定義する場合、GeneXus はこの Web パネルにはベーステーブルがあり、それが Invoince であると判断します。つまり、この Web パネルでは自動的にナビゲーションが行われ (格納されているすべての請求書データをスキャンする暗示的な For each コマンドがある)、グリッドにはナビゲーションされた請求書のデータが自動的にロードされます。
次のフォームを含む Web パネルを定義するだけです (このオブジェクトについて必要な処理はありません):
実行時に次のような結果が表示されます:
ベーステーブルを持つすべての Web パネル (または Panel) では、スキャンされるレコードの数だけ Load イベントがトリガーされ (前の例では 3 回)、各レコードがグリッドの新しい行にロードされます。
Load イベント内にコードを記述する必要はあまりありません (前述の例を参照) が、各行をロードする前に実行や検証などの何らかの処理が必要がな場合は、Load イベント内の適切な場所にコードを定義する必要があります。
次のような基準に沿って、各行にテキストを表示するとします:
- InvoiceAmount < 800 の場合は「Receives a gif voucher (ギフト券を受領)」と表示
- InvoiceAmount >= 800 の場合は、「Receives a discount voucher for the next invoice (次回の請求時に使える割引券を受領)」と表示
上記の処理を行うには、はじめにグリッド内に &Text (character データタイプ) という名前の変数を追加します。そして、Load イベントでグリッドに各行を追加する処理の直前に、InvoiceAmount の値を評価して &Text 変数にテキストを割り当てるコードを次のように記述します:
Event Load
If InvoiceAmount < 800
&Text = "Receives a gif voucher"
else
&Text = "Receives a discount voucher for the next invoice"
endif
Endevent
重要: Load イベントのコードには Load コマンドがないことに注目してください。Web パネルにベーステーブル (Invoice) があるため、グリッドに各行のデータが自動的にロードされるのと同様に、Invoice 物理テーブルに対するクエリも自動的に実行されます (各行をロードする直前に Load イベントが実行されるため、各行のデータが自動的にロードされる直前に &Text 変数に該当するテキストが代入されて表示されます)。
このコマンドは、実際に行をロードする前に、行をロードするかどうかを評価する必要がある場合にのみ必要です。ナビゲーションされた請求書ごとに、プロシージャーを使用していくつかのことを検証する必要があるとします。プロシージャーの戻り値に応じて、行をグリッドにロードするかどうかを評価する必要があります。次のコードを適用することで、それを行うことができます。
Event Load
&Ok = SeveralValidations(InvoiceId) //&Ok: Boolean variable
If &Ok
Load
endif
Endevent
ここでは、各行をロードする前に条件を評価しています。True であればその行をロードしますが、True でない場合はロードは行われません。
注: Load コマンドは、モバイルアプリケーションでこのような処理をする場合に使用できる唯一のコマンドです。このような処理では、
Grid Load メソッドは使用できません。
Load イベント
Grid Load メソッド