OnRecordLoadで権限別UI切替実装術
スクリプト

OnRecordLoadで権限別UI切替実装術

2026年6月19日 admin スクリプト

FileMakerで業務システムを作っていると、「ログインする人の権限によって、見せる画面を変えたい」「同じレイアウトでも、権限によって使えるボタンを出し分けたい」という場面がよくあります。
しかし、レイアウトをユーザーごと・部署ごとに増やしていくと、管理が大変になり、修正も手間がかかってしまいます。

この記事では、スクリプトトリガー「OnRecordLoad(レコードロード時)」を使って、権限別にUI(画面表示)を切り替えるシンプルな実装方法を、できるだけ専門用語を控えて解説します。

OnRecordLoadで何ができるのか?

OnRecordLoadは、その名のとおり「レコードが読み込まれたタイミング」で自動的に起動できるスクリプトトリガーです。
例えば、次のようなときに動きます。

  • 検索結果をスクロールして、別のレコードに移動したとき
  • ポータル内で行を切り替えたとき
  • スクリプトで「レコードへ移動」を実行したとき

この「レコードが表示される瞬間」に、ユーザーの権限をチェックして、ボタンの表示・非表示や、フィールドの編集可否を切り替えてあげれば、常にその人に合ったUIを表示することができます。

権限別UI切り替えの全体イメージ

ここでのゴールは、次のようなイメージです。

  • 管理者:すべてのボタンとフィールドを使える
  • 一般ユーザー:一部の編集ボタンが隠れる、または無効化される
  • 閲覧専用ユーザー:編集ボタンは表示しない、フィールドも編集不可にする

この「区分」を判断する材料として、代表的には次のような情報を使います。

  • アカウント名(Get ( アカウント名 ))
  • 権限セット名(Get ( 権限セット名 ))
  • ログインユーザー情報を保存したテーブル(ユーザーマスタ)

OnRecordLoadでこれらをチェックし、条件によって「隠す」「グレーアウト」「ボタン先を変える」などの処理を行います。

基本パターン1:ボタンの表示・非表示を切り替える

一番扱いやすいのは「ボタンそのものを隠す」方法です。
FileMakerでは、各オブジェクトに「非表示条件」を設定できます。この条件に、権限に応じた計算式を書いておきます。

流れは次のようになります。

  1. OnRecordLoadで「現在のユーザーの権限区分」を変数にセットする
  2. 各ボタンの「非表示条件」に、その変数を使った条件を書く

例として、OnRecordLoadで以下のようなスクリプトを実行します。

// 現在の権限セット名を取得
Set Variable [ $$role ; Value: Get ( 権限セット名 ) ]

次に、レイアウト上の「削除ボタン」のオブジェクトに対して、次のような「非表示条件」を設定します。

$$role <> "管理者"

これにより、「管理者」以外の人がレコードを表示したタイミングで、削除ボタンは非表示になります。
OnRecordLoadはレコードが切り替わるたびに走るので、ユーザーがレコードを移動しても、一貫して権限に応じたUIになります。

基本パターン2:フィールドの編集可否を変える

「ボタンを隠すだけでは不安」「フィールドの編集自体を制限したい」という場合は、フィールド側に条件付き書式や、アクセス権限を組み合わせていきます。

シンプルなやり方としては、見た目上は編集できそうだが、入力しようとすると警告を出して書き換えさせない、という方法があります。

例:

  1. 重要なフィールドの「OnObjectEnter(オブジェクトへ入る)」トリガーを設定
  2. スクリプト内で$$roleをチェックし、「一般ユーザー」や「閲覧専用」なら入力をキャンセル
If [ $$role <> "管理者" ]
  Show Custom Dialog [ "権限エラー" ; "この項目は管理者のみ編集できます。" ]
  Exit Script [ Result: False ] // フィールドに入らせない
End If

OnRecordLoadで決めた$$roleを他のトリガーでも使い回すことで、画面全体で一貫した制御ができます。

ユーザーマスタを使った柔軟な権限制御

権限セット名だけで制御しようとすると、「もう少し細かく制御したい」「部署ごとに権限が違う」といったニーズに対応しづらくなります。

その場合は、次のような「ユーザーマスタ」テーブルを用意しておくと便利です。

  • ユーザーID(アカウント名と紐づく項目)
  • 部署
  • ロール(例:管理者/マネージャー/一般/閲覧専用など)
  • 機能ごとのフラグ(例:商品編集可、売上閲覧可など)

OnRecordLoadの最初で、

  1. Get ( アカウント名 ) で現在のアカウント名を取得
  2. ユーザーマスタから該当ユーザーのレコードを検索
  3. ロールやフラグを複数のグローバル変数($$)にセット

という処理を行い、あとはボタンやフィールドの表示条件に、これらのフラグを使います。

こうしておくと、新しいルールが必要になったときでも、レイアウトやスクリプトを大きく変えずに、マスタデータを直すだけで運用を変えられるため、保守がぐっと楽になります。

実装時の注意点とコツ

OnRecordLoadで権限別UI切り替えを実装するときは、次のポイントを意識すると運用が安定します。

  • 複雑な処理はトリガーに直接書かない
    OnRecordLoadに処理を詰め込みすぎると、レコード移動が重くなります。処理内容はできるだけ別スクリプトにまとめ、読みやすく保ちます。
  • トリガーの実行順序を意識する
    同じレイアウトに複数のトリガー(OnRecordLoad、OnLayoutEnterなど)を設定していると、どちらが先に動くかで結果が変わることがあります。テストをしながら順番を確認します。
  • UIだけに頼らず、アクセス権限も必ず設定する
    ボタンを隠しても、スクリプトや別画面から編集できてしまう可能性があります。重要なデータは、必ずFileMakerのアカウント・権限セット側で制限をかけておきましょう。

まとめ:OnRecordLoadで「権限にやさしい」画面を実現

OnRecordLoadを使った権限別UI切り替えは、ポイントを押さえれば難しいものではありません。

  • レコード表示のタイミングで権限情報を変数にセットする
  • ボタンやフィールドの「非表示条件」「トリガー」でその変数を参照する
  • 必要に応じてユーザーマスタを作り、柔軟なロール管理を行う

こうした仕組みを取り入れることで、ユーザーごとに「見せたいものだけを見せる」安全で分かりやすい画面を作ることができます。
レイアウトを増やしすぎずに運用できるため、保守や改修のコスト削減にもつながります。

※ 本稿は、生成AIを使用して執筆しています。重要な内容については、必ずご自身でマニュアル等をご確認ください。