我有一个VSTO Outlook加载项,它侦听“已发送邮件”文件夹并为用户提供一些选项,以便(1)将已发送邮件的副本保存到某个位置(例如,保存到文件系统),以及(2)应用一些属性在Outlook中的属性(例如,将后续标志设置为完成,向主题添加文本)。
这里是代码-请注意,传递给此子对象的对象是包含元数据的自定义对象,特别是ItemToSave
是包含项的GUID的结构,不是本身是对Outlook对象的引用模型对象。
Public Sub CleanUpThisEmail(ByRef item As ItemToSave,
ByRef postSaveOptions As PostSaveOptions)
If item.SaveSuccess = True Then
Try
Dim oItem As Outlook.MailItem = Globals.ThisAddIn.Application.GetNamespace("MAPI").GetItemFromID(item.GUID)
' Stuff to do to the item in Outlook
With oItem
If postSaveOptions.FlagCompleted = True Then .FlagStatus = Outlook.OlFlagStatus.olFlagComplete
If postSaveOptions.AppendToSubject = True Then .Subject = String.Format("{0} {1}", .Subject, DateTimeStringHelper.ParseTextWithDatesAndTimes(postSaveOptions.SubjectAppendOption, DateTime.Now()))
.Save()
End With
item.CleanupSuccess = True
Catch ex As Exception
ThisAddIn.log.ErrorFormat("CleanUpThisEmail: Error while applying options and/or deleting email in Outlook: {0}", ex.Message)
ThisAddIn.log.Error(ex.StackTrace)
item.CleanupSuccess = False
End Try
ThisAddIn.log.InfoFormat("CleanUpThisEmail: Finished processing")
Else
ThisAddIn.log.WarnFormat("CleanupThisEmail: Skipping processing of an email that failed to save correctly.")
End If
End Sub
[一些用户已经报告说,正在应用Outlook中对该项目的更改,但是随后与Exchange同步该项目显然会覆盖所做的更改。这些用户中的一些用户看到诸如“您已对此项目的副本进行了更改...”之类的消息,而我的加载项所做的预期更改位于该项目的先前“版本”中。
看来,如果用户稍等片刻,然后然后在我的加载项中应用这些选项,则它们将是最新版本,并且不会被与Exchange的同步所覆盖。大概此时已与Exchange同步。是否可以确保以某种方式应用对Outlook中的项目所做的更改,以使Exchange同步将其识别为最新版本?似乎我可能需要在后台线程或其他内容上添加等待时间,但这似乎很脆弱且不够优雅。
我有一个VSTO Outlook加载项,它侦听“已发送邮件”文件夹并为用户提供一些选项,以便(1)将已发送邮件的副本保存到某个位置(例如,保存到文件系统),以及(2)应用一些...
其中一些用户看到诸如“您已对此项目的副本进行了更改...”的消息,