来自Outlook 2013中的所有日历的Outlook.Items插件C#

时间:2015-03-20 03:12:39

标签: .net outlook add-in outlook-addin

我有Outlook 2013有2个帐户注册,所以问题是当我尝试将ItemAdd和ItemChange事件附加到日历帐户时,在主帐户中它完美地工作,但在第二个帐户中没有处理事件,我的代码是这样的:

Outlook.MAPIFolder calendarFolder = null;
Outlook.Items calendarItems = null;

private void AddinModule_AddinInitialize(object sender, EventArgs e)
{
     calendarFolder = this.OutlookApp.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);
     calendarItems = calendarFolder.Items;

     calendarItems.ItemAdd += this.ItemAdd;
     calendarItems.ItemChange += this.ItemChange;
}

我认为问题是calendarItems没有显示secundary帐户的项目,因此没有处理事件,但我需要处理两个或更多日历帐户的事件。

2 个答案:

答案 0 :(得分:0)

calendarItems变量必须在全局(类)级别声明,以防止它被垃圾收集器销毁。

答案 1 :(得分:0)

我只看到订阅默认递送商店事件的代码:

 calendarFolder = this.OutlookApp.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);
 calendarItems = calendarFolder.Items;

相反,您需要遍历配置文件中的所有商店(在您的情况下为2)并使用Store类的GetDefaultFolder方法获取日历文件夹,该方法返回表示默认文件夹的Folder对象。 store和FolderType参数指定的类型。此方法类似于NameSpace对象的GetDefaultFolder方法。区别在于此方法获取与该帐户关联的传递存储上的默认文件夹,而NameSpace.GetDefaultFolder返回当前配置文件的默认存储上的默认文件夹。

Namespace类的Stores属性返回一个Stores集合对象,该对象表示当前配置文件中的所有Store对象。

P.S。我看到你使用ADX。在这种情况下,您可以使用ADXOutlookItemsEvents轻松处理Items事件。有关详细信息,请查看开发人员入门指南。