簡體   English   中英

如何減少此代碼的運行時間?

[英]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.

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