iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0

今天我們就把整個服務完成吧!

不知道大家順利地收到通知了沒?

我已經順利收到囉~

咦咦咦?發生什麼事!

為什麼我一次收到兩封咧?

回頭看一下程式碼,以及對照了一下試算表表單,我發現:

啊!他連已經勾選的項目都算進去了啦!

而且信中的內容也有問題:

那個 -3 天是發生什麼事啊…

所以我們今天會來調整一下這兩個部分!


首先我們先簡單的來調整一下「已經歸還的物品不用再發信」的部分。

其實這部份超級簡單的,只是加上一組判斷式而已:

function returnNotice() {
  // 取得試算表中的所有資料
  const TheDatas = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
  // 取得現在時間
  const now = new Date().getTime();
  // 設定開始通知的時間
  const oneDayTime = 24*60*60*1000;
  const startNoticeTime = 3*oneDayTime;

  TheDatas.forEach(data => {
    if (data[0] === "時間戳記") {
      return;
    }
+    if (data[6]) {
+      return;
+    }
    let expireTime = new Date(data[5]).getTime();
    let remainingDay = expireTime - now;
    if (remainingDay > startNoticeTime) {
      return;
    }
    remainingDay = Math.floor(remainingDay/oneDayTime);
    const noticeData = {
      email: data[1],
      name: data[2],
      itemName: data[3],
      itemCount: data[4],
      remaining: remainingDay
    };
    SendNotice(noticeData);
  });
}

根據我們拿到的資料,在 data[6] 的資料為是否已經歸還的 Check Box ,所以我們只要看到這筆資料為 true 的時候,表示被勾選,已經歸還,就直接跳過,不用留戀。

這樣,就不會發生已經歸還卻還是寄信的問題了~

但是我們需要等到明天早上才能被測試嗎?

當然不是,記不記得我們前面有說過可以做測試執行呢?

如果是要資料進來才執行的,當然沒辦法使用這個功能。

但是我們今天是要直接抓整個試算表的資料,所以用測試執行會是剛剛好的選項!

所以我們回到編輯器,找到執行的部分:

接著按下 onItemReturn 那個地方,切換我們要測試的函式:

選擇 returnNotice 後,按下執行:

接著我們就會看到我們的 returnNotice 被執行了!

我們切回信箱看一下信件:

太好了!我們只會寄出還沒歸還的東西了!

這個部分你可以跟你自己的資料進行比對喔~


接下來我們來看一下那個 -3 天怎麼辦…

其實也很簡單,我們要去調整 SendNotice 這個函式,新增一個條件式進去。

function SendNotice({email, name, itemName, itemCount, remaining}) {
  MailApp.sendEmail({
    to: email,
-    subject: 【系統訊息,請勿回覆】距離歸還 ${itemName} 剩餘 ${remaining} 天!
+    subject: remaining >= 0 ? `【系統訊息,請勿回覆】距離歸還 ${itemName} 剩餘 ${remaining} 天!` : `【系統訊息,請勿回覆】距離歸還 ${itemName} 已經逾期歸還 ${Math.abs(remaining)} 囉!`,
    body: `${name} 您好,
-      您借用的 ${itemCount} 個 ${itemName} 剩餘 ${remaining} 天需要歸還`
+      您借用的 ${itemCount} 個 ${itemName} ${remaining >= 0 ? `剩餘 ${remaining} 天需要歸還` : `已經逾期 ${Math.abs(remaining)} 天歸還`},
-      請務必於時限內歸還,或是至資訊組辦理續借。
+      請務必於儘速歸還,或是至資訊組辦理續借。
      非常感謝您的配合!`
  });
}

我這邊為了處理上方便,因此採用三元運算子,這我們在 Day8 有用過,大家可以回去看一下喔~

OK,我們來測試一下吧!

重複上面測試的動作,然後再去收信:

太好了,標題有成功修改!

我們進入內文看看:

成功修改!


今天我們就到這裡囉!

我相信你們對於上面這一個專題還有一些疑惑…

但是不用擔心,明天我就來為大家好好講一講裡面的一些內容。

照慣例:

今日作業

請試著把 SendNotice 和 SendMail 這兩個函式合併吧!

作業也許稍難,但是非常有挑戰性喔~

我們就明天見~


關於兔兔們:


我:Google Apps Script 的內容真的可以寫很多,但是自從行政上越來越忙後,寫文章的時間也壓縮了…期許我自己接下來還能好好寫文章,把這 30 天挑戰完成吧!
我:話說…沒有學生嗆我,感覺有點無聊呢……我才不是受虐體質呢!!!

上一篇
Day 11 - 物品借用紀錄系統 (3) 發送到期與逾期通知
下一篇
Day 13 - 物品借用紀錄系統 (3) 程式碼解說
系列文
來自 GAS 的香氣~跟鳳黃酥一起享受 Google Apps Script 的午茶時光23
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言