【FileMaker】続々・カテゴリごとに管理番号を振る 最大値に追加

カテゴリごとに管理番号を振る」回と「【FileMaker】続・カテゴリごとに管理番号を振る インポート編」の続々編です。(こんなに続くとは、、、)
最初の記事はリレーションシップで自己参照をして連番していました。
このやり方は同じカテゴリのデータ数を集計して採番しているので、データが物理削除されて管理番号が欠けてしまった場合、削除した管理番号を採番してしまう可能性があります。
データが物理削除されないケース(削除フラグを設けているなど)ではこのやり方で十分ですが、物理削除をしている場合はちょっと困りますよね。

FileMakerの関数には、FileMaker Pro 7.0で追加されたSerialIncrementがありますので、これを使って採番の最大値に増分を加えていく手段ができます。
「データベースのフィールド設定で、シリアル番号を設定すればいいんじゃね?」と思った方。
qiita20190724_1.png
ある意味正解で、固定のテキスト+番号であればこれで十分です。

ですが、お題は「カテゴリごと」ですので、固定のテキストではないところが痒いです。
ということで、動きです。

動き

カテゴリごとの管理番号で2000番があったとします。
その前の番号が17なので、ざっくりデータが削除されていることがわかります。
qiita20190724_2.png

ここにカテゴリにデータを1件追加します。
最終番号である2000に増分1の管理番号が振られました。
qiita20190724_3.png

実装

これは以前と同じようにスクリプトトリガで実装しています。
qiita20190724_4.png

実装でのポイントは、ソート順です。
検索した後にソートし、最後の管理番号にたどり着きます。
その番号を使って、SerialIncrementで増分していきます。
qiita20190724_5.png

最後は、元のデータに戻すべくレイアウト用のソートをします。(この動きは管理番号を振ること自体にはなんの影響もありません)
qiita20190724_6.png

最初のソート後にデータの移動をしているところがあります。
これは、ソート後の最終値を拾いに行った後、まだ管理番号が振られていないデータ(最初の行)まで移動します。
ここも、重要ですね。
これを忘れると、既存の管理番号を上書きしてしまう可能性がありますので注意です。
qiita20190724_7.png

一つの実装方法です

管理番号を振るのは業務に応じて様々なケースがあると思います。
このやり方以外にもあると思いますが、一つの実装方法として参考にしてください。