はじめに
「FileMaker でソート順フィールドを見せずにソートされた値一覧を作る方法(基本)」というエントリで言及した手法には、ソートされるレコード数が100を越えないこと…という制限があります。
※ テキストフィールドの索引は最初の100文字という FileMaker の仕様上の制限に因ります。
その対策案としてこのエントリをアップします。
なお、「なにがうれしいのか?」「目的は?」といったことについては、「FileMaker でソート順フィールドを見せずにソートされた値一覧を作る方法(基本)」をご覧下さい。
基本の考え方
上記の基本編での解法の考え方は…
(値一覧に表示される)ソートしたいフィールドの頭に、「見えない(けれど存在する)文字」を(ソート順フィールドの値で指定された個数分)つけるように設定されたフィールドを、値一覧設定の [2番目のフィールド]として指定し、([2番目のフィールドの値のみを表示] にチェックをつけて)2番目のフィールドでソートしてやることで、任意のソート順フィールドの値で指定された順番で、値一覧をソート表示する
…というものです。
問題点の確認
ただし、この方法ですと、ソートしたいレコード数が100を越えると…
イコール、ソート順フィールドで指定されている値が100を越えると…
つまり、「見えない(けれど存在する)文字」の数が100を越えると…
「テキストフィールドの索引は最初の100文字まで」という FileMaker の仕様に因って、破綻してしまいます。
解決法の理屈
そこで、最初の100文字を使って、より多くのレコード数に対応するために…
最初の100文字を2進数にしてしまうことで解決します。
二進法では通常 0 と 1 という2種類の文字で表されますが、0/1の代わりに別のふたつの文字を使って代用します。
使える文字の条件は…
- 見えない文字であること
- 文字コード(Unicode)的に(見える)通常の文字より大きなコードであること
- (二進法の)0 の代わりに使われる文字は、1 の代わりに使われる文字よりUnicode 的に小さい値で表される文字であること
ここいらあたりを、社本さん(Facebook) と話していたら、社本さんがデモファイルのUpdateまでしてくれました。
了承を頂いたのでコチラにアップしておきます。
SortViaSortFld_20151117.fmp12
(社本氏によるデモファイル最新版)
社本氏のデモファイルの説明
すでに基本編で使っている「見えない文字」は 通常 BOM と呼ばれる [ZERO WIDTH NO-BREAK SPACE] というもので、Unicode の 65,279番目の文字なので、FileMaker 的には… Char (65279) と表すことができます。
デモファイルでは、[ZERO WIDTH NO-BREAK SPACE] を 1 の代わりにし、 [ZERO WIDTH SPACE](Char (8203))を 0 の代わりにした…二進法表現を、ソートしたいフィールドの値の頭にくっつけています。
このことにより、索引の制限文字数100文字を使って、2の100乗(1.2676506e+30)つまり論理的には、126穰7650秭6002垓2822京9401兆4967億320万5375 までを表すことが可能となりますから、実使用上、無制限と同じような話になります。
ここいらのことをデモファイルでは、ZeroWidthCharAsBinary というカスタム関数に集約しているので、自分のソリューションに簡単に転用できます。
追記 (2015/11/19 10:43:32)
※ デモファイルは、後述する老眼モード問題に鑑み、30桁の二進数表現になっています。(「10億まで扱えたら充分だよね?」社本氏談)
詳しくは、カスタム関数 ZeroWidthCharAsBinary の社本さんによるコメントをご覧下さい。
FileMaker Go v14.0.1 においての問題(老眼モード問題)
追記(2015/06/17 23:21:52)
FileMaker Go 14.0.1(現行)では以下の条件で値一覧が開いたときに頭の文字が切れる現象が確認されました。
追記(2015/11/19 09:53:48)
その後、iOS 9 + FMGo 14.04 の環境で、当該不具合は修正されていることを確認しています。
コメント
[…] この問題の対策済みの方法を「FileMaker でソート順フィールドを見せずにソートされた値一覧を作る方法(応用)」にアップしました。 あわせてご覧下さい。 […]