[英]How reduce the running time for this code?
這是谷歌 web 應用腳本中員工打卡和打卡代碼的一部分。
當從客戶端單擊時鍾輸出 function 按鈕時,我在代碼中添加了一個 email 觸發器。 在我修改此代碼后,運行時間增加了,至少需要 15-60 秒才能執行,並且由於等待時間過長,員工多次單擊下班按鈕會觸發許多電子郵件。
你能幫我減少執行時間並可能停止多個電子郵件觸發器嗎?
提前致謝。
//CLOCK OUT PROCESS
function clockOut() {
var user = Session.getActiveUser().getEmail();
var employee = AdminDirectory.Users.get(user).name.fullName;
Logger.log('User data:\n%s', JSON.stringify(employee, null, 2));
console.log(employee);
//DEFINE ALL ACTIVE SHEETS
var ss = SpreadsheetApp.getActiveSpreadsheet();
//DEFINE MAIN SHEET
var mainSheet = ss.getSheetByName("MAIN");
//LAST ROW ON MAIN SHEET
var lastRow = mainSheet.getLastRow();
var foundRecord = false;
var new_date = new Date();
var return_date = getDate(new_date);
var error = 'SUCCESS';
var return_array = [];
for (var j = 2; j <= lastRow; j++)
{
// FIND CLOCK IN RECORD
if(employee == mainSheet.getRange(j, 1).getValue() && mainSheet.getRange(j,3).getValue() == '')
{
// UPDATE CLOCK IN RECORD
mainSheet.getRange(j,3)
.setValue(new_date)
.setNumberFormat("dd/MMM/yyyy hh:mm:ss am/pm")
.setHorizontalAlignment("left")
.setFontSize(12);
var totalTime = (mainSheet.getRange(j,3).getValue() - mainSheet.getRange(j,2).getValue()) /(60*60*1000);
mainSheet.getRange(j,4).setValue(totalTime.toFixed(2))
.setNumberFormat("#0.00")
.setHorizontalAlignment("left")
.setFontSize(12);
foundRecord = true;
//<-----------------------------------ADDED THIS CODE------------------------->
//SEND EMAIL AT CLOCK OUT
var today_Date = Utilities.formatDate(new Date(), "GMT+1", "EEE dd MMM yyyy");
var subject = "Your Work Log of The Day - "+today_Date;
var startTime = mainSheet.getRange(j,2).getDisplayValue();
//If Contion for startTime
var officeStart = mainSheet.getRange(j,2).getValue();
if (officeStart.getHours() * 100 + officeStart.getMinutes() >= 0940){
var startTime = startTime+ "<font color='Red'> ⬤ Late </font>";
}
else{
var startTime =startTime +"<font color='Green'> ⬤ OnTime </font>";
}
var endTime = mainSheet.getRange(j,3).getDisplayValue();
var workTime = mainSheet.getRange(j,4).getDisplayValue();
if (workTime > 12){
var workTime = workTime + "<br> <font color='Red'>LATE RECORD - CONTACT HR </font>";
}
else{
var workTime = workTime;
}
var body = "Hi "+employee+"<br><br>Your Total Work Hours - <b>" +workTime +' </b><br><hr width="300" align="left" Color="#bfbfbf" size="0.75"> IN - <b>' + startTime+ '</b> <br><hr width="300" align="left" Color="#bfbfbf" size="0.75"> OUT - <b>'+endTime+"</b>" ;
GmailApp.sendEmail(user, subject, body, {htmlBody: body,name: "ABC"});*
//<-----------------------------------END ADDED CODE------------------------->
}
}
// IF NO CLOCK IN RECORD
if(foundRecord == false)
{
return_array.push(['Need to Clock In First', '', employee]);
return return_array;
}
@malarres 提出的建議是一個很好的建議。 用戶單擊退出的按鈕應該在 HTML 代碼的某些部分,使用按鈕的 id,您可以使用純 JS 禁用/啟用它。
按照這個答案了解如何操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.