50029


Googleフォームのフォーム送信時にフォーム投稿内容を自動返信するようスクリプトを組み、今まで問題なく使っていたものを、コピーして新しいフォームを作ったところ、トリガー登録画面が新しくなっており、困っています。  
（GsuiteDevelopperHub画面になります)  
新しい画面で、一応、トリガー追加ダイアログで、以下のように設定してみました。

  * 実行する関数を選択 「submitForm」
  * 実行するデプロイを選択「Head」←変更できない
  * イベントのソースを選択「フォームから」
  * イベントの種類を選択 「フォーム送信時」
  * エラー通知設定 「今すぐ通知を受け取る」

が、これで実行させると、以下エラーとなり、イベントが今までのようには渡されていないようです。  
「TypeError: undefined のメソッド「getItemResponses」を呼び出せません。 at submitFormA(コード:2)」

以前のようにフォーム送信時のイベントを渡すようにトリガー設定をするにはどのようにしたよいか、ご存知でしたら、ぜひお教えください。よろしくお願いします。

スクリプトコードは次のようなものです。

[code]

    function submitFormA(e){
      var itemResponses = e.response.getItemResponses();
      var message = '';
      var username = '';
      var mail = '';
      for (var i = 0; i < itemResponses.length; i++) {
        var itemResponse = itemResponses[i];
        var question = itemResponse.getItem().getTitle();
        var answer = itemResponse.getResponse();
        message += (i + 1).toString() + '. ' + question + ': ' + answer + '\n';
      }
      var address = 'xx@xxx.jp';
      var title = 'タイトル';
      var content = 'テスト完了を確認しました。\n\n' + message;
      GmailApp.sendEmail(address, title, content);
     }
    
[/code]


CC BY-SA 4.0
2018-11-06T08:09:12.887
50010
2018-11-08T15:23:16.060
2018-11-06T09:41:05.173
29826
30864
question
google-apps-script
Googleフォームのスクリプトの新しいトリガー設定画面でトリガー設定すると、イベントがうまく渡らなくなりました。今までのスクリプトは使えなくなったのでしょうか？


今まさにハマってます。  
トリガーの管理がG Suite Developer Hubに変更されたことによってか、  
上記の認識ではサブミットの際のe.responseがNot Foundになってしまうみたいです。

ですので代替案ではございますが、  
一旦スプレッドシートに値を逃してそこでスクリプトを発火させる方法でクリアにしようかと思っています。  
Googleフォームのサブミットのevent受け渡しは直近は厳しそうなので様子を見るつもりです。

トリガーは、  
イベントの種類を「フォーム送信時」  
受け取りのjsでは「e.namedValues」  
あとはGoogleフォームと似た認識で処理を行えるかと思います。


CC BY-SA 4.0
2018-11-06T17:14:30.760
50023
2018-11-06T17:14:30.760
30873
50010
answer


スクリプトを見ますと、もしも新規作成したプロジェクト内に質問にあるスクリプトしかない場合は、問題の原因はscopeの不足によるものと推測しました。例えばスクリプトの中にコメントとして下記を追加して保存してください。

[code]

    // FormApp.getActiveForm()
    
[/code]

この行の追加により、スクリプトエディタ側でscopeの自動検出が行われ、`https://www.googleapis.com/auth/forms`がscopeに追加されます。その後、一度トリガーを削除し、再度同じ設定でトリガーを設定すると、scopeを使用するための認証用ポップアップウィンドウが開きますのでこれを許可してください。これにより、イベントオブジェクトに`response`が追加されますので、`e.response.getItemResponses()`で値を取得することができるかと思われます。

マニフェストへscopeを直接追加しても良いのですが、scopeが固定されてしまうために開発途中では他のscopeに問題が発生する場合を考慮しまして、ここでは、スクリプトエディタの自動検出機能を利用する方法について回答させていただきました。


CC BY-SA 4.0
2018-11-06T23:58:59.333
50029
2018-11-06T23:58:59.333
19460
50010
answer


はまってます。このページが見つかって幸せでした。

// FormApp.getActiveForm()

をソースのトップに書いておくだけで，うまくいきました。scopeの問題とは・・・。G Suite Developer
Hubに変更するのは構いませんが，互換は保って欲しいところです。

Tanaikeさんの回答，とてもありがたかったです。


CC BY-SA 4.0
2018-11-08T15:23:16.060
50107
2018-11-08T15:23:16.060
30904
50010
answer