FileMakerで業務システムを作っていると、「ログインする人の権限によって、見せる画面を変えたい」「同じレイアウトでも、権限によって使えるボタンを出し分けたい」という場面がよくあります。
しかし、レイアウトをユーザーごと・部署ごとに増やしていくと、管理が大変になり、修正も手間がかかってしまいます。
この記事では、スクリプトトリガー「OnRecordLoad(レコードロード時)」を使って、権限別にUI(画面表示)を切り替えるシンプルな実装方法を、できるだけ専門用語を控えて解説します。
OnRecordLoadで何ができるのか?
OnRecordLoadは、その名のとおり「レコードが読み込まれたタイミング」で自動的に起動できるスクリプトトリガーです。
例えば、次のようなときに動きます。
- 検索結果をスクロールして、別のレコードに移動したとき
- ポータル内で行を切り替えたとき
- スクリプトで「レコードへ移動」を実行したとき
この「レコードが表示される瞬間」に、ユーザーの権限をチェックして、ボタンの表示・非表示や、フィールドの編集可否を切り替えてあげれば、常にその人に合ったUIを表示することができます。
権限別UI切り替えの全体イメージ
ここでのゴールは、次のようなイメージです。
- 管理者:すべてのボタンとフィールドを使える
- 一般ユーザー:一部の編集ボタンが隠れる、または無効化される
- 閲覧専用ユーザー:編集ボタンは表示しない、フィールドも編集不可にする
この「区分」を判断する材料として、代表的には次のような情報を使います。
- アカウント名(Get ( アカウント名 ))
- 権限セット名(Get ( 権限セット名 ))
- ログインユーザー情報を保存したテーブル(ユーザーマスタ)
OnRecordLoadでこれらをチェックし、条件によって「隠す」「グレーアウト」「ボタン先を変える」などの処理を行います。
基本パターン1:ボタンの表示・非表示を切り替える
一番扱いやすいのは「ボタンそのものを隠す」方法です。
FileMakerでは、各オブジェクトに「非表示条件」を設定できます。この条件に、権限に応じた計算式を書いておきます。
流れは次のようになります。
- OnRecordLoadで「現在のユーザーの権限区分」を変数にセットする
- 各ボタンの「非表示条件」に、その変数を使った条件を書く
例として、OnRecordLoadで以下のようなスクリプトを実行します。
// 現在の権限セット名を取得
Set Variable [ $$role ; Value: Get ( 権限セット名 ) ]
次に、レイアウト上の「削除ボタン」のオブジェクトに対して、次のような「非表示条件」を設定します。
$$role <> "管理者"
これにより、「管理者」以外の人がレコードを表示したタイミングで、削除ボタンは非表示になります。
OnRecordLoadはレコードが切り替わるたびに走るので、ユーザーがレコードを移動しても、一貫して権限に応じたUIになります。
基本パターン2:フィールドの編集可否を変える
「ボタンを隠すだけでは不安」「フィールドの編集自体を制限したい」という場合は、フィールド側に条件付き書式や、アクセス権限を組み合わせていきます。
シンプルなやり方としては、見た目上は編集できそうだが、入力しようとすると警告を出して書き換えさせない、という方法があります。
例:
- 重要なフィールドの「OnObjectEnter(オブジェクトへ入る)」トリガーを設定
- スクリプト内で$$roleをチェックし、「一般ユーザー」や「閲覧専用」なら入力をキャンセル
If [ $$role <> "管理者" ]
Show Custom Dialog [ "権限エラー" ; "この項目は管理者のみ編集できます。" ]
Exit Script [ Result: False ] // フィールドに入らせない
End If
OnRecordLoadで決めた$$roleを他のトリガーでも使い回すことで、画面全体で一貫した制御ができます。
ユーザーマスタを使った柔軟な権限制御
権限セット名だけで制御しようとすると、「もう少し細かく制御したい」「部署ごとに権限が違う」といったニーズに対応しづらくなります。
その場合は、次のような「ユーザーマスタ」テーブルを用意しておくと便利です。
- ユーザーID(アカウント名と紐づく項目)
- 部署
- ロール(例:管理者/マネージャー/一般/閲覧専用など)
- 機能ごとのフラグ(例:商品編集可、売上閲覧可など)
OnRecordLoadの最初で、
- Get ( アカウント名 ) で現在のアカウント名を取得
- ユーザーマスタから該当ユーザーのレコードを検索
- ロールやフラグを複数のグローバル変数($$)にセット
という処理を行い、あとはボタンやフィールドの表示条件に、これらのフラグを使います。
こうしておくと、新しいルールが必要になったときでも、レイアウトやスクリプトを大きく変えずに、マスタデータを直すだけで運用を変えられるため、保守がぐっと楽になります。
実装時の注意点とコツ
OnRecordLoadで権限別UI切り替えを実装するときは、次のポイントを意識すると運用が安定します。
- 複雑な処理はトリガーに直接書かない
OnRecordLoadに処理を詰め込みすぎると、レコード移動が重くなります。処理内容はできるだけ別スクリプトにまとめ、読みやすく保ちます。 - トリガーの実行順序を意識する
同じレイアウトに複数のトリガー(OnRecordLoad、OnLayoutEnterなど)を設定していると、どちらが先に動くかで結果が変わることがあります。テストをしながら順番を確認します。 - UIだけに頼らず、アクセス権限も必ず設定する
ボタンを隠しても、スクリプトや別画面から編集できてしまう可能性があります。重要なデータは、必ずFileMakerのアカウント・権限セット側で制限をかけておきましょう。
まとめ:OnRecordLoadで「権限にやさしい」画面を実現
OnRecordLoadを使った権限別UI切り替えは、ポイントを押さえれば難しいものではありません。
- レコード表示のタイミングで権限情報を変数にセットする
- ボタンやフィールドの「非表示条件」「トリガー」でその変数を参照する
- 必要に応じてユーザーマスタを作り、柔軟なロール管理を行う
こうした仕組みを取り入れることで、ユーザーごとに「見せたいものだけを見せる」安全で分かりやすい画面を作ることができます。
レイアウトを増やしすぎずに運用できるため、保守や改修のコスト削減にもつながります。