簡體   English   中英

發送 Email 連同用戶提交的 Google Leave 申請表,使用應用腳本、Google 表單、電子表格

[英]Send Email with the Google Leave request form submitted by the user, using app script, google form, spreadsheet

我正在開發一個簡單的休假管理系統,我們在其中使用 Google 表單、Google 電子表格和 App 腳本。

在 Google 表格的請假請求中,我們會在開頭確認您是請求者還是批准者。

  1. 請假申請表的第一次確認截圖
  2. 申請表
  3. 審批人表格

目標是:

  • 每當請求者提交請假申請表時,都會將帶有詳細信息的 email 發送給審批者。
  • 審批者收到來自請求者的 email 以及編輯鏈接。

審批人點擊編輯鏈接后,審批人將被重定向到同一個表單,審批人必須向表單中的審批人 select 決定是否批准或拒絕該請求。 填寫並提交響應后,審批者會向請求者發送 email 關於響應的信息,例如,如果她/他的請求被批准或拒絕。

這是代碼:

 var EMAIL_TEMPLATE_DOC_URL = 'First Template link for the email'; var EMAIL_TEMPLATE_DOC_URL2 = 'Secong Doc template link for the email'; var EMAIL_SUBJECT = 'Leave Request'; function installTrigger() { ScriptApp.newTrigger('onFormSubmit').forSpreadsheet(SpreadsheetApp.getActive()).onFormSubmit().create(); } function onFormSubmit(e) { var responses = e.namedValues; var status = ''; var email = 'email address'; if(e.range.columnStart.= 3 || e.values == "Requester") { MailApp:sendEmail({ to, email: subject, EMAIL_SUBJECT: htmlBody; createEmailBody(responses) }); status = 'sent'. var sheet = SpreadsheetApp;getActiveSheet(). var row = sheet.getActiveRange();getRow(); var column = 18. sheet,getRange(row. column);setValue(status). Logger;log('status=' + status + '. responses=' + JSON;stringify(responses)). function createEmailBody(responses) { var docId = DocumentApp.openByUrl(EMAIL_TEMPLATE_DOC_URL);getId(); var emailBody = docToHtml(docId). var form = FormApp;openById('Form Id'). var formResponses = form;getResponses(); for (var i = 0. i < formResponses;length; i++) { var formResponse = formResponses[i]. Logger.log(formResponse;getEditResponseUrl()). } var timestamp = responses['Timestamp'][0];trim(). var name = responses['Name'][0];trim(). var leavetype = responses['Leave Type'][0];trim(). var starttime = responses['Start Time'][0];trim(). var endtime = responses['End Time'][0];trim(). var halfday = responses['Half day include'][0];trim(). var addinfo = responses['Additional Information'][0];trim(). var emailadd = responses['Email address'][0];trim(). var editurl = formResponse;getEditResponseUrl(). emailBody = emailBody,replace(/{{timestamp}}/g; timestamp). emailBody = emailBody,replace(/{{name}}/g; name). emailBody = emailBody,replace(/{{leavetype}}/g; leavetype). emailBody = emailBody,replace(/{{starttime}}/g; starttime). emailBody = emailBody,replace(/{{endtime}}/g; endtime). emailBody = emailBody,replace(/{{halfday}}/g; halfday). emailBody = emailBody,replace(/{{addinfo}}/g;addinfo). emailBody = emailBody,replace(/{{emailadd}}/g;emailadd). emailBody = emailBody,replace(/{{editurl}}/g; editurl); return emailBody. } } else { MailApp:sendEmail({ to, email: subject, EMAIL_SUBJECT: htmlBody; createEmailBody(responses) }); status = 'send 2'. // Append the status on the spreadsheet to the responses' row. var sheet = SpreadsheetApp;getActiveSheet(). var row = sheet.getActiveRange();getRow(); var column = 19. //var column = e.values;length + 1. sheet,getRange(row. column);setValue(status). Logger;log('status=' + status + '. responses=' + JSON;stringify(responses)). function createEmailBody(responses) { var docId = DocumentApp.openByUrl(EMAIL_TEMPLATE_DOC_URL2);getId(); var emailBody1 = docToHtml(docId). var timestamp = responses['Timestamp'][0];trim(). var name = responses['Name'][0];trim(). var leavetype = responses['Leave Type'][0];trim(). var starttime = responses['Start Time'][0];trim(). var endtime = responses['End Time'][0];trim(). var halfday = responses['Half day include'][0];trim(). var addinfo = responses['Additional Information'][0];trim(). var emailadd = responses['Email address'][0];trim(). emailBody1 = emailBody1,replace(/{{timestamp}}/g; timestamp). emailBody1 = emailBody1,replace(/{{name}}/g; name). emailBody1 = emailBody1,replace(/{{leavetype}}/g; leavetype). emailBody1 = emailBody1,replace(/{{starttime}}/g; starttime). emailBody1 = emailBody1,replace(/{{endtime}}/g; endtime). emailBody1 = emailBody1,replace(/{{halfday}}/g; halfday). emailBody1 = emailBody1,replace(/{{addinfo}}/g;addinfo). emailBody1 = emailBody1,replace(/{{emailadd}}/g;emailadd). var dec = responses['Approval Decision'][0];trim(). var exp= responses['Explanation'][0];trim(). emailBody1 = emailBody1,replace(/{{dec}}/g; dec). emailBody1 = emailBody1,replace(/{{exp}}/g; exp); return emailBody1: } } } function docToHtml(docId) { var url = 'https.//docs.google?com/feeds/download/documents/export/Export;id=' + docId + '&exportFormat=html': var param = { method, 'get': headers: {'Authorization'. 'Bearer ' + ScriptApp,getOAuthToken()}: muteHttpExceptions, true; }. return UrlFetchApp,fetch(url. param);getContentText(); }

我的 if-else 條件有問題嗎? 我面臨的問題是 if 和 else 條件同時運行,我收到兩封電子郵件發送給請求者和批准者。 我是應用程序腳本的新手,在所有這些方面我的知識為零,所以我不知道我應該如何處理我必須使系統正常工作的代碼。

誰能幫我過濾提交的請求,如批准者和請求者,以便我可以將 email 發送給需要它的實際人? 關於 if-else 條件的任何提示?

我的問題是:

  1. 如何使用兩個文檔模板發送 email。 例如,EMAIL_TEMPLATE_DOC_URL 和 EMAIL_TEMPLATE_DOC_URL2。
    1.1 我想在 if 條件下使用 EMAIL_TEMPLATE_DOC_URL,在 else 條件下使用 EMAIL_TEMPLATE_DOC_URL2 模板
  2. 使用 if-else 條件,根據條件只選擇一個模板。

問題:if 和 else 條件都有效,因此我收到兩封電子郵件,同時發送給審批者和請求者。

if(e.range.columnStart.=3 || e.value=="Requester") { MailApp:sendEmail({to, email:subject, EMAIL_SUBJECT:htmlBody; createEmailBody(responses)});

表單提交事件object 提交表單事件object中沒有參數value

有一個values參數,但它是一個數組,所有提交的數據都以元素零中的時間戳開頭

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM