SQLを書きたい3人目の人は、再帰検索を行いたいがGXはWITHキーワードを生成する
方法がないので直接書きたい、ということだそうです。
WITHキーワードはすべてのDBMSで実装されているわけではないため、GXでは採用して
いないらしいです。
この問題は確かに難しい。つまり例えば組織データがツリー構造になっていて、それに
付随する発注データを「自分が所属する組織配下」でフィルタリングしたい場合、普通は
どうするでしょうか?
一覧に、所属する組織とともに、以下のような形で表示させるのが一般的かもしれません。
A部の発注
○月×日 商品A 10個 xxx円 A社 担当○○ A部第一課
○月×日 商品B 20個 yyy円 B社 担当×× A部第二課
○月×日 商品C 15個 zzz円 C社 担当△△ A部
○月×日 商品B 30個 aaa円 B社 担当☆☆ A部第三課Xグループ
○月△日 商品D 80個 bbb円 D社 担当△△ A部
しかし、GXにおいて「素直に作らないで」これを実現しようとすると、WorkWithのドリルダウン
機能(Viewタブ)を使うしかありません。
つまり、次のような形になります。
A部の発注
○月×日 商品C 15個 zzz円 C社 担当△△ A部
○月△日 商品D 80個 bbb円 D社 担当△△ A部
↓ドリルダウン(タブへリンク)
A部第三課の発注
(なし)
↓ドリルダウン(タブへリンク)
A部第三課Xグループの発注
○月×日 商品B 30個 aaa円 B社 担当☆☆ A部第三課Xグループ
これでも受け入れてくれるユーザーならこれでいいですが、いかにも使いにくい。
したがって、ツリー構造を表すインデックスのような項目を作り、
A部=1201
A部第三課=4303
A部第三課Xグループ=5719
という組織コードだとすると、A部第三課を「12014303」、A部第三課Xグループを
「120143035719」という値をその項目にセットしておく。そして検索時は検索したい組織コード
と前方一致するものをすべて表示すればいいのですが、それではインデックス値を
ユーザーが知っていなければならない。そんなことはまずありえず、知っているのは
通常の組織コードのみです。
したがって、例えばA部第三課配下を検索したい場合、
①4303を入力→②4303のインデックス値12014303を抽出→③前方一致で検索
という風に、間に物が挟まった検索になってしまいます。
「検索ボタン」が付いていればボタンが押されたときに②の作業をすればよいのですが、
GXデフォルトの状態では自動検索を行うため、変換するには検索条件内にプロシージャを
噛ませなければならず、例えばSQLのWhere条件に関数を挟んだ時と同じように
レスポンスが悪化してしまいます。
自動リフレッシュを止めてボタンを表示させたとしても、単なるWebPanelならば
問題ありませんが、作らない開発で推奨するWorkWithを使用している場合は変換ロジックを
記述すると自動生成対象外(赤マーク)になってしまうため、やはり検索条件にプロシージャを
噛ませるしかなくなります。
ここら辺はなんとかしてほしいところです。
ただしよく業務を考えると、このような検索が必要な場合というのは、ログインしたユーザーに
よって検索する組織は決まっているはずで、ログインと同時にインデックス値を予め取得
できるはずなので、それほど気にしなくてよいかもしれません。