Libraryの罠(GAS)

Googleフォームを使ったシステム。 AさんがフォームAから申請をして、その審査結果をBさんがフォームBから入力する。 それぞれGASはフォームの回答用スプレッドシートにバインド型で実装。 フォームAの回答用スプレッドシートが、どちらかと言えばマスタで、申請時に管理番号を発行してキーにしている。 フォームBの審査結果をフォームAの回答用スプレッドシートにセットする関数を、はじめは、フォームBの回答用スプレッドシートに書いていたんだけど、なんか違う気がして、フォームA側に実装して、ライブラリで公開しておき、フォームB側は、フォームA側の(ライブラリ)関数を呼ぶように変更した。 フォームA側にTPを作って実行すると上手く行ったので、フォームB側に実装して実行するとエラーになる。 あれ? あちこちにログを吐くようにして、実行してみてやっと原因がわかった。 フォームBから実行すると、フォームBの回答用スプレッドシートを参照している。 ボクの想定では、フォームAの回答用スプレッドシートを参照するはずだった。 見つからないわけだ。 スプレッドシートオブジェクトを拾うのに、『SpreadsheetApp.getActiveSpreadsheet()』を使っていたせいで、動いているフォームB側のコンテクストになっていたからのよう。 『SpreadsheetApp.openById(シートのID)』に変えるとすんなり動いた。 確かに考えてみれば、動いているフォームB側がアクティブなスプレッドシートだよね。 自分だけで動くコードなら、getActiveSpreadsheet()でもopenById()でも変わらないけど、他から動かすことを考えるなら注意しないといけない。
--
はれ

No comments: