みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Google Apps Scriptで備品購入申請を題材にワークフローを作る方法をお伝えしています。
前回の記事はこちらです。
doGet関数を使って、メール内のURLを踏んだらスクリプトを動作させる方法をお伝えしました。
今回は、その部分をパワーアップしていきますよ。
踏んだURLにパラメータを仕込んで、doGet関数に渡すのです。
ということで、GASでURLを踏んでスクリプトを動作させたときにパラメータを渡す方法をお伝えします。
では、行ってみましょう!
前回のおさらい
まずは前回のおさらいです。
備品購入申請の入り口としてGoogleフォームを使っておりまして、以下のようなものです。
このフォームから申請を行うと、連携しているスプレッドシートに以下のように送信されたデータが蓄積されます。
その際、「フォーム送信時」のトリガーをセットしている以下のsendMessage関数が動作をして、承認者にメールが送られます。
function sendMessage(e) { const [timeStamp, email, shop, item, price, amount] = e.values; const total = price * amount; const recipient = 'hogehoge@example.com'; //承認者のメールアドレス const subject = '備品購入申請のお知らせ'; let body = ''; body += '備品購入申請がありました。\n\n'; body += `・購買先: ${shop}\n`; body += `・品名: ${item}\n`; body += `・単価: ${price} 円\n`; body += `・数量: ${amount}\n`; body += `・総額: ${total} 円\n\n`; body += '以下URLをクリックしてみてください\n'; body += 'https://script.google.com/a/~exec'; //公開したウェブアプリケーションのURL GmailApp.sendEmail(recipient, subject, body); }
メール内のURLは、このプロジェクトをウェブアプリケーションとして公開したもののURLで、承認者がこのURLを踏むと、以下doGet関数が動作します。
function doGet() { let html = ''; html += '<h1>備品購入申請のお知らせ</h1>'; html += '<p>あなたは備品購入申請のメールのリンクを踏みました</p>'; return HtmlService.createHtmlOutput(html); }
結果として、以下のようなWebページが表示されます。
…ふぅ。ちょっと長くなってきましたね。
doGet関数でパラメータを受け取るには?
さて、承認者がURLをクリックしてdoGet関数を動作させて、例えばスプレッドシートに「承認」マークを付与するなど、承認をしたいとします。
よくよく考えると、doGet関数を呼び出すのはいいのですが、そのままでは「どの申請を承認すればよいのか?」という情報がありません。
スプレッドシートに記入された行数がわかれば、どの申請かわかるのですが…
それを何とかするために、「URLにパラメータを仕込んでおく」という作戦をとります。
URLにパラメータを付与する
パラメータはURLの最後に以下のように記述することで、渡すことができます。
ウェブアプリケーションの公開で取得したURLは以下の形式でしたね。
ですから、それを以下のようにすれば、「行数」をパラメータとしてdoGet関数に渡せるのです。
この場合、「row」というパラメータに「2」という値を渡したことになります。
doGet関数でパラメータを取り出す
先日の記事で、フォーム送信時のイベントオブジェクトについてお伝えしましたね。
doGet関数にもイベントオブジェクトが存在しています。
そして、そのイベントオブジェクトのparameterプロパティを使えば、以下のようにURLに仕込んだパラメータを取り出せるのですよ。
これは便利!
パラメータのやり取りを行えるようにスクリプトを修正する
では、実際に各スクリプトを修正していきましょう。
コードは以下の通りです。
function sendMessage(e) { const [timeStamp, email, shop, item, price, amount] = e.values; const total = price * amount; const row = e.range.getRow(); const recipient = 'hogehoge@example.com'; //送信先メールアドレス const subject = '備品購入申請のお知らせ'; let body = ''; body += '備品購入申請がありました。\n\n'; body += `・購買先: ${shop}\n`; body += `・品名: ${item}\n`; body += `・単価: ${price} 円\n`; body += `・数量: ${amount}\n`; body += `・総額: ${total} 円\n\n`; body += '以下URLをクリックしてみてください\n'; body += 'https://script.google.com/a/~exec'; //公開したウェブアプリケーションのURL body += `?row=${row}`; GmailApp.sendEmail(recipient, subject, body); }
function doGet(e) { let html = ''; html += '<h1>備品購入申請のお知らせ</h1>'; html += '<p>あなたは備品購入申請のメールのリンクを踏みました</p>'; html += `<p>パラメータrow: ${e.parameter.row}</p>`; return HtmlService.createHtmlOutput(html); }
URLにフォーム送信で書き込まれた行数を仕込む
まず、sendMessage関数の5行目ですが、フォーム送信時のイベントオブジェクトeから、rangeプロパティで、そのフォーム送信のデータが書き込まれたスプレッドシートのRangeオブジェクトが取れます。
そのRangeオブジェクトに対してgetRowメソッドを使うことで、行数を取得しています。
そして17行目で、その行数をパラメータrowの値としてURLに仕込んでいますね。
doGet関数内でパラメータを取り出す
続いて、doGet関数です。
1行目doGet関数の引数eを指定して、イベントオブジェクトを受け取れるようにします。
6行目で、パラメータを取り出して、それをWebページに書き出すHTMLに追加します。
ウェブアプリケーションを更新して動作確認
ウェブアプリケーションのプロジェクトバージョン
では、動作確認をしていきましょう。
ここで、注意が必要なのですが、doGet関数の内容を変更した場合、スクリプトを保存するだけでなく、ウェブアプリケーションのプロジェクトバージョンを上げる必要があります。
スクリプトエディタの「公開」メニューから「ウェブアプリケーションとして導入」ダイアログを開き、以下のようにプロジェクトバージョンを「New」として1つ上げるのです。
その上で、適当な変更内容の説明を入力し「更新」します。
これをしないと、スクリプトは変更しているのに、ウェブアプリケーションで表示される内容が変わらない…というハマり方をします。
ここはよくウェブアプリケーションを作る上でどハマりするポイントなので気をつけてください。
スクリプトの動作確認をする
これでスクリプトの動作確認をすべく、フォーム送信をしてみましょう。
まず承認者へのメッセージを確認すると、URLにパラメータが付与されていることが確認できます。
そして、このURLを踏んでWebページを表示すると、以下のように取得して表示できて切ることを確認できます。
まとめ
以上、GASでURLを踏んでスクリプトを動作させたときにパラメータを渡す方法をお伝えしました。
URLにベタ書きでパラメータを渡せるんですね。
そして、それはdoGet関数のイベントオブジェクトのparameterプロパティで取り出せるんですね。
便利です!
次回は受け取ったパラメータを使って処理を追加していきたいと思います。
どうぞお楽しみに!
連載目次:初心者でも作れるGASによる簡単ワークフロー
スプレッドシート、Gmail、フォーム…Google Apps Scriptで操作できるアプリケーションはまさに「ワークフロー」を作成する上で必要なものが揃っています。ということで、このシリーズでは初心者でも簡単に作れるワークフローの作り方について解説をしていきます。- 備品購入申請フォームをGoogleフォームで作成する方法
- Google Apps Scriptでフォーム送信時にメッセージを送るスクリプトの作り方
- Google Apps Scriptでフォーム送信した内容を含んだメッセージをGmailで送るスクリプト
- Google Apps Scriptで特定のURLを踏んだらスクリプトを動作させるdoGet関数の使い方
- GASでURLを踏んでスクリプトを動作させたときにパラメータを渡す方法
- 【GASで作るワークフロー】URLクリックで「承認」とするスクリプトの作り方
- GASで送信するGmailのメッセージをプレーンでもHTMLでも送れるようにする
- GASのワークフローでURLのパラメータで承認・否認を切り替える方法