FileMakerで一覧画面を作っていると、「さっき使ったソート順をもう一度使いたい」「ユーザーが自分で並べ替えた順番を、別のスクリプトでも流用したい」と感じることはないでしょうか。ところが、スクリプトステップでソート条件をそのまま復元・再利用する方法は、意外と知られていません。
この記事では、なるべく専門用語を避けながら、「スクリプトでソート条件を保存して、あとから呼び出す方法」を整理してご紹介します。日々の開発や運用の中で、「またソート条件を作り直すの?」という手間を減らすためのヒントとしてお読みください。
ソート条件を「復元・再利用」したい場面とは?
まず、どんな時にソート条件の再利用が役立つかを整理してみます。
- ユーザーが画面上で自由に並べ替えた結果を、印刷用レイアウトでも同じ順で使いたい
- 月次レポートやCSV出力など、同じソート順を使う処理がいくつもある
- 一覧画面AとBで、同じ並び順を維持したい
- テスト環境と本番環境で、ソート条件をコピペせずに移したい
こうした場面では、「一度決めたソート条件を、どこかに保存して、スクリプトから簡単に呼び出せる」と管理がぐっと楽になります。
基本の考え方:ソート条件は「データとして」扱う
FileMakerのソート条件は、通常はスクリプトステップ「レコードのソート」で個別に設定します。しかしこれだと、同じ条件を別のスクリプトで使いたい時、もう一度同じ設定をやり直す必要があります。
そこで発想を切り替えて、「ソート条件そのものを、フィールドに文字情報として保存してしまう」という考え方を採用します。たとえば、次のような情報をひとまとめにして保存します。
- どのフィールドでソートするか
- 昇順(小さい順)か降順(大きい順)か
- 複数フィールドでの優先順位
これを「ソート定義テーブル」のような専用テーブルに保存しておけば、スクリプトから読み出して、毎回同じルールで並べ替えることができます。
ソート定義テーブルを作るステップ
具体的な作り方を、できるだけシンプルに説明します。
-
ソート定義用のテーブルを作成
例として、以下のようなフィールドを持つテーブルを用意します。- 名称(テキスト):ソート条件の名前(例:"売上日+顧客名")
- レイアウト名(テキスト):主に使うレイアウトの名前
- ソート式(テキスト):ソートルールを文字列で保存する場所
-
ソート式の書き方を決める
たとえば、カンマ区切りで「フィールド名:順序」を並べる形式にします。売上日:ASC,顧客名:ASC 売上日:DESC,登録日:ASC 顧客コード:ASCASCは昇順、DESCは降順、といったルールを自分で決めておきます。
-
あらかじめよく使うソート定義を登録
手作業でレコードを登録しておき、「売上画面でよく使う順番」「請求書一覧で使う順番」といった基本パターンを用意します。
スクリプトでソート条件を読み出して適用する
次に、保存しておいたソート式をスクリプトから使う流れを説明します。
-
使いたいソート定義レコードを特定する
スクリプトでは、スクリプト引数やグローバルフィールドなどで「ソート定義ID」や「名称」を受け取り、そのレコードを検索または関連レコードへ移動(GTRR)で取得します。 -
ソート式(テキスト)を変数に格納
対象レコードの「ソート式」フィールドを、$sortSpec などの変数に入れます。 -
テキストを分解して、ソート条件に変換
$sortSpec をカンマで分割し、1件ずつ「フィールド名」と「順序」に分けて処理します。実装方法はいくつかありますが、代表的なパターンは次の2つです。-
パターンA:計算でソート用フィールドを作る
フィールド名をそのまま動的に指定するのではなく、「汎用ソート用の数値/テキストフィールド」をあらかじめ複数用意し、計算スクリプトなどで値を埋めておき、それらを基準にソートする方法です。ソート自体は「レコードのソート」ステップであらかじめフィールドを指定しておき、どのフィールドにどの値を入れるかをソート式に基づいて計算で制御します。 -
パターンB:If分岐でソートステップを切り替える
ソート式の内容を見て、「もし $sortSpec = ‘売上日:ASC,顧客名:ASC’ なら、このソートステップを実行」といった分岐を用意する方法です。完全な自動化ではありませんが、あらかじめ決めた数パターンだけを使い回したい時に割り切って使えます。
-
-
「レコードのソート」ステップを実行
最終的には、「レコードのソート」ステップをスクリプトの中で呼び出し、事前に設定しておいたソート条件を適用します。
FileMakerでは、ソート対象のフィールドを計算式から直接動的に指定することはできないため、「テキストを読み取って、あらかじめ用意したソートパターンを選ぶ」「汎用的な順位フィールドを作って、それをソートする」といった工夫がポイントになります。
ユーザー操作からソート条件を「保存」する
次は逆方向、つまり「ユーザーが自分でソートした結果を、定義テーブルに保存する」パターンです。
-
ユーザーにソートしてもらう
通常の「レコードのソート」ダイアログを使って、ユーザーに好きな順序で並べ替えてもらいます。 -
ソート順フィールドを用意する
レコード側に「並び順(数値)」のようなフィールドを作り、現在の順番を1から順番に書き込むスクリプトを用意します。ループで1レコードずつ回しながら、$n をカウントアップして設定していくイメージです。 -
その並び順を「ユーザーごとのソート」として保存
ソート定義テーブルに、ユーザーIDや用途名と一緒に「並び順の値」を保存しておくと、あとから「このユーザーが決めた順番」を復元しやすくなります。 -
復元時は「並び順」フィールドでソート
再利用したい場面では、保存しておいた「並び順」フィールドを使ってソートするだけで、前回と同じ順序を再現できます。
この方法は「どのフィールドでソートしたか」までは分かりませんが、「見た目の順番そのもの」を保存しておきたい時に便利です。
運用上のコツと注意点
- 名前を分かりやすく
ソート定義の「名称」は、ユーザーにも開発者にも分かりやすく付けましょう。例:「売上一覧:日付+顧客名 昇順」など。 - レイアウトごとに分ける
同じテーブルでも、レイアウトごとに欲しい並びが違うことが多いです。レイアウト名フィールドで紐づけておくと管理しやすくなります。 - 本番前に想定パターンを洗い出す
「よく使う順番」を事前にまとめてソート定義テーブルに登録しておくと、スクリプトから呼び出すだけで済みます。 - 完全自動化にこだわりすぎない
FileMakerの仕様上、完全に自由なフィールド指定でソートを切り替えるのは難しい部分もあります。現実的には「よく使う10パターンを再利用できればOK」くらいの割り切りもおすすめです。
まとめ:ソート条件を「仕組み」として扱う
ソート条件は、つい「その場で設定するもの」と考えがちですが、「データとして保存し、スクリプトで読み出して再利用する」仕組みを作ると、レイアウト追加や帳票追加のたびにソート条件を作り直す手間が大きく減ります。
ポイントは、次の3つです。
- ソート条件をテキストとして保持する「ソート定義テーブル」を用意する
- あらかじめよく使うソートパターンを登録しておき、スクリプトから呼び出す
- ユーザーが決めた並び順そのものを保存したい場合は、「並び順フィールド」を活用する
これらを組み合わせることで、ソートに関する設定を「一度作れば何度も使える資産」に変えていくことができます。運用中のファイルに少しずつ取り入れて、自分のチームやシステムに合った形に育てていってみてください。