2012-10-05 44 views
0
  • 我想邀請組的成員日曆事件批量
  • 如果我使用它的電子郵件組在事件分裂(請用組是正常的),但邀請沒有'驗證'...我可以在日曆界面手動驗證它們,但這不是一個解決方案。最後,即使客人的名字出現在活動中,他們也不會被邀請。如果我不手動「保存」此事件,則日誌顯示僅作爲來賓,不是其用戶

於是,我就單獨添加每一位客人使用下面的腳本,但我得到的,我不明白enter image description here 的錯誤出現在第一事件成功邀請的變量數後的錯誤...有時只是一個,有時是2或3或5 ...隨機。添加多個客人谷歌日曆事件引發錯誤

這是在域上的谷歌應用程序教育帳戶上運行。我擁有管理員權限,我對日曆擁有所有權利。

下面是相關函數的代碼:(拿到小組成員,邀請他們在一段時間內的每個事件,打印出生成的日誌上一個新的工作表。)

function sendinvites(e) { 
    var calendar_name = e.parameter.calendar; 
    var email = calendar_name.toLowerCase()+'@insas.be'; 
    var group = GroupsManager.getGroup(email); 
    var members = group.getAllMembers(); 
    var startDate = new Date(e.parameter.start); 
    var endDate = new Date(e.parameter.end); 
    var Calendar = CalendarApp.getCalendarsByName(calendar_name); 
    var sheetName = calendar_name + "-du-" + Utilities.formatDate(e.parameter.start, FUS1, "dd-MMM-yyyy") 
     + "-au-" + Utilities.formatDate(e.parameter.end, FUS1, "dd-MMM-yyyy") 
// 
    var events = Calendar[0].getEvents(startDate , endDate); 
    if (events[0]) { 
    var eventarray = new Array(); 
    var line = new Array(); 
    line.push('Titre : '+calendar_name,'Début ','Fin','Localisation','Durée','invités'); 
    eventarray.push(line); 

    for (i = 0; i < events.length; i++) { 
     if(events[i].getTitle().match('semaine n')=='semaine n'){continue} 
    var lr = logsheet.getLastRow(); // these lines are added here for test purpose only, to see where in the loop it fails... that's why I set values cell by cell ! 
     logsheet.getRange(lr+1,1).setValue(events[i].getTitle()+'/'+Utilities.formatDate(events[i].getStartTime(), FUS1, "dd-MMM-yyyy")); 
     for(nn=0;nn<members.length;++nn){ 
     logsheet.getRange(lr+1,nn+2).setValue(members[nn]); 
     events[i].addGuest(members[nn]) 
      } 
     line = new Array(); 
     line.push(events[i].getTitle()); 
     line.push(Utilities.formatDate(events[i].getStartTime(), FUS1, "dd-MMM-yyyy")+' à ' +Utilities.formatDate(events[i].getStartTime(), FUS1, "HH:mm")); 
     line.push(Utilities.formatDate(events[i].getEndTime(), FUS1, "dd-MMM-yyyy")+' à ' +Utilities.formatDate(events[i].getEndTime(), FUS1, "HH:mm")); 
     line.push(events[i].getLocation()); 
     line.push((events[i].getEndTime() - events[i].getStartTime())/3600000); 
     var invitelist=''; 
     var list = events[i].getGuestList() 
      for(nn=0;nn<list.length;++nn){invitelist+=list[nn].getName()+', '} 
     line.push(invitelist) 
     eventarray.push(line); 
    } 
    Logger.log(eventarray) 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(sheetName); 
    sheet.getRange(1,1,eventarray.length,eventarray[0].length).setValues(eventarray); 
    sheet.getRange(1,1,1,eventarray[0].length).setBackgroundColor('#ffffcc'); 
    sheet.setColumnWidth(1, 450);sheet.setColumnWidth(2, 150);sheet.setColumnWidth(3, 150);sheet.setColumnWidth(4, 250);sheet.setColumnWidth(5, 75);sheet.setColumnWidth(6, 450);; 
    sheet.setFrozenRows(1) 
    } else { 
    var startstring = Utilities.formatDate(e.parameter.start, FUS1, "dd-MMM-yyyy"); 
    var endstring = Utilities.formatDate(e.parameter.end, FUS1, "dd-MMM-yyyy"); 
    Browser.msgBox('Aucun événement entre le ' + startstring + ' et le ' + endstring +' dans votre agenda :'+calendar_name); 
    } 

    var app = UiApp.getActiveApplication(); 
    app.close(); 
    return app; 
} 

