我需要在我组织的每个人的日历中创建一个活动。此事件提醒每个人在某个日期之前需要执行的操作,但是该日期每个月都不相同,因此我无法进行重复活动。我不想将所有人都添加为参加者,因为我希望所有人都将活动记录在日历上,而不仅仅是回答“不参加”,而忘记在好时机做他们需要做的事情。
为此,我已经编写了一个代码,该代码可从组织获取每个有效帐户,并从Google表格获取开始日期,结束日期,事件标题和事件描述。它适用于我的日历以及我在Google日历的“其他日历”列表中手动添加的人员的日历。但是该脚本不会在未出现在“其他日历”列表中的组织中的人员议程中创建活动。
function getAllPeopleFromDirectory() {
var pageToken;
var page;
var usersId = [];
do {
page = AdminDirectory.Users.list({
domain:'mydomain.com',
orderBy: 'givenName',
maxResults: 400,
query: "orgUnitPath=/ isSuspended=False",
pageToken: pageToken
});
var users = page.users;
if(users) {
for (var i=0; i< users.length; i++) {
var user = users[i];
usersId.push(user.primaryEmail);
}
} else {
Logger.log('No users found.');
}
pageToken = page.nextPageToken;
} while(pageToken);
if (usersId.length != 0){
setUpReminder(usersId);
}
}
function setUpReminder(calendarIDs) {
var ss = SpreadsheetApp.openById("SPREADSHEET_ID");
var sheet = ss.getSheetByName('reminder');
var range = sheet.getDataRange();
var values = range.getValues();
for (var i = 0; i < calendarIDs.length; i++) {
setUpCalendar(values, range, calendarIDs[i]);
}
}
function setUpCalendar(values, range, calendarId) {
var cal = CalendarApp.getCalendarById(calendarId);
for (var i = 1; i < values.length; i++) {
var session = values[i];
var date = new Date(session[1]);
var now = new Date();
if (date.getMonth() == now.getMonth()) {
var title = session[4];
var start = joinDateAndTime(session[1], session[2]);
var end = joinDateAndTime(session[1], session[3]);
var options = {location: session[5], sendInvites: false, description: session[8]};
var event = cal.createEvent(title, start, end, options).setGuestsCanSeeGuests(true);
}
}
range.setValues(values);
}
function joinDateAndTime(date, time) {
date = new Date(date);
date.setHours(time.getHours());
date.setMinutes(time.getMinutes());
return date;
}
当我与不在我其他日历上的每个人调用“ CalendarApp.getCalendarById”时,该函数返回null,因此cal.createEvent引发错误...
有人知道如何正确地做到这一点吗? 也许每次运行脚本时,我都可以在其他日历中添加和删除人员,这不是最佳解决方案,但是如果有人知道如何执行此操作,那将很酷!
答案 0 :(得分:0)
一种更好的方法是创建一个自定义日历(又称为辅助日历),该日历在GSuite域下的所有用户之间共享,而不是获取特定于用户的(主)日历并用事件进行一次更新。 。
这是Calendar API reference documentation的摘录:
...您可以显式创建任意数量的其他日历;这些日历可以在多个用户之间进行修改,删除和共享。
因此,您所需要做的就是更新辅助日历,其事件将反映在用户的日历视图中(但前提是您的用户启用了自定义日历)。