オンオブジェクトセーブで「数値の桁区切り」を自動整形したい
売上金額や数量など、FileMakerで数値を扱うレイアウトでは「3桁ごとにカンマ区切り(1,234,567)」で表示したい場面が多くあります。
ところが、ユーザーに自由入力させると「1234567」と続けて入力されてしまい、後から見づらくなったり、入力ミスに気づきにくくなったりします。
そこで便利なのが、レイアウトオブジェクトのトリガ「オンオブジェクトセーブ(OnObjectSave)」を使って、フィールドを保存するタイミングで自動的に桁区切りに整形する方法です。
この方法なら、ユーザーはふだん通り数値を入力するだけで、確定した瞬間にきれいなカンマ付き表示に変わります。
「オンオブジェクトセーブ」とは?
オンオブジェクトセーブは、ユーザーがフィールドの編集を終えて確定する瞬間に動くスクリプトトリガです。具体的には、次のような操作時に発動します。
- Enterキーで確定したとき
- 別のフィールドにフォーカスを移動したとき
- レイアウト上で別のオブジェクトをクリックしたとき
このタイミングでスクリプトを走らせることで、ユーザーの入力内容をいったん受け取り、その場で整形してから保存させる、といった処理が可能になります。
数値の桁区切りだけでなく、日付・電話番号・郵便番号などの「入力ルール」にも応用できますが、今回は数値のカンマ区切りに絞って解説します。
基本的な考え方:数値を受け取り、整形して戻す
自動整形の流れはシンプルです。
- ユーザーがフィールドに数値を入力する(例:
1234567) - オンオブジェクトセーブトリガでスクリプトが起動する
- スクリプト内で「入力値を数値として解釈 → 桁区切り付きのテキストに変換」する
- 変換後の値をそのフィールドに書き戻す
FileMakerには、数値書式を扱うための関数や、桁区切りを付けて表示できるフィールドオプションもあります。
ただし、「表示書式」だけではコピー&ペーストやエクスポート時の表現などで困る場合や、他のシステムとの連携上「常にカンマ付きの文字列にしておきたい」ケースもあります。
そんなときに、オンオブジェクトセーブで値を実際に整形して保存する方法が役立ちます。
準備:桁区切り用のシンプルなスクリプトを作る
まずは、数値フィールドに対して桁区切りを付けるスクリプトを1本用意します。ここでは基本的なイメージを、できるだけ分かりやすく説明します。
-
新規スクリプトを作成
スクリプト名の例:
数値フィールド_桁区切り整形_OnObjectSave -
スクリプトステップの流れ(概要)
- トリガで呼ばれたフィールドの値を取得する
- 数値以外の文字(スペースなど)が混じっていたら取り除く
- 数値として解釈できるかチェックする
- 問題なければ、桁区切り付きのテキストに変換する
- 元のフィールドへ戻す
「どのフィールドから呼ばれたか」を知るには、Get ( アクティブフィールド名 ) や Get ( アクティブフィールドテーブル名 ) などを使う方法もありますが、
初心者の方は、対象フィールドごとに専用のスクリプトを1本ずつ用意するほうが分かりやすいかもしれません。
サンプル:単一フィールドに対する桁区切りスクリプトの例
ここでは、テーブル「受注」のフィールド「受注金額」を想定した簡単な例を示します。
※実際には環境に合わせてフィールド名・テーブル名を置き換えてください。
// 対象:受注::受注金額
Set Variable [ $raw ; Value: GetAsText ( 受注::受注金額 ) ]
// 1. 空欄なら何もしないで終了
If [ IsEmpty ( $raw ) ]
Exit Script [ Result: True ]
End If
// 2. 前後のスペースなどを除去
Set Variable [ $raw ; Value: Trim ( $raw ) ]
// 3. 数値化(数値として解釈)
// GetAsNumber を使うと、数値として読める部分だけを取り出します
Set Variable [ $num ; Value: GetAsNumber ( $raw ) ]
// 4. 数値として読めない場合は、そのまま保存(エラー表示などは状況に応じて)
// ※"0" または "0.0" などの 0 判定は通す
If [
IsEmpty ( $num )
and
PatternCount ( $raw ; "0" ) = 0
]
Exit Script [ Result: True ]
End If
// 5. 桁区切り付きの計算
// 単位を 1(小数なし)、桁区切りオン、通貨記号なしの例
Set Variable [ $formatted ;
Value:
NumToJText ( $num ; 1 ; 0 )
]
// 6. 整形した結果を書き戻す
Set Field [ 受注::受注金額 ; $formatted ]
Exit Script [ Result: True ]
これはあくまで一例で、実務では「マイナス値をどう扱うか」「小数点以下を残すか」などを調整する必要があります。
たとえば、税率計算などで小数が必要なら、小数第2位まで残してフォーマットする計算式に変更します。
フィールドに「オンオブジェクトセーブ」トリガを設定する手順
スクリプトが用意できたら、レイアウト上のフィールドへオンオブジェクトセーブトリガを設定します。
- レイアウトモードに切り替える
- 対象の数値フィールド(例:受注::受注金額)を選択する
- インスペクタの「データ」タブ内にある「スクリプトトリガ…」ボタンをクリックする
- 表示されたダイアログで「オブジェクトを保存する前(OnObjectSave)」にチェックを入れ、先ほど作成したスクリプトを指定する
- レイアウトを保存し、ブラウズモードに戻って動作を確認する
テストするときは、以下のような点を確認しておくと安心です。
- 「1234567」と入力して確定 → 「1,234,567」に変わるか
- 空欄のまま確定したときに、余計な値が入らないか
- マイナス値や小数値を入れても、問題なく整形されるか
- フィールド値をコピーしたとき、期待どおりの形式でコピーされるか
「表示書式」だけで済ませる場合との違い
FileMakerのフィールド設定には、「数値」タブで桁区切り表示を行うための書式設定も用意されています。
表示だけ整えたいのであれば、スクリプトトリガなしでこの機能を使う方が簡単です。
一方でオンオブジェクトセーブによる自動整形は、次のようなケースに向いています。
- 他システムと連携するため、常にカンマ付きのテキストで保存しておきたい
- ユーザーがコピー&ペーストした値も、即座にルールどおりに直したい
- 入力時のルール(整数のみ、小数2桁までなど)を厳密にチェックしたい
用途や要件を踏まえて、「表示書式」で済ませるのか、オンオブジェクトセーブで値そのものを整形するのかを選ぶとよいでしょう。
実務で使いやすくするための工夫
実際の業務システムでは、次のような点をあらかじめ決めておくと、運用トラブルを減らせます。
- マイナス値を許可するかどうか
- 小数点以下の桁数(例:小数第2位まで・小数なしなど)
- 入力エラー時(数字以外が多く含まれるなど)の扱い(エラーダイアログを出すか、そのまま保存するか)
- 印刷レイアウトやエクスポート用には、別途「数値型フィールド」を保持するかどうか
最初はシンプルなルールで運用を開始し、ユーザーの声を聞きながらスクリプトを少しずつ改善していくのがおすすめです。