2015-09-07 74 views
0

我有一个用于教育帐户和应用程序脚本的Google应用程序,该应用程序脚本在小工具中运行,可以获取用户所有/拥有的所有日历。然后,我根据他们的角色生成网址。看起来,管理员用户可以看到他们的所有日历,但普通用户需要专门点击“订阅日历”或访问https://www.google.com/calendar/render#main_7,然后重新加载小工具才能查看他们的日历。在iframe中生成多个日历

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; 
} 

有没有解决这个问题的方法吗?我已经尝试了谷歌日历的权限,编辑url参数并使用UrlFetchApp在我的应用程序脚本中获取https://www.google.com/calendar/render#main_7以异步加载页面而没有成功。任何意见,或如果任何人有这样的问题将不胜感激。

UPDATE我能够显示用户拥有的日历,但共享给所有域用户的日历无法查看,除非执行上述过程。我们是否无法显示不公开且不属于用户所有的日历,只能共享?

+0

我不知道我在您的文章看问题的任何地方? – dman2306

+0

对不起,我会尽快澄清 – Tyron

回答

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#[email protected]" && calendars[i].getId() != "#[email protected]") { 
       calendarIDs.push(calendars[i].getId()); 
       } 
     }