Google Formでログインなしで登録時に重複を削除する
こんばんは。
昨日の続きです!
実現したい事
-
Google Formで時間帯予約フォームを作成
-
予約データをスプレッドシートと連携
-
各時間帯には上限があり残席数を知らせたい(予約できなくする等の制限は不要)
-
登録時にユーザーIDを入力してもらい予約のキャンセル/変更ができる
-
スプレッドシートのデータを検索し現在の登録状況を検索/表示する事ができる
-
尚、ユーザーはGoogleアカウントでログインしない事とする(震
はじめに・・・
正直今回は苦肉の策と言いますか、ユーザー次第的なところが強いので、あまりオススメできません。(泣
一度登録した内容を編集したい場合や、回答の重複を避けたい場合はGoogleアカウントでログインして頂く事を強くオススメします。
どうしよう・・・
今回、要件にユーザーの方にはGoogleアカウントでログインしないとあったので、どうしたものか考えに考えた結果、ユーザの方には予め決められたユーザーIDを入力してもらい、GASを使ってGoogle Formのリクエスト送信時に同じIDが過去に登録されていた場合は古いIDのレコードを削除するといったものにしました。
懸念事項
スプレッド上のレコードを削除する為、Google Formの回答とスプレッドシートのレコードがアンマッチになる
ユーザーIDを少しでも間違えて入力したら積む
とりあえず実装してみる
こんな感じです。
データを削除しようと思ったのですが、後から削除したデータはどんなものだったのか?と言うのを確認できる様にキャンセルシートを用意し、レコードを移動するイメージで作成してみました。
苦しい感じですが、以下の様な処理を行なっています。
- 自身のスプレッドシートから回答シートとキャンセルシートを取得
- 直前に入力したレコードよりユーザーIDを取得
- findRow関数で対象のユーザーIDを含むレコードが存在するかチェック
- 対象レコードが存在した場合、キャンセルシートにレコードをコピペ
- 回答シートよりコピペしたレコードを削除
2の直前に入力したレコードよりユーザーIDを取得したところで、複数ユーザーが同時にフォームに入力した場合はどうなるのか同僚にお願いして何度かテストしましたが、40回ほど実験して100%自身の入力したレコードだったので大丈夫かと怪しい処理を書いてますwww
まとめ
- 今回の方法は絶対にオススメしません
- 重複を削除したい場合はGoogleアカウントでログインしましょう
まぁ結果はともあれ、良く頑張った!!と思うwwww