2010-11-12 49 views
11

我写了一个小应用程序,它应该自动处理公用文件夹中的电子邮件。对于每封电子邮件,我们希望将一些元数据保存在数据库中。交换Web服务:为什么ItemId不是常量?

我想使用ItemID来创建此元数据和特定电子邮件之间的链接,并且我刚刚发现此ItemId不是常量。例如,如果电子邮件从公用文件夹移动到另一个,它将收到另一个ItemId。这意味着,电子邮件和相关元数据之间的链接会丢失。

所以,问题是,我怎样才能使元数据和特定的电子邮件之间的链接?

+0

参见http://stackoverflow.com/questions/11827152使用GUID的项目信息/ exchange-web-services-why-is-itemid-not-constant-continued其中有一些代码示例,用于保存针对EWS项目的GUID作为此问题的解决方案。 – Rory 2016-05-07 21:28:46

回答

0

您必须将EntryItemId转换为EWS独特作品ID,那么你可以作为主键使用它来创建一个进入DB

看一看:

http://blogs.msdn.com/b/brijs/archive/2010/09/09/how-to-convert-exchange-item-s-entryid-to-ews-unique-itemid-via-ews-managed-api-convertid-call.aspx

+0

不,我相信当物品在文件夹之间移动时,EntryId也会改变。当然你可以在EwsId和EntryId之间进行转换,但这并不意味着它会随着时间的推移给你一个唯一的id。 – Rory 2016-05-07 21:19:32

5

我的理解是,EWS唯一ID包含某种形式的EntryId。因此,一旦元素被移动到另一个文件夹,它就会改变。

虽然这里不适用,但由于Exchange在某些情况下销毁并重新创建约会,从而更改唯一标识,因此日历条目的情况更为复杂。

此页(http://msdn.microsoft.com/en-us/library/cc815908.aspx)包含可用于识别对象的MAPI属性概述。另一种方法是,您可以将您自己的id属性添加到Exchange元素(通过扩展属性)。

+0

我遇到的问题是当一个项目已被删除的通知进入时,因为扩展属性附加到该项目,它不能检索,因为它已与项目一起删除...我的相关问题这里:http://stackoverflow.com/q/8807765/555384 – jondavidjohn 2012-01-10 19:04:52

1

项目ID更改。它始终不是唯一的。 要访问项目,可以使用GUID。

(下面的SOAP请求是获取日历项目。) 您可以获取有关在通话的FindItem

 

<FindItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages" 
     xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" 
    Traversal="Shallow"> 
    <ItemShape> 
    <t:BaseShape>AllProperties</t:BaseShape> 
    </ItemShape> 
    <Restriction> 
    <t:IsEqualTo> 
    <t:ExtendedFieldURI PropertySetId="6ED8DA90-450B-101B-98DA-00AA003F1305" PropertyId="3" PropertyType="Binary" /> 
    <t:FieldURIOrConstant> 
    <t:Constant Value="BAAAAJXIl1MJ8="/> /* GUID */ 
    </t:FieldURIOrConstant> 
    </t:IsEqualTo> 
    </Restriction> 
    <ParentFolderIds> 
    <t:DistinguishedFolderId Id="calendar"/> 
    </ParentFolderIds> 
    </FindItem>