【FileMaker】GetNextSerialValueのわな（大げさ）

ヘルプには関数の説明は載っているけれど、前提条件が必要だよね、と思ったので記録。

# GetNextSerialValueとは
[GetNextSerialValue](https://fmhelp.filemaker.com/help/18/fmp/ja/index.html#page/FMP_Help%2Fgetnextserialvalue.html)は、フィールドに設定されているシリアル番号の次の値を取得します。
解説では、「ファイル名のフィールド名の次のシリアル番号を返します。」と載っていますが、これでは実は不十分ですぐに使えません。

シリアル番号は、その名の通りシリアル（連続的）な値になります。
1ずつ増加する場合は1,2,3,4,5,,,となり、3ずつ増加する場合は1,4,7,10,,,と続いていきます。
食べるシリアルではありません。（食べたら増えずに減ります）

# 何が足りないのか
足りないのは、フィールドのシリアル番号設定です。
<img width="523" alt="シリアル番号" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/96b71e7a-083e-a05f-4148-737530cd2c36.png">
このシリアル番号のチェックをつけていない場合、新規レコードを作ってもスクリプトでGetNextSerialValueを使ってもシリアル番号は自動で設定されません。

# ではどうすれば使えるのか
GetNextSerialValueを使いたい場合は、こんな↓感じで先に設定します。
<img width="523" alt="使い方" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/6b226b19-451e-ad9a-906a-aecb7b5387bb.png">
この場合は、新規レコードを作成した際に自動的に番号が2に設定されます。
増分が1となっているので、次にくる番号は2です。
仮に増分が2になっている場合、「次の値」2を採番した次に来る番号は4です。

# 数字しか指定できないの？
数字だけではなく、実は文字列も指定できます。
<img width="522" alt="文字指定" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/1997821a-a307-c18b-77b0-7052fbf1a7c7.png">
この例では、"item"という文字列を接頭辞として、4桁の数字の連番にしたい、という意図になります。
順々にレコードを増やしていくと、こんな↓感じで連番が自動で割り振られます。
<img width="282" alt="スクリーンショット 2020-01-25 14.34.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/8cc25557-dca4-d20e-ca46-bbba57a3ff35.png">


#スクリプトはどうなるの？
先ほどと同じような感じで"item"接頭辞＋５桁の数字の連番をスクリプトで実装する場合は、↓のようなシリアル番号の設定をしておき、
<img width="522" alt="スクリーンショット 2020-01-25 14.40.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/b4a35e80-1590-ebbf-9ca8-932ccc12e82c.png">
↓のようなスクリプトを用意します。
<img width="786" alt="スクリーンショット 2020-01-25 14.30.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/ab72d70a-b2cf-b955-7e88-12ee9e2bc4d4.png">

# 違いがわからない。。。
シリアル番号の設定していない時にスクリプトを実行すると、下の図の(1)のように連番がつきません。
また、単純にFileMakerの「＋」ボタンでぽんぽんレコードを増やしていっても連番も何もない状態でレコードが出来上がります。(2)
<img width="273" alt="スクリーンショット 2020-01-25 14.46.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/6b64b422-de55-34e7-abee-d53768d62344.png">


# フィールドのオプション設定だけやってればいんじゃない？
と思うところですが、使い道として接頭辞を場面ごとに切り替えたい場合などに便利です。
例えば、レストラン、カフェ、ファストフードというようなカテゴリを接頭辞として番号を作りたい場合は、実行するスクリプトに引数でカテゴリを指定して連番を作成できます。
<img width="769" alt="スクリーンショット 2020-01-25 14.55.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/91d734b7-8386-8f3f-755d-a850256c61c3.png">
今回はレイアウトに配置したそれぞれのボタンのスクリプトの引数に接頭辞を指定します。
<img width="790" alt="スクリーンショット 2020-01-25 14.58.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/3128d2fc-7b54-3f3b-436f-87f873b3aecf.png">
ボタンをそれぞれ押していくと、連番で商品番号が作成されます。
<img width="521" alt="スクリーンショット 2020-01-25 14.55.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/2977f41e-77e4-7c32-7515-f20ba098c723.png">

# もっと高度なことはできるの？
GetNextSerialValueは、フィールド設定の「シリアル番号」設定を元に、単純にフィールドに指定された次の値と増分を指定して連番を作成する仕組みを提供しています。
単純に連番が作れるのであれば、これだけで十分ですが、例えばカテゴリごとに連番を作りたい場合はGetNextSerialValueではなく別な手段も使えます。
そんな記事も書いていますので、シリアル番号を振るのに物足りなくなったら参考にしてみてください。
[【FileMaker】カテゴリごとに管理番号を振る （追記あり）](https://qiita.com/tyuma/items/9afe39bb9575e7b3a244)