我创建了一个vsto outlook插件。基本的想法是收听日历事件,当某些事件发生时,我们必须同步到另一个数据源。
所有内容都与用户自己的日历一致,但是一旦我们开始使用共享日历(交换),事件就不再被触发了。
我有以下代码,它是真实插件的精简版。
CalendarModule calModule = (CalendarModule)this.Application.ActiveExplorer().NavigationPane.Modules.GetNavigationModule(OlNavigationModuleType.olModuleCalendar);
string debug = string.Empty;
foreach (NavigationGroup group in calModule.NavigationGroups)
{
for (int i = 1; i <= group.NavigationFolders.Count - 1; i++)
{
try
{
NavigationFolder navFolder = group.NavigationFolders[i];
debug += navFolder.DisplayName + "\r";
Folder f = navFolder.Folder as Folder;
AddEventToAppointmentFolder(f);
debug += f.Name + "\r";
FolderList.Add(f);
Items items = f.Items;
debug += items.Count.ToString() + "\r";
AddEventsToAppointmentFolderItems(items);
FolderItemsList.Add(items);
}
catch (System.Exception ex)
{
debug += "Error in Other foldergroup:\r" + ex.Message + "\r";
}
}
public void AddEventToAppointmentFolder(Folder f)
{
//f.BeforeItemMove += new MAPIFolderEvents_12_BeforeItemMoveEventHandler(AppointmentFolder_BeforeItemMove);
}
public void AddEventsToAppointmentFolderItems(Items i)
{
i.ItemAdd += new ItemsEvents_ItemAddEventHandler(CalendarFolderItemAdd);
i.ItemChange += new ItemsEvents_ItemChangeEventHandler(appointments_ItemChange);
//i.ItemRemove += new ItemsEvents_ItemRemoveEventHandler(appointments_ItemDelete);
}
有没有任何线索/建议如何解决这个问题?
以下行会在共享日历中引发异常。
Folder f = NavigationFold.Folder as Folder;
"at Microsoft.Office.Interop.Outlook._NavigationFolder.get_Folder()
at OutlookAddIn1.Addin.GetSharedGroups()
此外,如果我们添加了具有委托权限的共享日历,并且已移入我的日历,那么它似乎也可以正常工作。但是,一旦日历处于一个单独的目录中,错误就会重新出现。
有任何想法如何解决这个问题?
此致