Tl; dr使用
Exchange Web Services
,我想完全加载已删除的Task
客户端应用中的对象,例如使用Task.Bind()
方法或类似方法。
使用Exchange Web服务,我正在执行SyncFolderItems
调用,该调用成功返回我需要在客户端系统中更新/删除的所有更新的任务项。
但是,在ChangeCollection
返回时,如果ChangeType
为ChangeType.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?在我的客户端任务记录?