EWS加载已删除的任务

时间:2016-10-06 16:37:42

标签: vb.net exchange-server exchangewebservices

  

Tl; dr使用Exchange Web Services,我想完全加载已删除的Task   客户端应用中的对象,例如使用Task.Bind()方法或类似方法。

使用Exchange Web服务,我正在执行SyncFolderItems调用,该调用成功返回我需要在客户端系统中更新/删除的所有更新的任务项。

但是,在ChangeCollection返回时,如果ChangeTypeChangeType.Delete,则该项目仅包含最少数据(基本上只包含ItemId)。要更新我的客户端系统,我需要获得一个存储在Exchange中的Task的扩展属性,该属性存储我的客户端系统的相应本地ID(我将在之前创建它们时'标记'任务)。

尝试使用以下代码加载任务会出现“The specified object was not found in the store”错误消息。

'my extended custom property
Private myIdPropertyDefinition As New ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings, MY_ID, MapiPropertyType.Integer)

'setup the required properties collection
Dim delTaskRequiredProperties As New PropertySet()
delTaskRequiredProperties.Add(myIdPropertyDefinition)

'attempts to load the task from Exchange
Task.Bind(myExchServer, change.ItemId, delTaskRequiredProperties)

myExchServer(一个ExchangeService对象)中使用的凭据应该没问题,因为同一个变量用于执行SyncFolderItems调用,这非常有效。

我是否需要使用与Task.Bind()方法不同的技术来完全加载已删除的任务?或者是否有另一种方法可以在这种情况下使用,在DeletedItems文件夹中搜索指定的ItemId

修改 - ExchangeService.FindItems()方法调用

我尝试使用ExchangeService.FindItems()方法调用找到已删除的任务,到目前为止没有运气。尝试以与described here完全相同的方式添加change.ItemId作为搜索参数时失败,.ItemId.ItemId.ToString()都不是SearchFilter对象中的有效搜索参数。 (尝试使用Folder.FindItems()方法进行搜索时也会出现同样的问题)

Dim view As ItemView = New ItemView(10)

Dim delTaskRequiredProperties As New PropertySet()
delTaskRequiredProperties.Add(TaskSchema.Id)
delTaskRequiredProperties.Add(myIdPropertyDefinition)

view.PropertySet = delTaskRequiredProperties
view.Traversal = ItemTraversal.Shallow

Dim idSearch As SearchFilter.IsEqualTo = New SearchFilter.IsEqualTo(TaskSchema.Id, change.ItemId.ToString())

Dim results As FindItemsResults(Of Item) = myExchangeServer.FindItems(New FolderId(WellKnownFolderName.DeletedItems, New Mailbox(exchangeAccount)), idSearch, view)

For Each item As Item In results

    Debug.WriteLine("itemId==" & change.ItemId.ToString())
    Debug.WriteLine("id==" & item.Id.ToString())
    Debug.WriteLine(item.GetType().ToString())

    For Each exProp As ExtendedProperty In item.ExtendedProperties
        Debug.WriteLine("ex-id==" & exProp.PropertyDefinition.Id)
        Debug.WriteLine("ex-name==" & exProp.PropertyDefinition.Name)
        Debug.WriteLine("ex-value==" & exProp.Value)
    Next

Next

或者这是不可能的,我是否需要改变连接两个系统的整个方法,并尝试存储CleanGlobalObjectId?在我的客户端任务记录?

0 个答案:

没有答案