html - 从 HtmlService 输入修改现有日历事件
问题描述
我正在尝试将“注册”链接添加到 Google 日历事件中,点击时会通过 HtmlService 提示用户提交他们的电子邮件地址。然后将他们的电子邮件地址添加到活动中。
这是一个类似的例子。我想做的不同是使用 HtmlService 让用户输入他们的电子邮件地址,然后将其传递回 GAS 以添加到相关日历事件中。这样他们就可以选择他们想要的电子邮件(而不是 Session.getActiveUser().getEmail() 返回的任何电子邮件)进行注册。(通过注册,我的意思是被添加到客人名单中——他们仍然必须接受邀请,但这很好)。
这可能吗?我没有看到任何这样的例子,所以也许有更好的方法?
我开始扯掉我的头发。我已经包含了我最新的示例代码,其中我将事件对象传递到 HTML 模板中。它没有抛出错误,但它也不起作用。先感谢您!!
代码.gs:
function doGet(event) {
// // shorten the event parameter path;
var param = event.parameter;
// // get the calendar event id passed in the query parameter
var eventId = param.eId;
var calId = param.calId;
var cal = CalendarApp.getCalendarById(calId);
var t = HtmlService.createTemplateFromFile('Index');
t.eObj = cal.getEventById(eventId);
return t.evaluate();
}
function addEmail(emObj,myForm){
var guestEmail = myForm.user;
emObj.addGuest(guestEmail)
}
和 Index.html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script>
function update() {
alert("Success!");
}
</script>
</head>
<body>
<form id="myForm">
<input id="userEmail" name="user" type="text" />
<input type="button" value="Submit" onClick="google.script.run.withSuccessHandler(update).addEmail(eObj,this.form)" />
</form>
</body>
</html>
解决方案
您的 html 文件中没有 scriptlet,因此您不需要评估模板。我为 calId 和 eventId 添加了另外 2 个输入字段。在提供服务之前,它们会在 HTML 中被替换。然后事件 ID 和 Cal ID 在表单对象中传回。
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script>
function update() {
alert("Success!");
}
</script>
</head>
<body>
<form id="myForm">
<input id="userEmail" name="user" type="text" />
<input name="calId" type="text" style="display:none"
value="zzz_calID_zzz"/>
<input name="eventId" type="text" style="display:none"
value="zzz_eventID_zzz"/>
<input type="button" value="Submit" onClick="google.script.run
.withSuccessHandler(update)
.addEmail(this.form)" />
</form>
</body>
</html>
获取:
function doGet(event) {
// // shorten the event parameter path;
var param = event.parameter;
// // get the calendar event id passed in the query parameter
var eventId = param.eId;
var calId = param.calId;
var t = HtmlService.createHtmlOutputFromFile('Index').getContent();
t = t.replace('zzz_calID_zzz',calId);
t = t.replace('zzz_eventID_zzz',eventID);
return HtmlService.createHtmlOutput(t);
}
服务器代码:
function addEmail(myForm){
var cal = CalendarApp.getCalendarById(myForm.calId);
var event = cal.getEventById(myForm.eventId);
var guestEmail = myForm.user;
event.addGuest(guestEmail)
}
推荐阅读
- python - 从网页的图形中提取数据点
- php - Stripe how to cancel other recurring charges when user buys new one
- java - 如何从不断更新的 InputStream 中读取
- c++ - this_thread::sleep_for 和 C++11 标准指定的计时时钟之间的关系?
- android - 隐藏家庭酒吧颤振
- docker - 如何让 apache2 服务在容器重启时自动运行?
- javascript - reactstrap:DropdownItem不在数组的map方法内呈现
- nuxt.js - Nuxt store setup-vuex 中的错误] 未知操作类型:fetchProfiles
- vue.js - Vuelidate:多步表单验证
- javascript - 如何使我的导航栏可点击或响应?