前提・実現したいこと
Google Apps Scriptで承認フローを作っています。
二段階の承認を実現すべくスプレッドシートのエディタから以下のコードを書いています。
また、フォームの送信時にsendMessage1が動作するトリガーを設定中です。
発生している問題・エラーメッセージ
今困っているのは一次承認のメールが送信され、送られてきたメールに組み込んでいる
一次承認のリンクを押すと
二次承認のhtmlページが現れてしまい原因がわかりません。
実現したいのは、二段階の承認が出来るようにすることです。
該当のソースコード
function generateBodies(values){
const [timeStamp, email, shozoku, shainbango, shimei] = values;
let plain = '';
plain += ・所属: ${shozoku}\n
;
plain += ・社員番号: ${shainbango}\n
;
plain += ・氏名: ${shimei}\n
;
let html = '<ul>';
html += <li>所属: ${shozoku}</li>
;
html += <li>社員番号: ${shainbango}</li>
;
html += <li>氏名: ${shimei}</li>
;
html += '</ul>';
return {
email: email,
plain: plain,
html: html
};
}
function sendMessage1(e){
const row = e.range.getRow();
const sheet = e.range.getSheet();
sheet.getRange(row, 4).setValue('一次確認中');
const bodies = generateBodies(e.values);
let url = 'https://script.google.com/hogehoge/exec'; //公開したウェブアプリケーションのURL
url += ?row=${row}&answer=
;
const recipient = 'hogehoge1@hogehoge.com'; //一次承認者メールアドレス
const subject = '〇〇申請のお知らせ';
let body = '';
body += '以下の〇〇申請がありました。\n\n';
body += bodies.plain;
body += '承認する場合は、以下URLをクリックしてください。\n';
body += url + 'ok';
body += '否認する場合は、以下URLをクリックしてください。\n';
body += url + 'ng';
let html = '';
html += '<h1>〇〇申請のお知らせ</h1>';
html += '<p>以下の〇〇申請がありました。</p>';
html += bodies.html;
html += <p>承認する場合は、<a href="${url}ok">[一次承認]</a>をクリックしてください。</p>
;
html += <p>否認する場合は、<a href="${url}ng">[一次否認]</a>をクリックしてください。</p>
;
GmailApp.sendEmail(recipient, subject, body, {htmlBody: html});
}
function doGet(e) {
const row = e.parameter.row;
const sheet = SpreadsheetApp.getActiveSheet();
const values = sheet.getRange(row, 1, 1, 4).getValues()[0];
const bodies = generateBodies(values);
const timestamp = Utilities.formatDate(new Date(),"JST","yyyy/MM/dd"+"("+"HH:mm:ss"+")");
const answer = e.parameter.answer;
const result = {
ok: '一次承認',
ng: '一次否認'
};
sheet.getRange(row, 4).setValue(result[answer]);
sheet.getRange(row, 5).setValue(timestamp);
const recipient = bodies.email;
const subject = 〇〇申請${result[answer]}のお知らせ
;
let body = '';
body += 以下の〇〇申請が${result[answer]}されました。\n\n
;
body += bodies.plain;
let html = '';
html += <h1>〇〇申請${result[answer]}のお知らせ</h1>
;
html += <p>以下の〇〇申請が${result[answer]}されました。</p>
;
html += bodies.html;
GmailApp.sendEmail(recipient, subject, body, {htmlBody: html});
html = '';
html += <h1>〇〇申請の${result[answer]}</h1>
;
html += <p>あなたは以下の〇〇申請を${result[answer]}しました。</p>
;
html += bodies.html;
return HtmlService.createHtmlOutput(html);
}
function myFunction(e){
var row = e.range.getRow();
var sheet = e.range.getSheet();
if (sheet.getRange(row, 4) === '一次承認')
(sheet.getRange(row, 4).setValue('二次確認中'))
}
function sendMessage2(e){
const row = e.range.getRow();
const sheet = e.range.getSheet();
sheet.getRange(row, 4).setValue('二次確認中');
const bodies = generateBodies(e.values);
let url = 'https://script.google.com/hogehoge/exec'; //公開したウェブアプリケーションのURL
url += ?row=${row}&answer=
;
const recipient = 'hogehoge_2@hogehoge.com'; //二次承認者メールアドレス
const subject = '〇〇申請のお知らせ';
let body = '';
body += '以下の〇〇申請がありました。\n\n';
body += bodies.plain;
body += '承認する場合は、以下URLをクリックしてください。\n';
body += url + 'ok';
body += '否認する場合は、以下URLをクリックしてください。\n';
body += url + 'ng';
let html = '';
html += '<h1>〇〇申請のお知らせ</h1>';
html += '<p>以下の〇〇申請がありました。</p>';
html += bodies.html;
html += <p>承認する場合は、<a href="${url}ok">[二次承認]</a>をクリックしてください。</p>
;
html += <p>否認する場合は、<a href="${url}ng">[二次否認]</a>をクリックしてください。</p>
;
GmailApp.sendEmail(recipient, subject, body, {htmlBody: html});
}
function doGet(e) {
const row = e.parameter.row;
const sheet = SpreadsheetApp.getActiveSheet();
const values = sheet.getRange(row, 1, 1, 4).getValues()[0];
const bodies = generateBodies(values);
const timestamp = Utilities.formatDate(new Date(),"JST","yyyy/MM/dd"+"("+"HH:mm:ss"+")");
const answer = e.parameter.answer;
const result = {
ok: '二次承認',
ng: '二次否認'
};
sheet.getRange(row, 4).setValue(result[answer]);
sheet.getRange(row, 5).setValue(timestamp);
const recipient = bodies.email;
const subject = 〇〇申請${result[answer]}のお知らせ
;
let body = '';
body += 以下の〇〇申請が${result[answer]}されました。\n\n
;
body += bodies.plain;
let html = '';
html += <h1>〇〇申請${result[answer]}のお知らせ</h1>
;
html += <p>以下の〇〇申請が${result[answer]}されました。</p>
;
html += bodies.html;
GmailApp.sendEmail(recipient, subject, body, {htmlBody: html});
html = '';
html += <h1>〇〇申請の${result[answer]}</h1>
;
html += <p>あなたは以下の〇〇申請を${result[answer]}しました。</p>
;
html += bodies.html;
return HtmlService.createHtmlOutput(html);
}
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
var row = e.range.getRow();
var col = e.range.getColumn();
var timestamp = Utilities.formatDate(new Date(),"JST","yyyy/MM/dd"+"("+"HH:mm:ss"+")");
sh.getSheetName() === "フォームの回答 1" && (row >= 2) && (col === 4)
sh.getRange(row, 5).setValue(timestamp);
}
Google Apps Script
試したこと
function myFunction(e){にif文を書いてみましたが、初心者なので合っているかわかりません。
補足情報(FW/ツールのバージョンなど)
無し
回答1件
あなたの回答
tips
プレビュー