こんにちは、おかちゃんせんせいです!
昨日に続いてGAS記事です。
【GAS】Gmailに届いた特定のメールをGoogleスプレッドシートに転記する今回は
Googleフォームのスクリプトをデバッグする方法について
です。
これまでGoogleフォームでフォーム送信した時に、GASで自動返信メールを送信できるような設定をいくつかしてきました。
しかし、GASでスクリプトを組む上でいつも悩まされているのは、デバッグができないこと。
自動返信メールのスクリプトを組んで、トリガーでフォーム送信時に自動起動するように設定。
トリガーで自動実行したというアクションを受け取るためには、トリガーで設定した関数に引数を用意します。
どんな引数でもいいのですが、よく見受けられるのはeです。
このeはトリガー起動で関数が実行された時に限り、フォームの情報が格納されます。
ここで問題になるのが、
トリガーが起動した時にのみ関数が実行されるので、デバッグが使えないということ。
デバッグしようとしても、当然トリガーが起動されないのでeはundefinedになってしまいます。
そのため、全然思ったように検証ができずに困っていたのですが、、、
先日諦めきれずにネットで検索していましたら参考になる記事をようやく発見!
https://teratail.com/questions/308806
eが定義できる場合とできない場合で条件分岐。
定義できない場合はトリガーが起動していない場合なので、テストで利用する処理を書くことで使い分けることができます!
下記コードは、Googleフォームでスクリプトを作成した場合のものになります。
function autoEmails(e) {
let itemResponses;
let recipient;
/* ステップ1: フォームのデータを取得する */
// すべての質問と回答を取得する
// eが定義できる場合(=通常の回答送信時)は送信されたその回答を取得
if(e !== undefined) {
// 回答情報と回答者のメールアドレスを取得する
itemResponses = e.response.getItemResponses();
recipient = e.response.getRespondentEmail();
}else{
// そうでない場合(=テスト時)は送信済の1件目を取得
const wForm = FormApp.getActiveForm().getResponses();
itemResponses = wForm[0].getItemResponses();
recipient = itemResponses[0].getRespondentEmail();
}
}
※修正 2024/08/23※
通常回答でないデバッグの際にエラーになる場合があったため、コードを修正
「もう少し早く知りたかったー!!」
と私の場合は強く思いましたので、
みなさんにとってこの情報が役に立てば幸いです!
最後まで読んでいただき、ありがとうございました!