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

Outlook.Items from all calendars in Outlook 2013 addin C#

我在 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 不显示二级帐户的项目,因此不处理事件,但我需要处理两个或更多日历帐户的事件。

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

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

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

相反,您需要遍历配置文件中的所有商店(在您的情况下为 2 个)并使用商店 class 的 GetDefaultFolder 方法获取日历文件夹,其中 returns一个 Folder 对象,它表示存储中的默认文件夹,并且是 FolderType 参数指定的类型。此方法类似于 NameSpace 对象的 GetDefaultFolder 方法。不同之处在于此方法获取与帐户关联的交付商店中的默认文件夹,而 NameSpace.GetDefaultFolder returns 当前配置文件的默认商店中的默认文件夹。

Namespace Stores 属性 class returns 代表当前配置文件中所有 Store 对象的 Stores 集合对象。

P.S。我看到你使用 ADX。在这种情况下,您可以使用 ADXOutlookItemsEvents 轻松处理 Items 事件。查看面向开发人员的入门指南以获取更多信息。