前提
https://tonari-it.com/gas-workflow-url-parameter/
こちらのシリーズを参考に、Googleフォームでワークフローを作成しています。
承認の項目を付けるところまでは問題なく作れたのですが、
この最後のページの「承認」と「否認」を選択できるように作成を試みたところ、承認or否認後のメール本文内、クリック後のページの両方に表示される日付の形式が変換されてしまうことと、選択によって変更する「承認」と「否認」の文字列が正常に反映しない状態になりました。
実現したいこと
- 日付を yyyy/mm/dd の形式で表示したい
- ${result[answer]} と表示されてしまう部分を、回答結果により 承認 否認 と表示されるようにしたい
発生している問題・エラーメッセージ
↓フォーム送信後に承認者へ配信されるメール本文(問題なし)
↓承認or否認後に送信されるメール本文&クリック後に表示されるページ(文字列と日付に不具合あり)
表示上ではおかしいのですが、スプレッドシートに記録されるデータは正常に記録されています。
メール送信のコード
function sendMessage(e) { const row = e.range.getRow(); const sheet = e.range.getSheet(); sheet.getRange(row, 11).setValue('申請中'); const bodies = generateBodies(e.values); let url = 'ウェブアプリケーションのURL'; url += `?row=${row}&answer=`; const recipient = '承認者のメールアドレス'; 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> <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, 11).getValues()[0]; const bodies = generateBodies(values); const answer = e.parameter.answer; const result = { ok: '承認', ng: '否認' }; sheet.getRange(row, 11).setValue(result[answer]); 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 generateBodies(values){ const [timeStamp, email, dept , name , day , ●●●, ●●●, ●●●, ●●●, ●●●] = values; let plain = ''; plain += `・営業所: ${dept}\n`; plain += `・申請者名: ${name}\n`; plain += `・使用希望日: ${day}\n`; plain += `・●●●: ${●●●}\n`; plain += `・●●●: ${●●●}\n`; plain += `・●●●: ${●●●}\n`; plain += `・●●●: ${●●●}\n\n`; let html = '<ul>'; html += `<li>営業所: ${dept}</li>`; html += `<li>申請者名: ${name}</li>`; html += `<li>使用希望日: ${day}</li>`; html += `<li>●●●: ${●●●} (${no})</li>`; html += `<li>●●●: ${●●●}</li>`; html += `<li>●●●: ${●●●}</li>`; html += `<li>●●●: ${●●●}</li>`; html += '</ul>'; return { email: email, plain: plain, html: html }; }
マニフェストファイル
{ "timeZone": "Asia/Tokyo", "dependencies": {}, "exceptionLogging": "STACKDRIVER", "oauthScopes": [ "https://www.googleapis.com/auth/spreadsheets.currentonly", "https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/forms", "https://www.googleapis.com/auth/gmail.send", "https://www.googleapis.com/auth/gmail.compose", "https://www.googleapis.com/auth/gmail.modify", "https://mail.google.com/", "https://www.googleapis.com/auth/gmail.addons.current.action.compose", "https://www.googleapis.com/auth/script.external_request" ], "runtimeVersion": "V8", "webapp": { "executeAs": "USER_DEPLOYING", "access": "DOMAIN" } }
試したこと
以前の質問でシングルクオーテーションの入力ミスを指摘していただいたので、間違って入力しないよう参考先からコピペしてきたのですが、正常に機能しませんでした。


回答1件
あなたの回答
tips
プレビュー