実現したいこと
過去の質問
上記の記事のベストアンサーの上側の方法で受付番号を表示していますが、ほぼ同時(誤差数秒)に複数のグーグルフォームの送信があった場合に同じ受付番号が表示されてしまいます(スプレッドシート上は重複しないが、異なるグーグルフォームの確認メッセージに同じ受付番号が表示される)。
ほぼ同時に送信されても重複表示しないようにする解決策はあるでしょうか?
発生している問題・分からないこと
ほぼ同時刻にグーグルフォームを送信した人に、同じ受付番号が表示されてしまう。
エラーメッセージ
error
1エラーメッセージはでません。
該当のソースコード
GAS
1// 回答が蓄積されるスプレッドシートに 2// 「フォーム送信時」のトリガーを設定し保存する 3// 回答が蓄積されるシート(フォームの回答1など)の 4// タイムスタンプの左に列を挿入し受付番号の列とする。 5function onFormSubmit(e) { 6 if (!e) { 7 console.log('エディタから起動できません。フォームから回答してください。'); 8 return; 9 } 10 const range = e.range; 11 const sheet = range.getSheet(); 12 const row = range.getRow(); 13 //記録された回答の行番号から受付番号を生成し、A列に記録 14 let numberReceipt = 9999 + row; 15 sheet.getRange(row, 1).setValue(numberReceipt); 16 //セクションの説明を次の受付番号に変更 17 const nextNumber = numberReceipt + 1; 18 const form = FormApp.openByUrl(sheet.getFormUrl()); 19 form.setConfirmationMessage(`受付番号は、${nextNumber} です。\n番号を控えておき、問い合わせの際はこの番号をお知らせください。`); 20}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
自動生成メールで、受付番号をお知らせする記事はたくさんありましたが、確認メッセージに表示する記事自体が全然見つけられず、同種のエラーの記事も確認できませんでした。解決する方法はないか教えていただけるとうれしいです。よろしくお願いいたします。
補足
特になし
> ほぼ同時(誤差数秒)に複数のグーグルフォームの送信があった場合
私には、そこまで同時に送信する環境を構築できない(なんどかやっても同時にならない)ので
動作確認ができないのですが、
ロックサービスを使うと実現可能かもしれません。
どなたか、実証できる環境をお持ちの方に回答していただけるといいですね。
コメントありがとうございます。
>同時に送信する環境を構築:スマホとPCでフォームを開いて、予め項目を入力後、同時に送信ボタンを押したり、グーグルクロームの通常ウインドウとシークレットウインドウを2窓で開き、項目を入力後送信ボタンを素早く2つ押すことで対応できると思います。
>同時にならない:スプレッドシートにタイムスタンプが残るのですが、今のところ、タイムスタンプの時差が3秒未満だと、同じ受付番号が表示されてしまい、それ以外だと通常通り違う受付番号が表示されています。
>ロックサービス:情報提供ありがとうございます。調べてみます。
ご提案のシークレットウィンドウでやってみました。
同一番号が表示される動作の機序を再確認できました。
このスクリプトは、
回答があった際にシートに受付番号を記録したあとに
その番号の次の番号でフォームの説明を更新しておくものです。
同じ番号が表示される理由が
次のどちらかなのか思い出せなかったので
確認したかったのです。
A:
先発のスクリプトが番号を更新した直後に
後発のスクリプトが番号を更新して
両者ともに後発者の受付番号が表示されてしまう
B:
先発のスクリプトが番号を更新する前に
後発者の確認画面が表示されてしまう
Aだと思っていたのでロックサービスでBの更新を
待たせればなんとかなるかなと考えたのですが、
Bのようなのでロックサービスでは対応できなさそうです。
動作の機序があやふやなままで提案してしまい
ごめんなさい。
フォーム側でのトリガーでも試してみましたがやはりスクリプトが動作する前に確認メッセージが表示されるようでスクリプトでの書き換えは表示後となりました。
YAmaGNZ様、フォームの方のトリガーの方が反応が早いと思うので試していただいたのですね。
ありがとうございます。
前回の質問者様はメアドを収集できない事情があったようで
タイムスタンプが近い場合の番号の重複をチェックするようにお願いしましたが、
それが困難なのであれば、
フォームに表示するのでは対応できないので、
確実に対応するには、メールアドレスを記入または収集してもらって
メールで送信するのがよろしいかと…
お役に立たず、
お気に召さないコメントをしてしまって
誠に申し訳ありませんでした

あなたの回答
tips
プレビュー