【GAS】日報承認システムのメール通知トリガーについて
解決したいこと
- 簡易的な承認システムをGASでつくってます。
- 承認者は「課長」「部長」の2段階で、それぞれ「承認」「棄却」をできるようにしたいです
前回別の質問で日付の表示についてご質問をし無事解決しました。
今回はもう少し基本に立ち返り、メール送信のトリガーについて改めてお伺いしたく存じます。
記述全体
function sendEmailByEvent() {
//シート内の全データを取得
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("確認シート");
var data = sheet.getDataRange().getValues();
//変更されたセルを取得、また、セルの行数を取得して配列に対応できるように-1した変数を設定
var targetCell = sheet.getActiveCell();
var targetCellRow = targetCell.getRow()-1;
//メール送付先のアドレスとメール題名を設定
//第1段階の課長承認関係
//承認
var recipient1c = "bucho@gmail.com", subject1t = "要作業|日報確認依頼(自動配信)"; //本番は部長アドレスにする
//棄却
var recipient1a = "tantosha@gmail.com", subject1f = "要確認|課長日報棄却(自動配信)"; //本番は担当者アドレスにする
//第2段階の部長承認関係
//承認
var recipient3a = "tantosha@gmail.com", subject3t = "部長最終承認のお知らせ(自動配信)"; //本番は担当者アドレスにする
var recipient3b = "kacho@gmail.com", subject3t = "部長最終承認のお知らせ(自動配信)"; //本番は課長アドレスにする
//棄却
var recipient2a = "tantosha@gmail.com", subject2f = "要確認|部長日報棄却(自動配信)"; //本番は担当者アドレスにする
var recipient2b = "kacho@gmail.com", subject2f = "要確認|部長日報棄却(自動配信)"; //本番は課長アドレスにする
//メール本文用に、取得したセルの行データをbody配列にpushする
var body = []
body.push(data[targetCellRow])
var datatitle = data[0];//タイトル行を取得
body = '\― 本メールは自動配信メールです ―\n\n'
body += '以下の通り日報が更新されました。\n\n'
body += '詳細は次のスプレッドシートをご確認ください。\n'
body += 'https://supredsheet~\n\n';
datatitle.forEach((v, i) => body += " " + v + "|" + (data[targetCellRow][i] //タイトル+取得した項目+改行をbodyに追加を繰り返し
instanceof Date ? Utilities.formatDate(data[targetCellRow][i], Session.getScriptTimeZone(), "yyyy/MM/dd") : data[targetCellRow][i]) + "\n"); //日付表示形式をシンプルにする
//今回のメイン。G行が提出かつH行とI行の文字列をみて判定し次のどちらかのメールを送付
//第1段階の課長承認関係
if(targetCell.getColumn() === 8){ //8は8行目=H行のこと?
if(data[targetCellRow][6] == "提出" && data[targetCellRow][7] ==="承認") //提出日(タイムスタンプ)とメールアドレスを除く[6]はH行/[7]はI行?
GmailApp.sendEmail(recipient1c, subject1t, body)
if(data[targetCellRow][6] == "提出" && data[targetCellRow][7] == "棄却") //提出日(タイムスタンプ)とメールアドレスを除く[6]はH行/[7]はI行
GmailApp.sendEmail(recipient1a, subject1f, body)
}
///第2段階の部長承認関係
if(targetCell.getColumn() === 9){ //9は9行目=I行のこと
if(data[targetCellRow][7] == "承認" && data[targetCellRow][8] == "承認") //提出日(タイムスタンプ)とメールアドレスを除く[6]はH行/[8]はJ行
GmailApp.sendEmail(recipient3a, subject3t, body)
GmailApp.sendEmail(recipient3b, subject3t, body)
if(data[targetCellRow][7] == "承認" && data[targetCellRow][8] == "棄却") //提出日(タイムスタンプ)とメールアドレスを除く[6]はH行/[8]はJ行
GmailApp.sendEmail(recipient2a, subject2f, body)
GmailApp.sendEmail(recipient2b, subject2f, body)
}
}
うまくできていること
今回以下の通りスプレッドシートで記載しております。
A | B | C | D | E | F | G | H | I |
---|---|---|---|---|---|---|---|---|
Time | Date | Name | Memo | 判定条件1 | 判定条件2 | 判定条件3 |
「課長」承認段階である1段階目について詳細は以下の通りです。
G行の判定条件1には固定値で「提出」を入れております。
スプシ上でH行を「承認」にプルダウンから選び更新するとメールが次の承認者である部長に飛ぶようになっています。
「棄却」を選択すると「担当者」にメールで通知が飛ぶようになっています。
ここまではうまくできています。
発生している問題・エラー
問題が発生しているのは「部長」承認段階である2段階目になります。
部長が「承認」を選択すると、課長に「承認」「棄却」の2通メールが届きます。
一方部長が「棄却」を選択すると、課長にも本来「棄却」が届いて欲しいところ何も届かず、担当者にのみ「棄却」のメールが届きます。
2段階目のトリガー関係のソースを完全に理解できていないため対処法が分かりません。
いつも初歩的なご質問となり申し訳ありません。
何卒宜しくお願い致します。
0