目標
GASを使いgoogle form(以降form_A)からの回答内容を反映した新しいgoogle form(以降form_B)を作成し、form_Bの内容をgoogle calendarに反映させるスクリプトを書きたい。そのためform_Bの回答内容をスクリプト内で参照したい。
登場するトリガー
- form_Aの送信時トリガー
- form_Bの送信時トリガー <- errorが起きるトリガー
前提
form_Aの回答者は複数人いることを想定しているので、form_Aに回答した人が3人いればform_B-1, form_B-2, form_B-3が作られることとなり、送信時トリガーも3つ作られることになる。
発生している問題・エラーメッセージ
ここで起きた問題はform_Bの送信時トリガーでform_Bの応答IDが見つからないことです。
Exception: No response with ID {応答ID} exists for this form. at onFormSecondSubmit(main:58:19)
該当のソースコード(Java Script(Google Apps Script))
- form_Bの作成とトリガー作成関数の呼び出し
function make_body(json_obj, exist, new_form_url){ if(exist == true){ ~~~ 省略 ~~~ } else if(exist == false){ var [new_form_url, id] = create_form(json_obj) create_trigger(id)
- form_Bの作成
function create_form(json_obj) { var form = FormApp.create(json_obj["氏名"]+"様") var pull_down = form.addListItem() form.setDescription("顧客情報") pull_down.setTitle("日にちの確定").setChoiceValues([json_obj["第一希望日"], json_obj["第二希望日"], json_obj["第三希望日"] ]) pull_down.setRequired(true) Utilities.sleep(1000); var url = form.getPublishedUrl() var id = form.getId() Logger.log("id on create_form : "+id) return [url, id] }
- form_Bのトリガーの作成
function create_trigger(id) { Utilities.sleep(1000); ScriptApp.newTrigger("onFormSecondSubmit") .forForm(id) .onFormSubmit() .create() Logger.log("id on create_trigger: "+id) }
- form_Bのトリガーで起動する関数
function onFormSecondSubmit(e) { Utilities.sleep(2000); const items = {}; Logger.log(JSON.stringify(e)); e.response.getItemResponses().forEach(itemResponse => { ~~~ 以下省略 ~~~
試したこと
トリガー作成時のIDが正しく渡されていること、form_Bの回答情報、sleepの挿入を確認、または試しました。
form_Bの送信トリガーで呼び出されるonFormSecondSubmit(e)
の引数e
の中身を確認しようともしましたがそもそも応答IDが見つからないと言われているので、関数内の処理は行われていないようでした。
また以下の記事では別々のformが元になる送信トリガーは同じスクリプト内では共存できないと書かれているようで(自信はないです)そもそも実現ができない処理を行おうとしているのか?とも思ってしまっています。
https://stackoverflow.com/questions/65346812/installable-trigger-to-fire-script-in-a-different-form
回答よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。