
photo credit: mkorsakov Hegelists International via photopin (license)
みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Google Apps Scriptを使って簡単なワークフローを作っていきたいと思います。
例えば備品購入依頼のワークフローを考えます。
動作としては
- GASから特定のユーザー(たぶん上長)にHTMLメールを送信
- 受け取ったユーザーが「OK」または「NG」ボタンのリンクを踏む
- GASのWebアプリケーションにアクセスして、踏んだボタンに応じた処理をする
と言った動きになります。
さて、前回お送りした記事ですが、Google Apps Scriptを使ってGmailからHTMLメールを送信する方法についてお伝えしました。
つまり、上記のフローでいうと1の部分は実現できたわけです。
今回は、2と3の部分を仕込んでいきたいと思います。
どういう方法を使うかというと、URLにパラメータを仕込んでおいて受け取ったパラメータにより処理をするという方法です。
では、Google Apps ScriptのWebアプリケーションでURLのパラメータを受け取って処理をする方法です。
行ってみましょう!
doGet関数でHTMLページを表示する
まずはおさらいですが、GASで作成したWebアプリケーションにアクセスしたときに動作する特殊な関数としてdoGet関数というものがあります。
例えば、プロジェクト内に「hello.html」というHTMLファイルを作成しておき、以下スクリプトを仕込みます。
function doGet() { return HtmlService.createTemplateFromFile("hello").evaluate(); }
ここでは、ザックリいうとhello.htmlに記載したHTMLをブラウザに返す処理をしています。
それでスクリプトエディタのメニューから「公開」→「ウェブアプリケーションとして導入」により、URLでアクセスができるようになります。
{…}の部分はウェブアプリケーション固有の長々としたIDは入ります。
ブラウザからこのURLにアクセスすると、「hello.html」が表示されるという流れでしたね。
詳しくは以下記事をご覧ください。
WebアプリケーションのURLに付与したパラメータを受け取る
さて、ここからが本題です。
doGet関数はURLに仕込んだパラメータを受け取ることができます。
URLにパラメータを付与する方法
URLに仕込んだパラメータというのは、例えば
でいうところの
- name:takahashi
- age:41
の部分です。つまり、URLの後に
を付与することで任意のパラメータ名に対して値を付与してURLにアクセスできるわけです。そしてこのパラメータ名と値のセットは、上記例のように複数付与することも可能です。
備品購入依頼であれば
または
というパラメータ付のURLへのリンクを、送ったHTMLメールの「OK」「NG」ボタンに仕込めば良いということです。
doGet関数でパラメータを受け取る
doGet関数でパラメータを受け取る場合はこのようにします。
まず引数eを指定して
‘処理
}
とします。
この引数eはイベントオブジェクトとして、URLに付与したパラメータを含む様々な情報が格納されています。
このイベントオブジェクトから、任意のパラメータの値を取得するには
とします。
URLに付与したパラメータにより表示するHTMLファイルを変える
では一つ例を示しましょう。
ウェブアプリケーションのURLにパラメ―タ名「answer」を付与します。その値としては「ok」または「ng」をとるとします。
それで、パラメータanswerが「ok」だった場合は、以下「ok.html」を
備品購入申請を承認しました
あなたは備品購入申請を承認しました
「ng」だった場合は、以下「ng.html」を表示したいとします。
備品購入申請を否認しました
あなたは備品購入申請を承認しませんでした
ウェブアプリケーションへのアクセスにより動作させますから、doGet関数が必要なのですが、どんなスクリプトになりますでしょうか?
例えばこんなスクリプトです。
function doGet(e) { return HtmlService.createTemplateFromFile(e.parameter.answer).evaluate(); }
シンプルですね!
パラメータのanswerの値と、HTMLファイル名が一致していますので、パラメータの値をそのままcreateTemplateFromFileの引数として渡しちゃっています。
パラメータによるブラウザ表示の結果
パラメータanswerの値として「ok」を付与してアクセスした場合は
パラメータanswerの値として「ng」を付与してアクセスした場合は
という表示になります。
なお、パラメータを付与しない場合は以下のように
「undefined」というHTMLファイルは見つかりませんでした。
という表示になります。
まとめ
非常に簡易的ではありますが、メールで踏んだリンクでWebアプリケーションにアクセスして、パラメータを見て処理を分けるといった処理をGoogle Apps Scriptで実現することができました。
今回お伝えした、doGet(e)関数でイベントオブジェクトからパラメータを取得するテクニックは、様々なワークフローツールの基本になるかと思いますので、ぜひご活用下さい。
次回以降、備品購入申請のワークフローを作り込んでいきたいと思います。
どうぞお楽しみに!