2013-02-21 53 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