なぜSQLを書きたいのか その3 | エーフラット・ジャパンの作らない開発G#

エーフラット・ジャパンの作らない開発G#

自動生成開発ツールGeneXusを使った「作らない開発」に関するブログ

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を使用している場合は変換ロジックを

記述すると自動生成対象外(赤マーク)になってしまうため、やはり検索条件にプロシージャを

噛ませるしかなくなります。

 

ここら辺はなんとかしてほしいところです。

 

ただしよく業務を考えると、このような検索が必要な場合というのは、ログインしたユーザーに

よって検索する組織は決まっているはずで、ログインと同時にインデックス値を予め取得

できるはずなので、それほど気にしなくてよいかもしれません。