libro
www.tuyano.com
初心者のためのGoogle Apps Scriptプログラミング入門

フォームとウェブアプリケーション (3/7)

作成:2011-06-29 07:59
更新:2014-03-21 17:14

■フォームが送信されたらメールで知らせる

フォームは、自動的に生成されるため、GUI ビルダーのように、作成されたGUIを製作者が編集したりすることはできません。が、フォームを送信したときの処理については、カスタマイズすることが可能です。

ドキュメントには、フォームを送信したときのイベントハンドラが用意されています。あらかじめフォーム送信時の処理を関数として用意し、これをトリガーでフォーム送信時のイベントに設定することで、送信されたフォームの情報を受け取り独自に処理を行うことができます。

ただ、送られたフォームをシートに保存する処理はすべて自動的にやってくれますから手を加える必要はありません。割とよく作成されるのは、「フォームが送信されたらメールで知らせる」というような処理です。これを作ってみましょう。

では、フォームのデータを管理しているGoogleドキュメントでスクリプトエディタを開いてください。そして下のリスト欄のサンプルを記述しましょう。

スクリプトは、★のメールアドレスを自分のアドレスに書き換えてください(これ、忘れないでくださいね。でないと私宛にわけのわからないメールが山ほど来てしまうので)。

記述をしたら、トリガーの設定を行います。<トリガー><現在のスクリプトのトリガー...>メニューを選び、現れたダイアログで「……今すぐ追加するにはここをクリックしてください」リンクをクリックし、新しいトリガーを作成してください(既にトリガーがある場合は、「新しいトリガーを作成」というリンクになります)。そして以下のように設定を行います。

実行――「sendForm」
イベント――「スプレッドシートから」「フォーム送信時」

設定したら「保存」ボタンで保存をします。そして、フォームから送信をしてみましょう。自分のアドレス宛に「フォーム送信」というタイトルでメールが送られてきます。その中に、「タイムスタンプ」「質問1」「質問2」のそれぞれの値が記述されているのがわかるでしょう。

ここで作成したsendForm関数では、引数が1つ用意されています。この引数に、送信されたフォームの内容が保管されているのです。値を取り出しているところを見てみましょう。
var ts = e.namedValues['タイムスタンプ'];
var answer1 = e.namedValues['質問1'];
var answer2 = e.namedValues['質問2'];
このように、引数で渡されたオブジェクトの「namedValues」というメソッドを使って値を取り出していることがわかります。引数には、設定した「質問のタイトル」が指定されていますね。これで、その質問の回答が取り出せるのです。また、送信された日時については「タイムスタンプ」を指定して得ることができます(日本語環境の場合)。

取得したデータをメールで送信するのには、「MailApp」というオブジェクトを使っています。これは文字通りメール送信のためのアプリケーションを示すオブジェクトです。ここで使っている「sendEmail」というメソッドは、以下のように呼び出します。
MailApp.sendEmail( 送信先 , タイトル , 送信内容 );
第1引数には送り先となるメールアドレスを、第2引数にはタイトル、そして第3引数にメールの本文となるテキストをそれぞれ指定します。送信者は、このGoogleドキュメントのログインに使ったGoogleアカウントのメールアドレスになります。

このsendEmailには、他にも引数の異なるメソッドが用意されていますが、とりあえずこれだけ覚えておけばいつでもGoogle Apps Scriptの中からメールが送れるようになります。実に便利!


●新しいFormApp利用の送信処理
このやり方は、まぁ悪くはないのですが、現在はGoogleフォームを扱うFormAppオブジェクトが用意されたため、Googleフォーム側に関数を用意することでもっと便利にフォーム送信時の処理が実装できるようになっています。詳細は以下をお読みください。

http://libro.tuyano.com/index3?id=1184003&page=5


※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

function sendForm(e){
    var address = 'admin@tuyano.com'; // ★アドレスを指定する
    var ts = e.namedValues['タイムスタンプ'];
    var answer1 = e.namedValues['質問1'];
    var answer2 = e.namedValues['質問2'];
    var body = "時刻:" + ts + "\n";
    body += "問1:" + answer1 + "\n";
    body += "問2:" + answer2 + "\n"; 
    MailApp.sendEmail(address, 'フォーム送信', body);
}

※関連コンテンツ

「初心者のためのGoogle Apps Scriptプログラミング入門」に戻る