2018年11月17日

Google Apps Scriptで、「getItemResponses」が動作しなくなった?

 GoogleフォームとGoogle Apps Scriptを使う場合、submitForm(e)で、


var itemResponses = e.response.getItemResponses();



 という感じで、回答のオブジェクトを取得します。

 本日新しく、フォーム連動のスクリプトを作成したところ、

「TypeError: undefined のメソッド「getItemResponses」を呼び出せません。(行 3、ファイル「コード」)」

 というエラーが頻発します。

 コード自体は、何度もいろんなスクリプトで使っているものなので間違いはありません。

 これまでも、同様のエラーが出ることはありました。
 スクリプトを変更するなど、新たに権限が増えた場合や、トリガーが消えてしまったりした場合です。

 権限の設定をやり直す、トリガーを一度消して設定し直すことで解消していました。
 今回に限っては、何度やってもエラーのままです。

 過去に作ったスクリプトは、全く同じ記述で問題なく動いています。


 トリガーの設定画面が新しくなっていることから、Google Apps Scriptで何かしら変更が行われたことは判るのですが・・・

 プロジェクト自体を削除して、新たに作り直すなどもしてみましたがダメです。

 そこで、「アカウントにアクセスできるアプリ」にてスクリプトの権限を確認してみると・・・
 動作しているものには、次のものが許可されています。
「Google ドライブのフォームの表示と管理」

Screenshot 2018-11-17 at 18.40.52.png

 エラーとなっているスクリプトでは、この権限が出てきません。

Screenshot 2018-11-17 at 18.31.54.png

 そこで、スクリプトがバインドされているフォームを取得する「FormApp.getActiveForm()」をスクリプトの先頭に追加しました。


// FormApp.getActiveForm()
function submitForm(e){
var itemResponses = e.response.getItemResponses();
(以降省略)



 この状態でトリガーを設定し直したところ、追加の権限として「Google ドライブのフォームの表示と管理」が出てきました。

Screenshot 2018-11-17 at 18.33.40.png

「getItemResponses」のエラーもなくなり、正常にスクリプトが動作するようになりました。


 すでに、正常動作しているものは、「FormApp.getActiveForm()」がなくても動作しています。


 朝からこれにハマって、ずいぶんと時間を使ってしまいました。
 Google Apps Scriptでエラーが出るときは、権限を確認してみることをおすすめします。
posted by Outliner 伊藤 崇 at 19:10| 効率化・仕組み