我正在开发一个Outlook插件。其中一部分是我在一个特定的文件夹中组织约会。我想捕捉一个元素是否被删除(在这种情况下,移出"我的"文件夹算作已删除)。
我找到了那篇文章https://stackoverflow.com/questions/10579240/how-to-capture-a-c-sharp-outlook-addin-appointment-delete-event他/她的解决方案帮了我很多忙,但我有一个巨大的问题:事件只在创建文件夹的"会话"中触发,而不是在我从outlook获取文件夹对象时触发。
我的代码如下:
private Outlook.MAPIFolder _CalendarMAPIFolder = null;
private Outlook.MAPIFolderEvents_12_Event _CalendarFolder = null;
private Outlook.Items _CalendarItems = null;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Outlook.MAPIFolder calendarFolder =
this.Application.GetNamespace("mapi").GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);
// get my-Folder (if not found, create it)
try
{
_CalendarMAPIFolder = calendarFolder.Folders["my-Folder"];
}
catch
{
_CalendarMAPIFolder = calendarFolder.Folders.Add("my-Folder");
}
_CalendarItems = _CalendarMAPIFolder.Items;
_CalendarFolder = _CalendarMAPIFolder as Outlook.MAPIFolderEvents_12_Event;
if (_CalendarFolder == null)
{
MessageBox.Show("can not cast MAPIFolder to Folder");
}
_CalendarFolder.BeforeItemMove += new Outlook.MAPIFolderEvents_12_BeforeItemMoveEventHandler(Folder_BeforeItemMove);
Debug.Print("events registered");
}
public void Folder_BeforeItemMove(
Object Item,
Outlook.MAPIFolder MoveTo,
ref bool Cancel)
{
Outlook.AppointmentItem aitem = Item as Outlook.AppointmentItem;
string s = "";
if (aitem != null) s = aitem.Subject;
//Cancel = false;
MessageBox.Show("Test! " + s);
}
有人有解决方案吗?
谢谢;)
编辑:我仍然没有线索:
根据定义,只有当用户(Outlook客户端)启动要移动的Item
时,才会触发BeforeItemMove
。它不会为同步事件(,即Exchange同步)而激发。
如果您正在将Outlook连接到Exchange Server,如果您希望在客户端应用程序(即会话)之外收到文件夹更改事件的通知,则应查看EWS(Exchange Web Services。EWS提供推送、拉取或流式通知选项。您将在"项目删除"操作中附加一个通知。
都是微软的错!这是一个错误,我只需要更新Outlook!