所以我的問題是:這是正確的方法嗎?我是否應該通過電子郵件邀請該組,並且在這種情況下,我怎樣才能讓這個組自動分配到每個日曆中?

有沒有人遇到過這種情況?

我有種陷在這裏: -/

裁判:issue tracker 1906合併with 264詳見

回答

0

閱讀問題跟蹤器,似乎有一個解決此問題的工作方法,即每次分別獲取事件並一次添加一個訪客。

這是可怕的慢,但沒有明顯的錯誤運行(到現在;-)

我希望,因爲它是非常不舒服的谷歌將改變這種行爲!

的代碼是如此緩慢,超時後,有15位客人20個事件...很愉快,我添加了記錄表的地方停止,我用它來設置日期的UI甚至時間後保持打開狀態告訴我出。我想我會在接下來的幾天裏喝大量的咖啡,等待從9月份到6月份的20個日曆!;-P


這裏是修改後的代碼(這是改變的一部分)

for (i = 0; i < events.length; i++) { 
    if(events[i].getTitle().match('semaine n')=='semaine n'){continue} 
    var ID = events[i].getId(); // get the ID to be able to recall the event later 
var lr = logsheet.getLastRow(); 
    logsheet.getRange(lr+1,1).setValue(events[i].getTitle()+'/'+Utilities.formatDate(events[i].getStartTime(), FUS1, "dd-MMM-yyyy")); 
    for(nn=0;nn<members.length;++nn){ 
    logsheet.getRange(lr+1,nn+2).setValue(members[nn]); 
    Calendar[0].getEventSeriesById(ID).addGuest(members[nn]);// separately get each event and add guest 
    } 
    line = new Array(); 
    line.push(events[i].getTitle()); 
    line.push(Utilities.formatDate(events[i].getStartTime(), FUS1, "dd-MMM-yyyy")+' à ' +Utilities.formatDate(events[i].getStartTime(), FUS1, "HH:mm")); 
    line.push(Utilities.formatDate(events[i].getEndTime(), FUS1, "dd-MMM-yyyy")+' à ' +Utilities.formatDate(events[i].getEndTime(), FUS1, "HH:mm")); 
    line.push(events[i].getLocation()); 
    line.push((events[i].getEndTime() - events[i].getStartTime())/3600000); 
    var invitelist=''; 
    var list = Calendar[0].getEventSeriesById(ID).getGuestList() 
     for(nn=0;nn<list.length;++nn){invitelist+=list[nn].getName()+', '} 
    line.push(invitelist) 
    eventarray.push(line); 
} 
0

自己的答案。根據各部分之間http://code.google.com/p/google-apps-script-issues/issues/detail?id=264#c40

This exception error is not a bug. 
This issue occurs only when one event is being modified by multiple parties simultaneously. 
It is thrown intentionally to prevent a loss of data. 

嘗試使用休眠您的代碼腳本:

Utilities.sleep(2000); 
+0

您好,感謝您的回答,我試圖通過添加一個2000毫秒各addGuest之間的停頓,但我得到完全相同的結果...在可變數目的結果後出現錯誤。這就是說,我不明白這是怎麼被認爲是同時的......它是通過施工順序是不是?而且我還有其他腳本可以批量創建大量事件,而不會造成任何問題。 –