Tips No.005 【ポータルの可変ソート】

ポータルの可変ソート

公開日:2014/10/01

今回は「ポータル内の行を自由にソートする」をテーマにTipsを作成してみようと思います。

実は、難点もありますが、技術的にさほど難しいものでもなく、その実装方法は様々なWEBサイトで紹介されています。斯く言う私も、「他のところ」で紹介した事があります。ですので、当サイトでは、もうちょっとだけ手間を掛けて、利便性を高めてみます。

では、その「手間」とは何かというと…

  • 昇順ソートだけでなく降順ソートも可能にする
  • ソートの対象になるフィールドのフィールドタイプを考慮する
  • レコードごとにポータルのソート順の設定を可能にする

これらの条件を付加しました。

では、実際にTipsをご覧きますが、今回のカギはテーブル[S000_Sort] と、テーブル[N005_Portal_Sub] にある計算フィールド4つです。先ずはTipsのテーブル構成を見てみましょう。

■テーブル
[N005_Portal] - 当Tipsのメインテーブル
[N005_Portal_Sub] - テーブル[N005_Portal] に紐付くレコードを保持
[S000_Sort] - ソート条件を保管するテーブル

最初のカギ、テーブル[S000_Sort] には、ソートの対象になるフィールド名を保管するフィールド[Ft_フィールド] と、ソート順を保管するフィールド[Fn_ソートFg] があります。
もし、簡略的に構築を行うのであれば、これらの2フィールドは、テーブル[N005_Portal] に持たせてしまって、テーブル[S000_Sort] は作成しないといった方法を採ることもできます。しかしながら、テーブル[N005_Portal] はメインテーブルですので、「ソート条件の変更」程度で当該レコードの修正者や修正日時が更新されるという事態は避けた方が賢明です。そのような理由からテーブル[S000_Sort] を追加しています。
但し、今回のTipsのような「レコードごとにポータルのソート順の設定を可能にする」条件がなければ、ソート条件はグローバルフィールド ( もしくは変数 ) で保持すれば良いので、上記を考慮する必要はありません。

それでは次のカギ、テーブル[N005_Portal_Sub] にある計算フィールド4つを見てみます。

■フィールド(テーブル[N005_Portal_Sub])
[Cn_昇順ソート] - 数字タイプの計算フィールド // 昇順ソート用
[Ct_昇順ソート] - テキストタイプの計算フィールド // 昇順ソート用
[Cn_降順ソート] - 数字タイプの計算フィールド // 降順ソート用
[Cn_降順ソート] - テキストタイプの計算フィールド // 降順ソート用

これらのフィールドは全てポータル設定の「ポータルレコードのソート」で使用しています。そして、これらの計算フィールドでは、テーブル[S000_Sort] に保持しているソート条件を元に、値を返す処理をしています。
その計算式には、ソート順は昇順か降順か、そしてソート対象のフィールドタイプは何か、を判断し、当該条件に添う場合にだけ適切な値を取得するという内容を記述しています。つまり、この4フィールドの内、値を返すのは1フィールドだけです。ですので、4フィールド全てをポータル設定でソート指定しても、思い通りのソート順が実現するという仕組みです。

なお、冒頭で「難点もある」と記したのは、ソート順の対象になるフィールドは「必ず1つだけ」ということ、フィールドに索引が付けられないので、状況次第でソート処理が遅くなる、という2点です。

今回のTipsはお役に立ちましたか?
それにしても、レコードごとにソート順の設定を可能にしてはみたものの……需要あるのかな、コレ?

- ダウンロード -