2

我正在开发一个 Outlook 插件。其中一部分是我在特定文件夹中组织约会。我想捕获一个元素是否被删除(在这种情况下,移出“我的”文件夹算作已删除)。

我发现文章https://stackoverflow.com/questions/10579240/how-to-capture-ac-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);
}

有没有人有办法解决吗?

谢谢 ;)

编辑:我仍然不知道:(((((((

4

2 回答 2

0

根据定义,仅在用户( Outlook 客户端)启动移动BeforeItemMove时触发。它不会因同步事件而触发(即 Exchange 同步)。Item

如果您将 Outlook 连接到 Exchange 服务器,如果您希望在客户端应用程序(即会话)之外收到文件夹更改事件的通知,则应该查看 EWS(Exchange Web 服务)。EWS 提供推送、拉取或流式通知选项。您将向“项目删除”操作附加通知。

于 2012-07-31T18:59:06.783 回答
0

都是微软的错!这是一个错误,我只需要更新 Outlook!

于 2012-08-22T07:43:42.767 回答