LANG SELRCT

コードを書く場所についてはこちら

2018年11月25日日曜日

Google Formでscopeを追加する


新規でGoogleフォームを作成して送信時にトリガーを設定したときに

TypeError: undefined のメソッド「getItemResponses」を呼び出せません。

または

TypeError: Cannot call method "getItemResponses" of undefined.

というエラーが出たら以下の2つの方法で解決するようです
  • FormApp.getActiveForm(); をコードに記述する
  • マニフェストファイルにスコープを追加する

参考
https://issuetracker.google.com/issues/118921815


FormApp.getActiveForm(); をコードに記述する場合


コード.gs
function get_item_responses(e) {
  FormApp.getActiveForm();
  var itemResponses = e.response.getItemResponses();
  var result = [];
  for (var i = 0; i < itemResponses.length; i++) {
    var itemResponse = itemResponses[i];
    var question = itemResponse.getItem().getTitle();
    var answer = itemResponse.getResponse();
    result.push([question, answer]);
  }
  Logger.log(result);
}
意訳.gs
実行する機能を定義する
フォームを取得する
回答を取得して
回答を入れるresulという入れ物を用意して
回答の内容の数(=質問の数)だけ以下を繰り返す
回答をひとつずつ取得して
Title(=質問内容)を取得し
回答した内容を取得し
resultに入れる

それらを配列に入れてログに出す




ファイル > プロジェクトのプロパティ > スコープ
を見るとスコープに何も入っていない

編集 > プロジェクトのトリガー
を開いて
フォーム送信時にトリガーを設定して保存すると

アカウントの選択を求められて

許可を求められて

https://www.googleapis.com/auth/forms
が スコープに入る


appscript.json(マニフェストファイル)に追加する場合



"oauthScopes": [
  "https://www.googleapis.com/auth/forms"
],
を追加して保存後にトリガー設定すると
アクセスの許可を求められるようになります


参考

https://issuetracker.google.com/issues/118921815
https://ja.stackoverflow.com/questions/50010/
https://stackoverflow.com/questions/53377027/