outlook - 从 Outlook Web/Office Online 更新任务时,Office 互操作无法从 Outlook 获取更新的 TaskItem
问题描述
我正在开发一个从 Outlook 桌面检索 TaskItem 并打开它的 Outlook 插件。这是我的代码。
private static Microsoft.Office.Interop.Outlook.TaskItem GetLatestTask(string entryId)
{
Microsoft.Office.Interop.Outlook.MAPIFolder taskFolder = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderTasks);
List<Microsoft.Office.Interop.Outlook.TaskItem> liTask = new List<Microsoft.Office.Interop.Outlook.TaskItem>();
foreach (Microsoft.Office.Interop.Outlook.TaskItem taskItem in taskFolder.Items)
{
if (taskItem.EntryID == entryId)
return taskItem;
}
}
这通常工作正常。但是,如果我从 Outlook Web/Office Online 更新任务,然后尝试使用代码获取任务,我得到的任务不会更新并且仍然包含旧值。
因此,例如,我有一个名为“Test”的主题的任务,然后我在 Outlook Web 中将其更新为“Test Updated”,我仍然会得到一个名为“Test”的主题的任务。
如果我在 Outlook 桌面查看任务列表,我可以看到任务列表中的任务主题已经更新。但是打开它仍然会显示旧项目。
重新启动 Outlook 后,加载项会获取更新的项目。
谁能指出我正确的方向?谢谢你。
解决方案
首先,遍历文件夹中的所有项目并不是一个好主意:
foreach (Microsoft.Office.Interop.Outlook.TaskItem taskItem in taskFolder.Items)
{
if (taskItem.EntryID == entryId)
return taskItem;
}
相反,您可以考虑使用类的Find
/FindNext
或Restrict
方法Items
。在以下带有代码示例的文章中阅读有关它们的更多信息:
同样依靠EntryID
属性来识别 Outlook 中的项目也不是最好的方法。当项目被移动到另一个商店时,条目 ID 会发生变化,例如,从您的收件箱移动到 Microsoft Exchange Server 公用文件夹,或从一个个人文件夹 (.pst) 文件移动到另一个 .pst 文件。解决方案不应依赖于EntryID
属性是唯一的,除非项目不会被移动。相反,您可以引入自己的自定义属性来识别项目。
如果您使用缓存数据很可能需要与服务器端同步数据。 SyncObjects
是一组SyncObject
代表用户发送/接收组的对象。使用该属性从对象SyncObjects
返回对象。SyncObjects
NameSpace
Set mySyncObjects = Application.GetNameSpace("MAPI").SyncObjects
SyncObject.Start方法开始使用指定的Send\Receive 组同步用户的文件夹。
Public Sub Sync()
Dim nsp As Outlook.NameSpace
Dim sycs As Outlook.SyncObjects
Dim syc As Outlook.SyncObject
Dim i As Integer
Dim strPrompt As Integer
Set nsp = Application.GetNamespace("MAPI")
Set sycs = nsp.SyncObjects
For i = 1 To sycs.Count
Set syc = sycs.Item(i)
strPrompt = MsgBox( _
"Do you wish to synchronize " & syc.Name &"?", vbYesNo)
If strPrompt = vbYes Then
syc.Start
End If
Next
End Sub
希望在那之后,您的项目将使用新数据进行更新。
推荐阅读
- java - 降低快速排序方法的复杂性
- java - Why unicode character \u0004 is not showing in Javafx TextArea
- python - 我可以在某些条件下使用opencv图像侵蚀来侵蚀RGB吗?
- android - Presentation model in clean architecture
- python - how to solve sequence item 0: expected str instance, tuple found
- python - Convention to distinguish type aliases from actual classes?
- java - 如何将图像放置在另一个图像上的确切位置?
- uwp - 为 UWP 应用程序获取离线 HTTPesponse
- git - 计算维护者的工作量(在集成过程中查找谁合并了补丁)
- emacs - 如何让 Phoenix live reload 忽略临时文件?