社内相談の受付フォームに「依頼者メール」と「受付日時」を入力させると、入力間違いや別人のメールアドレスを入れる余地が生まれます。受付時に確定できる情報は、利用者に入力させず自動設定する方が運用しやすくなります。
今回のアプリでは、相談ID、依頼者、受付日時、初期状態をInitial valueで設定し、依頼者と日時を編集できないようにしました。
この記事でわかること
UNIQUEID()、USEREMAIL()、NOW()の使い分け- Initial valueを使う理由
- 登録者と受付日時を編集不可にする考え方
- 自動設定だけでは解決しない注意点
自動設定した4つの項目
Requestsの新規フォームでは、次の値を自動設定します。
| 列 | Initial value | 用途 |
|---|---|---|
| RequestID | UNIQUEID() |
相談を一意に識別する |
| RequesterEmail | USEREMAIL() |
ログインしている登録者を記録する |
| CreatedAt | NOW() |
登録時の日時を記録する |
| Status | "未対応" |
新規相談の開始状態を統一する |
RequestIDは画面から隠し、編集不可にします。RequesterEmailとCreatedAtは画面で確認できても、利用者は変更できない設定にしました。
Initial valueとApp formulaの違いを意識する
Initial valueは、新しい行を作るときの初期値です。登録後にほかの項目を編集しても、通常は初期値を毎回計算し直す用途ではありません。
相談IDや登録者、受付日時は、後の編集で変わってほしくない情報です。そのため、今回の目的にはInitial valueが合います。
一方、常にほかの列から計算し直したい値はApp formulaを検討します。自動設定という言葉だけで選ばず、「登録時に一度決める値か」「行が変わるたびに再計算する値か」で分けると理解しやすくなります。
USEREMAIL()を使う前にサインインを必須にする
USEREMAIL()は、現在サインインしている利用者のメールアドレスを取得するために使います。今回のアプリではGoogleサインインを必須にし、利用者を作成者だけに限定して試作しました。
Google公式のSecurity filterの説明でも、ユーザーのメールアドレスを使ってデータを制限する場合は、ログインを必須にし、所有者列のInitial valueに USEREMAIL() を設定する方法が案内されています。
フォームにメールアドレスの自由入力欄を置く方法とは異なり、通常の画面操作で別人のメールアドレスを入力する余地を減らせます。
ただし、元のGoogleスプレッドシートを編集できる人は、AppSheetのフォームを通らず値を変更できます。自動入力の設定と、データ元の共有権限は別に考える必要があります。
投稿日時にも同じ考え方を使う
Updatesでは、メモID、投稿者、投稿日時を自動設定しました。
UpdateID : UNIQUEID()
AuthorEmail: USEREMAIL()
PostedAt : NOW()
利用者が入力するのは、対象となる相談と対応メモの本文です。誰がいつ追加したかはアプリ側で設定します。
初版の対応メモは依頼者も読める公開メモです。AuthorEmailを自動設定しても、厳格な監査ログになるわけではありません。データ元の所有者による直接編集や、すべての変更履歴を改変不能に保存する仕組みまでは含んでいません。
担当者の候補はUsersから選ぶ
担当者は、登録者とは異なり、管理担当者が選びます。候補を有効な管理者に絞るため、AssigneeEmailのValid_Ifに次の式を設定しました。
SELECT(Users[Email], AND([Role] = "Admin", [Active] = TRUE))
この式は入力候補を絞るためのものです。管理者だけが担当者を編集できるようにする条件は、別途Editable_Ifやテーブル更新モードで設定します。
実際に確認した結果
PCブラウザの実アプリから相談を登録し、RequestID、RequesterEmail、CreatedAtが自動設定され、Statusが未対応になることを確認しました。
一般利用者の役割へ切り替えた状態でも、依頼者と受付日時は編集できず、担当者、期限、対応結果の入力欄は操作できないことを確認しています。
日時は画面とシートに保存されたことを確認しましたが、異なる端末タイムゾーンや深夜の日付変更をまたぐ試験は行っていません。時刻の扱いが重要な業務では、利用端末とデータソースのタイムゾーンを含めて追加確認が必要です。
まとめ
相談ID、登録者、登録日時のように受付時点で決められる情報は、利用者の自由入力にしない方が入力ミスを減らせます。
UNIQUEID()、USEREMAIL()、NOW()をInitial valueに設定し、登録後は編集できないようにするのが今回の基本構成です。ただし、サインイン設定、元シートの共有権限、日時の検証も合わせて考える必要があります。
