javascript - 如何使用 onEdit 触发器修改/更新谷歌日历事件?
问题描述
所以我一直在使用谷歌应用脚本在谷歌表单上进行试验-日历表。我能够从表单提交中自动将事件添加到谷歌日历。但是当用户编辑他们的回复时,我仍然在努力直接修改事件。
因此,新提交的第一个 endtime 将被转换为对象,然后检查是否会与其他用户的另一个提交发生冲突:
function getEndTime(request){
request.endTime = new Date(request.dateout.getTime() + 24 * 60 * 60 * 1000);
}
function getConflicts(request){
var conflicts = request.calendar.getEvents(request.date, request.endTime);
if (conflicts.length > 0) {
request.status = "Conflict";
} else {
request.status = "Approve";
}
}
如果没有冲突,日历将被更新
function updateCalendar(request){
var event = request.calendar.createEvent(
"Booked",
request.date,
request.endTime
)
}
这是 onFormSubmit 函数(带有表单提交触发器):
function main(){
var request = new Submission(lastRow);
getEndTime(request);
getConflicts(request);
draftEmail(request);
if (request.status == "Approve") updateCalendar(request);
sendEmail(request);
}
这是 onEdit 函数(带有 onEdit 触发器)和 change() 函数:
function Change() {
this.statusArray = sheet.getRange(1, lastColumn, lastRow, 1).getValues();
this.statusArray = [].concat.apply([], this.statusArray);
this.index = this.statusArray.indexOf('');
if (this.index == -1) return;
this.dateArray = sheet.getRange(1, lastColumn - 4, lastRow, 1).getValues();
this.dateArray = [].concat.apply([], this.dateArray);
this.dateoutArray = sheet.getRange(1, lastColumn - 3, lastRow, 1).getValues();
this.dateoutArray = [].concat.apply([], this.dateoutArray);
}
function onEdit() {
var change = new Change();
while (change.index != -1) {
change.status = change.statusArray[change.index];
change.row = change.index + 1;
var request = new Request(change.row);
if (change.status == 'Sent: Conflict') {
change.statusArray[change.index] = 'Conflict';
request.status = 'Conflict';
sendEmail(request);
sheet.getRange(change.row, lastColumn).setValue('Sent: Conflict');
} else {
getEndTime(request);
change.statusArray[change.index] = 'Approve';
updateCalendar(request);
sendEmail(request);
sheet.getRange(request.row, lastColumn).setValue('Sent: Approve');
break;
}
}
change.index = change.statusArray.indexOf('');
}
即使有这组代码,编辑提交总是会和之前自己的提交发生冲突。(例如,如果我在 5 月 17 日到 5 月 19 日第一次提交到 book,然后我将其编辑到 5 月 17 日到 5 月 21 日,我编辑的提交将与之前自己的提交发生冲突)。如何删除以前的事件,然后在编辑时将其替换为新的自己提交?先感谢您!
解决方案
推荐阅读
- haskell - 在 Haskell 中组合具有中间多态类型的函数
- python - 按列名将数据框映射到一列笛卡尔积
- c# - '字段列表中的未知列'a.addresscod_address' - C#
- python - 逐位学习
- python - 如果列表项在另一个列表中,如何在保持顺序的情况下将它们移动到前面
- node.js - Discord.js 我们如何从 CategoryChannel (json) 中获取类别的 id
- javascript - JQuery AJAX 发布数据未定义准系统示例
- kubernetes - Consul 服务器无法加入 Consul 集群
- data-structures - Tableau - 运动的最佳表格结构
- entity-framework-core - EF Core 数据播种(modelBuilder 上的 HasData 方法)不为 Identity 列插入数据