我有一个教育帐户的谷歌应用程序和一个小工具内运行的应用程序脚本,它获取用户所属/拥有的所有日历。然后我根据他们的角色生成网址。管理员用户似乎可以看到他们的所有日历,但普通用户需要专门点击"订阅日历"或访问https://www.google.com/calendar/render#main_7然后重新加载小工具,以便能够查看其日历。
if (role == "student") {
url = "https://www.google.com/calendar/embed?
showTitle=0&showTabs=1&showCalendars=1&height=600&wkst=2&mode=DAY&showTitle=0&" + replaceStr + "&ctz=Australia%2FVictoria&dates=" + startDate + "/" + startDate;
} else if (role == "parent") {
url = "https://www.google.com/calendar/embed?showTitle=0&showTabs=1&showCalendars=1&height=600&wkst=2&mode=MONTH&showTitle=0&" + replaceStr + "&ctz=Australia%2FVictoria&dates=" + startDate + "/" + startDate;
} else if (role == "teacher") {
url = "https://www.google.com/calendar/embed?showTitle=0&showBorderTitle=1&showTabs=1&showCalendars=1&height=600&wkst=2&mode=WE EK&showTitle=0&" + replaceStr + "&ctz=Australia%2FVictoria&dates=" + startDate + "/" + startDate;
} else {
url = "https://www.google.com/calendar/embed?showTitle=0&showBorderTitle=1&showTabs=1&showCalendars=1&height=600&wkst=2&mode=MO NTH&showTitle=0&" + replaceStr + "&ctz=Australia%2FVictoria&dates=" + startDate + "/" + startDate;
}
以下是获取所有用户日历的代码:
var calendars = CalendarApp.getAllCalendars();
var calendarIDs = [];
for (var i=0;i<calendars.length;i++) {
calendarIDs.push(calendars[i].getId());
}
Logger.log(calendarIDs);
return calendarIDs;
}
有没有解决这个问题的方法?我尝试了谷歌日历权限,编辑网址参数并使用UrlFetchApp在我的应用脚本中获取https://www.google.com/calendar/render#main_7,以异步方式加载页面,但没有成功。任何建议或任何人有同样的问题,将不胜感激。
更新我能够显示用户拥有的日历,但除非执行上述流程,否则无法查看共享给所有域用户的日历。我们是否无法显示非公开但不属于用户的日历,只能共享?
答案 0 :(得分:0)
问题在于两个不允许嵌入的日历。这些是联系人日历和假期日历。一旦我从replaceStr字符串中取出这些字符串,我就能够在GAS iframe中成功加载我的所有日历(最多16个)。
更正代码:
var calendars = CalendarApp.getAllCalendars();
var calendarIDs = [];
var notCalendarIDs = [];
for (var i=0;i<calendars.length;i++) {
Logger.log("All calendars " + calendars[i].getId());
if (calendars[i].getId() != "en.australian#holiday@group.v.calendar.google.com" && calendars[i].getId() != "#contacts@group.v.calendar.google.com") {
calendarIDs.push(calendars[i].getId());
}
}