AppSheet アプリで「新規登録(Add)時には項目を隠し、編集(Edit)時には表示したい」といった細かな表示制御はよくある要件ですが、Quick-Edit やダイアログ編集では CONTEXT("FormMode")
を使った制御が効かないケースがあります。
本記事では、必須入力用のカラム を活用し、[_THISROW_BEFORE]
を使って 新規か編集か を判別し、確実に表示制御を行う方法をご紹介します。
1. 問題定義
CONTEXT("FormMode")
を用いたShow_If
では、Quick-Edit(インライン編集)やダイアログ編集で期待どおりに動作しない。- フルフォームを2種類用意する手間や、Editable_If でのグレーアウト運用だけでは UX として不十分なケースがある。
そこで着目したいのが「必須入力カラム」です。 新規登録では空、編集では必ず値が入っているこの性質を利用します。
2. 必須入力カラムを使った判別ロジック
AppSheet では、[_THISROW_BEFORE]
を使うと「レコード保存前の既存データ」を参照できます。
Initial Valueが設定された項目では[_THISROW_BEFORE]でも値がセットされてしまうため、入力必須の項目を指定する必要があります。
Show_If
ISNOTBLANK([_THISROW_BEFORE].[必須入力カラム])
- 新規追加(Add):[
_THISROW_BEFORE].[必須入力カラム]
は空 →ISNOTBLANK()
はFALSE
→ 非表示 - 編集(Edit):すでに必須入力カラムに値が入っている →
ISNOTBLANK()
はTRUE
→ 表示
この方法なら、FormMode に依存せず、確実に新規登録/編集を判別できます。
3. 実装手順
- 必須入力用のカラム追加
- 例:
必須入力
(Text 型) - フォームの「必須」設定を ON にし、新規登録時に必ず入力させる
- 例:
- 表示制御を行いたいカラムの設定
- Data ▶ Columns ▶ 対象カラム ▶ Show_If に以下を設定
ISNOTBLANK([_THISROW_BEFORE].[必須入力])
- Data ▶ Columns ▶ 対象カラム ▶ Show_If に以下を設定
- 同期して動作確認
- 新規フォームを開くと対象カラムは非表示
- 既存レコードを編集すると対象カラムが表示
4. Tips & 注意点
- 必須入力カラムには一意性は不要。フォームが開かれた時点で空かどうかだけ判定します。
- 編集画面でも一度未入力のまま保存するワークフローがある場合は、別途
Valid_If
やEditable_If
でガードしてください。 [_THISROW_BEFORE]
は「保存前の値」を参照するため、実績レコードのように新規登録なしで複数行作成するテーブルでは追加のカラムを用意するか工夫が必要です。
まとめ
- Quick-Edit やダイアログ編集でも確実に動作する、新規 vs. 編集判定の手法として 必須入力カラム + [
_THISROW_BEFORE]
を活用できる CONTEXT("FormMode")
に依存しないため、シンプルかつ頑健な表示制御が実現可能