【GeneXus】Find

残りのFindを書こう(遅い)


結構前のエントリー

想定環境

GeneXus X Ev3 u6
DB:ORACLE (MYSQL環境は吹っ飛びましたw)
言語:Java

DB関係の準備

データは適当に初期データとして100件くらいループで登録しておきます。

For &i = 1 to 100	New	//Transaction2_ID オートナンバー	Transaction2_NAME = "TEST_" + &i.ToFormattedString()	Endnew
Endfor
Commit

 

Transaction3_Transaction2_NAME の式の内容は以下です。

find(Transaction2_NAME, Transaction2_ID = Transaction3_Transaction2_ID, "")

説明すると
取得項目:Transaction2_NAME
取得条件:Transaction2_ID = Transaction3_Transaction2_ID
取得できなかった場合のデフォルト項目:””

ビルドを行いTransaction3に適当にデータを登録します。

 

Transaction3の画面です。

赤枠で囲った部分で既にわかると思いますが
Transaction3_Transaction2_IDという項目に1~100の値を入れると
Transaction2_NAMEが取得できると思います。

確認

適当なプロシージャを作成してどんなSQLが発行されるか確認します。

// とりあえず Transaction3 を全件参照
For each	MSG(Transaction3_ID.ToString().Trim())	MSG(Transaction3_NAME)	MSG(Transaction3_Transaction2_NAME)	MSG("====================================")
Endfor
Return

上記のようなFor eachを記述して自動生成されるJavaコードを見ると
以下のようなSQLが記述されています。

SELECT T2.Transaction2_ID , T1.Transaction3_Transaction2_ID , T1.Transaction3_ID , T1.Transaction3_NAME , COALESCE(T2.Transaction2_NAME, N'') AS Transaction3_Transaction2_NAME
FROM ( Transaction3 T1 LEFT JOIN Transaction2 T2 ON T2.Transaction2_ID = T1.Transaction3_Transaction2_ID )
ORDER BY T1.Transaction3_ID

特にリレーションを使ってなくてもLEFT JOINされています。

まとめ

こんな感じで式項目(Formula)を使用すると
発行するSQLが減ったりしてレスポンスが良くなったりしますので
ぜひ使ってみてはどうでしょうか!!!


参考
Find 式wiki.genexus.jp

以上。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください