繁体   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