2013-02-21 43 views
0

以下是我希望能夠做到的事情。這點就是要管理每週日讓我們的教會運行所需的各種志願者。基於Google Docs的志願者管理系統的結構

製作一份Google Docs電子表格,其中包含志願者的姓名以及他們願意工作的角色(例如,蒂姆志願者是引導者;安娜志願者是一名講師)。

有一張單獨的表格列出了每個需要在接下來的6個月內填補的志願者職位(例如,我們在週日需要2名導師和1名講師)。

編寫一個Google Apps腳本,該腳本將通過需要填寫的職位列表並選擇要填寫該職位的下一個志願者(可能基於誰已經填補了這個角色的最少次數)過去)。然後腳本會發送一封電子郵件給那個志願者,並詢問他們是否可用於該職位。理想情況下,電子郵件將基於HTML,並將包含2個鏈接:1讓他們點擊接受該位置,1讓他們點擊拒絕該位置。

如果志願者接受該位置,則該腳本將其名稱添加到該位置。如果志願者拒絕了該位置,腳本會轉到NEXT志願者併發送相同的電子郵件。

該腳本將繼續此過程,直到所有插槽填滿或所有志願者都已拒絕。

我可以概念化所有我需要做的事情,除了電子郵件中的鏈接。

有沒有人有任何建議的方式來動態生成這樣的鏈接?

對於我如何構建我的腳本來完成我想要的任何其他想法?

顯然,我仍處於思考過程中,所以我願意接受任何建議。

在此先感謝。 (我們的小教堂的成員也感謝你!)

回答

1

生成鏈接當然是可能的! I wrote up an answer recently。你不需要那個答案的所有部分。也許你應該look at this answer instead

無論如何,有點樣品/僞代碼。

var scriptUrl = ScriptApp.getService().getUrl(); //URL to invoke your script 

var message = "blah blah event details blah blah" 
    +" <a href=\""+scriptUrl+"?user="+user+"&accept=no\">Decline</a>" 
    +" or <a href=\""+scriptUrl+"?user="+user+"&accept=yes\">Accept</a>"; 

MailApp.sendEmail(recipent,subject,"",{htmlBody:message}); 

然後你通過使用我在上面的答案中解釋的doGet(e)參數來處理它。

function doGet(e) { 
    var user = e.parameter.user; 
    var accept = e.parameter.accept; 

    if (accept=="yes") { 
    //he/she accepted!! 
    } else { 
    //he/she declined. =(
    } 
} 
+0

嗨,菲爾。感謝您的答覆。你讓我非常興奮,因爲我認爲這可能奏效。但我也有點困惑。我與您一起創建帶有2個動態網址的電子郵件。我理解doGet(e)參數背後的想法。但我不知道我在開發doGet(e)代碼的位置。繼上面的「僞代碼」生成的鏈接將我帶到一個URL:「http:// null /?user = test&accept = no」。我錯過了一大塊解決方案,但我沒有得到什麼。再次感謝! – doebtown 2013-02-21 20:23:54

+0

呃......我可能比你更多和你在一起。我將doGet(e)代碼寫入自己的函數,然後將該函數作爲一個Web應用程序部署,這給了我一個URL。然後,我將原始函數中的scriptUrl變量替換爲新depoloyed Web應用程序的URL。其中 - 結合?用戶和&接受代碼 - 使我能夠將(e)參數傳遞給Web應用程序。對?但是當我嘗試從我的電子郵件中的鏈接執行時,它會顯示「TypeError:Can not read property」accept「from undefined」。 – doebtown 2013-02-21 20:40:08

+0

正如一個註釋,你應該添加'&eventId = SOMETHING',這樣你就可以知道他們接受或拒絕了什麼事件。此外,我意識到我在「參數」一詞中有一個錯字。請適當修復您的代碼。 – 2013-02-21 20:49:13