前提・実現したいこと
Google Apps Scriptで物品の購入申請、承認フローを作成したいと考えております。
(以下のようなフローです)
1.物品を購入したい人がフォームで申請(物品の種類、数量、金額、など)
2.フォームで申請した内容をスプレッドシートに自動で記載。承認者に申請内容を自動でメール。
3.承認者へのメール内容は、本文に申請内容(物品の種類、数量、金額、など)を記載し、「承認」「否認」のURLリンクも記載する。
4.承認者が「承認」若しくは「否認」のURLリンクを押すと、『承認しました』若しくは『否認しました』と記載したHTMLを表示。更にこのタイミングで、該当の申請に対し、スプレッドシート上の新たな列に【承認】or【否認】と入力したい。
【更新】
回答でご指摘頂いた内容について本文にも追記します。
・書き込むスプレッドシートはidで特定して、その中のシート『フォームの回答』に書き込みを行う。
・『フォームの回答』シートには、フォームから申請された情報が入力されている。
タイトル行(A1~I1)には以下のタイトルが記入済み(タイムスタンプ、メールアドレス、氏名、部門、
機材種別、購入希望日、商品名、商品URL、個数)。
2行目以下はフォームからの申請内容が入力されている。
・『承認』の場合はJ列に"〇"を、『否認』の場合はJ列に"×"を入力したい。
(タイムスタンプが一致する行に対して。)
【再更新】
フォームの入力内容を追加する必要が出たので、
『承認』『否認』の結果入力をJ列ではなく、N列(14列目)に変更したいです。
N列に"〇"、"×"を入力したい。
発生している問題・エラーメッセージ
実現したいことの4.の途中までは出来ました。
『更にこのタイミングで、該当の申請に対し、スプレッドシート上の新たな列に【承認】or【否認】と入力したい。』の部分が出来ていません。
メール本文に記載したURLリンクの押下をトリガにしてスプレッドシートに値を入力する事は出来るのでしょうか。
フォームから申請すると、スプレッドシート上にタイムスタンプが自動で入力されるので、
タイムスタンプを検索して、該当の申請に対して【承認】【否認】を入力したいと思っています。
該当のソースコード
●send_email.gs
function sendHtmlMail(e) {
var answer1 = e.namedValues['購入者 氏名']; //フォーム作成時に設定した項目名
var answer2 = e.namedValues['部門']; //フォーム作成時に設定した項目名
var answer3 = e.namedValues['商品名']; //フォーム作成時に設定した項目名
var answer4 = e.namedValues['数量']; //フォーム作成時に設定した項目名
var answer5 = e.namedValues['単価(税込み)']; //フォーム作成時に設定した項目名
var answer6 = e.namedValues['購入理由']; //フォーム作成時に設定した項目名
var answer7 = e.namedValues['購入先(URL等)']; //フォーム作成時に設定した項目名
var answer8 = e.namedValues['優先度']; //フォーム作成時に設定した項目名
var subject = '備品購入申請のお知らせ'; //件名
var body = 'htmlメールが表示できませんでした'; //本文(表示不可時)
var timeStamp=e.namedValues["タイムスタンプ"];
/* メール本文 */
var html = "備品購入申請がありますので承認をお願い致します。<br><br>";
html += "申請内容<br><br>";
html += "購入者 氏名:" + answer1 + "<br>";
html += "商品名:" + answer3 + "<br>";
html += "数量:" + answer4 + "<br>";
html += "単価(税込み):" + answer5 + "<br>";
html += "購入理由:" + answer6 + "<br>";
html += "購入先(URL等):" + answer7 + "<br>";
html += "優先度:" + answer8 + "<br>";
html += "タイムスタンプ:" + timeStamp + "<br>";
html += "承認しますか?<br><br>";
/* 承認・否認 */
html += '<a href="https://script.google.com/*******/exec?p=ok&t='+timeStamp+'">承認</a><br>';
html += '<a href="https://script.google.com/*******/exec?p=ng&t='+timeStamp+'">否認</a><br>';
/* メールを送信 */
if
(answer2 == '1課') {
GmailApp.sendEmail(
'メールアドレス1',
subject,
body,
{
htmlBody: html
}
);
}
else if
(answer2 == '2課') {
GmailApp.sendEmail(
'メールアドレス2',
subject,
body,
{
htmlBody: html
}
);
}
else
{
GmailApp.sendEmail(
'メールアドレス3',
subject,
body,
{
htmlBody: html
}
);
}
}
●ok.html
<!DOCTYPE html> <html> <head> <base target="_top"> </head> <body> <h1>備品購入申請を承認しました</h1> あなたは備品購入申請を承認しました </body> </html>●ng.html
<!DOCTYPE html> <html> <head> <base target="_top"> </head> <body> <h1>備品購入申請を否認しました</h1> あなたは備品購入申請を承認しませんでした </body> </html>●Error.html
<!DOCTYPE html> <html> <head> <base target="_top"> </head> <body> URLが正しくありません。ここはエラーページです<br><br> </body> </html>●doGet.gs
function doGet(e){
var page=e.parameter["p"];
var timeStamp=e.parameter["t"];
if(page == "ok" && timeStamp){
setter(timeStamp, "○");
return HtmlService.createHtmlOutputFromFile('ok');
}
else if(page == "ng" && timeStamp){
setter(timeStamp, "×");
return HtmlService.createHtmlOutputFromFile('ng');
}
else{
return HtmlService.createHtmlOutputFromFile('Error');
}
}
function setter(timestamp, str) {
var sh = SpreadsheetApp.openById("スプレッドシートID").getSheetByName("フォームの回答");
var vals = sh.getDataRange().getValues();
var row = -1;
for(var i = 1; i < vals.length; i++) {
if(Utilities.formatDate(vals[i][0], "JST", "yyyy/MM/dd HH:mm:ss") == timestamp) {
row = i + 1;
}
}
if(row != -1) {
sh.getRange(row, 14, 1, 1).setValue(str);
}
}
試したこと
1.申請フォーム作成済み。
2.フォームの送信をトリガにして承認者へ承認依頼メールを送信→作成済み。
3.承認者へのメール(申請内容、「承認」「否認」のURLリンクも記載)→作成済み。
4.「承認」若しくは「否認」のURLリンクを押すと、『承認しました』若しくは『否認しました』と記載したHTMLを表示。→作成済み。
「承認」若しくは「否認」のURLリンクを押すことで承認したか否認したかを判断して、その内容をスプレッドシートに記入したい(タイムスタンプでどの申請かを判定)と考えておりますが、そのようなことが可能なのか、どのようにすれば良いか分かりません。
当方GASはおろかプログラミング自体が素人のため、ネットで色々調べてソースをコピペしたりしながらなんとか途中まで作成しました。
その為、ソースのちょっとした修正や、キーワードだけでの説明を理解することが難しい為、ご回答頂ける場合は極力ソースコードなども省略せず記載頂けますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/09/13 12:04
退会済みユーザー
2018/09/21 08:10
2018/09/21 08:36
2018/09/21 08:40 編集
退会済みユーザー
2018/09/25 08:54
2018/09/25 09:22
退会済みユーザー
2018/09/26 02:23
2018/09/27 04:14
2018/09/28 02:18 編集
2018/09/28 02:16
退会済みユーザー
2018/10/02 10:45
退会済みユーザー
2018/10/02 10:51
2018/10/02 12:11
退会済みユーザー
2018/10/03 03:05
2018/10/03 03:49
退会済みユーザー
2018/10/03 05:44
2018/10/03 05:55
退会済みユーザー
2018/10/03 06:24
2018/10/03 07:11
退会済みユーザー
2018/10/03 07:59
2018/10/03 09:20 編集
2018/10/03 09:20
退会済みユーザー
2018/10/03 12:01
退会済みユーザー
2018/10/12 08:47
2018/10/15 01:06
退会済みユーザー
2018/10/16 06:56
2018/10/17 04:02
退会済みユーザー
2018/10/17 04:54