Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取已删除的Outlook项目的EntryID?_C#_Office Interop_Outlook Addin - Fatal编程技术网

C# 如何获取已删除的Outlook项目的EntryID?

C# 如何获取已删除的Outlook项目的EntryID?,c#,office-interop,outlook-addin,C#,Office Interop,Outlook Addin,我需要将Outlook联系人同步到其他服务。我可以按如下方式订阅创建、更改和删除事件: Outlook.MAPIFolder folderContacts = this.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts); Outlook.Items contacts = folderContacts.Items;

我需要将Outlook联系人同步到其他服务。我可以按如下方式订阅创建、更改和删除事件:

        Outlook.MAPIFolder folderContacts = this.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts);
        Outlook.Items contacts = folderContacts.Items;

        contacts.ItemAdd += Contacts_ItemAdd;
        contact.ItemChange += Contacts_ItemChange;
        contacts.ItemRemove += Contacts_ItemRemove;
当我在事件处理程序中获取项目时,这非常适用于创建和更改:

    private void Contacts_ItemAdd(object Item)
    {
        Outlook.ContactItem contact = (Outlook.ContactItem)Item;
        ...
    }
但是,在发生remove事件的情况下,我无法获取已删除项目的信息

    private void Contacts_ItemRemove() {
        // how to get deleted item or at least it's EntryID?
    }

那么,如何获取已删除项目的EntryID呢?我使用此ID标识其他服务中的项目。

所有基于MAPI的通知都是在操作发生后发出的。当您收到
ItemRemove
事件时,消息已经消失

在扩展MAPI级别(仅限C++或Delphi),删除项目时,存储提供程序会发出以下
fnevTableModified
/
TABLE\u ROW\u deleted
通知(如果单击IMAPIFolder按钮并查看GetContentsTable选项卡底部的日志,您可以在中看到该通知)。只有
PR\u实例\u键
属性可用:

ulEventType: fnevTableModified
    tab.ulTableEvent: TABLE_ROW_DELETED
    tab.propIndex: (PR_INSTANCE_KEY, cb:4, lpb: 0F 3E D3 A4 
    tab.propPrior: (PR_NULL, null)
    tab.row: (cValues : 0
    )
您只能通过提前检索文件夹中所有项目的PR\u INSTANCE\u密钥来实现这一点,以便可以映射PR\u ENTRYID PR\u INSTANCE\u密钥


Outlook对象模型不会在
ItemRemove
事件中公开
PR\u实例K
EY。如果使用是一个选项,则其.
ItemRemove
事件将实例键作为参数传递。使用
RDOItems.MAPITable
,只需一次调用即可检索文件夹中所有项目的PR_INSTANCE_键。方法。

所有基于MAPI的通知都是在操作已经发生后引发的。当您收到
ItemRemove
事件时,消息已经消失

在扩展MAPI级别(仅限C++或Delphi),删除项目时,存储提供程序会发出以下
fnevTableModified
/
TABLE\u ROW\u deleted
通知(如果单击IMAPIFolder按钮并查看GetContentsTable选项卡底部的日志,您可以在中看到该通知)。只有
PR\u实例\u键
属性可用:

ulEventType: fnevTableModified
    tab.ulTableEvent: TABLE_ROW_DELETED
    tab.propIndex: (PR_INSTANCE_KEY, cb:4, lpb: 0F 3E D3 A4 
    tab.propPrior: (PR_NULL, null)
    tab.row: (cValues : 0
    )
您只能通过提前检索文件夹中所有项目的PR\u INSTANCE\u密钥来实现这一点,以便可以映射PR\u ENTRYID PR\u INSTANCE\u密钥


Outlook对象模型不会在
ItemRemove
事件中公开
PR\u实例K
EY。如果使用是一个选项,则其.
ItemRemove
事件将实例键作为参数传递。使用
RDOItems.MAPITable
,只需一次调用即可检索文件夹中所有项目的PR_INSTANCE_键。方法。

您需要维护每个文件夹中的项目列表。在
ItemRemove
事件处理程序中,您可以将现有项列表与您的项进行比较。我建议阅读以下一系列文章,其中给出了Outlook中NewMailEx事件的一个示例(有时它根本不会被触发,因此开发人员应该寻找类似的解决方法):


您需要维护每个文件夹中的项目列表。在
ItemRemove
事件处理程序中,您可以将现有项列表与您的项进行比较。我建议阅读以下一系列文章,其中给出了Outlook中NewMailEx事件的一个示例(有时它根本不会被触发,因此开发人员应该寻找类似的解决方法):


ContactItem.BeforeDelete事件()如何处理?我可以利用它吗?BeforeDelete是Outlook引发的纯UI事件。它在较旧版本的Outlook中实际上不起作用,只在运行代码的计算机上出现。例如,如果使用OWA删除项目,Outlook中将不会触发该事件。ContactItem.BeforeDelete事件()如何?我可以利用它吗?BeforeDelete是Outlook引发的纯UI事件。它在较旧版本的Outlook中实际上不起作用,只在运行代码的计算机上出现。例如,如果您使用OWA删除项目,Outlook中将不会触发该事件。