GAS(Google Apps Script)で、他のアカウントでは調子よく使えていた、自分(アクティブユーザー)のフルネームを取得するスクリプトが、なぜか作りたての新しいGSuiteアカウントで動かなかった。
スクリプトは以下の通り。
function helloDialog(){
var emailaddress = Session.getActiveUser(); // アクティブユーザーのメアドを取得
var fullname = ContactsApp.getContact(emailaddress).getFullName(); // メアドから連絡先を取得し、フルネームを取得
var ui = SpreadsheetApp.getUi(); // UIを作成
ui.alert("Your full name is " + fullname); // アラートボックスを表示
}
以上はGoogleスプレッドシートのスクリプトだが、他でも応用が効くと思われる。
スプレッドシートでダイアログを表示する場合、スプレッドシート画面を表示しないと、ダイアログが「OK」を待っている状態で、スクリプトエディターの画面上は延々「実行中」になるので注意。
さて、旧アカウントで調子よく動いていたスクリプトを、新アカウントで動作させると、スクリプトエディター上に以下のメッセージが表示された。
Type Error: Cannot read property 'getFulName' of null
これは、ContactApp.getContact()
メソッドがnull
を返し、null
のgetFullName()
プロパティを取得しようとして怒られている状態だと思われる。
いろいろ調べたら、以下の解決法に至った。
(参考にしたブログ記事は別の問題の別の解決法だったので引用しない)
(1) GoogleアカウントにログインしたChromeブラウザーから、「連絡先」アプリ(Googleコンタクト)を起動する
(2) デタラメの宛先でいいから1件登録する(苗字=foo、名前=bar、メアド=foobar@example.comとかでいい)
これだけで、なぜか成功する。
なんじゃそりゃーー!
ContactsAppオブジェクトというのは連絡先アプリのオブジェクトで、宛先が1件もない状態ではこれが取得できないから、nullが返るようだ。
この連絡先アプリというの、ぼくは初めて知ったのだが、旧アカウントで見てみると、過去やりとりしたメアドがめっちゃ入ってるので、だから新アカウントも社会生活したら自然に直ってたかもしれない。
(あるいは旧アカウントは携帯アプリとシンクしたから連絡先がいっぱい入ってるのかもしれない。よく分からない)
QiitaにGASの記事をいくつか書いてるので暇な人は見てください。
もっともカンタンな記事はこちら。