获取从 Exchange 传入 Outlook 的值
我编写了一个 VSTO 加载项,需要从交换服务器获取约会信息。
在交换 (Outlook Web Access) 中,我更改约会的主题行。当我看到 Outlook 将主题行更改为新值时,我尝试以编程方式获取新值,大多数时候它会获取旧值,而不是 Outlook 中出现的值。
我尝试处理 ItemChange 事件并使用 .save 函数保存项目,但似乎没有任何区别。
有谁知道为什么我不能在 Outlook 约会到达 Outlook 后立即以编程方式获取这些值?
现在可以使用的代码非常丑陋,但这是一项重大工作,如下所示:
Public _idOfAppointmentCurrentlySyncing As New List(Of String)
Public _idOfAppointmentCurrentlySyncingNormal As New List(Of String)
Private Sub appointmentSave(ByVal Item As Object) Handles _m_olAppointment.ItemChange, _m_olAppointment.ItemAdd
Try
Dim dateNow As Date = Date.Now
If TypeOf Item Is Outlook.AppointmentItem Then
If (dateNow - _lastFolderSwitch).TotalMilliseconds > 3000 Then
Dim appointmentItem As Outlook.AppointmentItem = CType(Item, Outlook.AppointmentItem)
Dim lastModifiedDates As Date = commonToolsMethod.getAppointmentDateParameter(appointmentItem, "lastModifiedDates")
If _idOfAppointmentCurrentlySyncing.Contains(appointmentItem.EntryID) Then
Dim outlookLastSyncTime As Date = commonToolsMethod.getAppointmentDateParameter(appointmentItem, "OutlookLastSyncTime")
If outlookLastSyncTime <> Date.MaxValue And Date.Compare(lastModifiedDates, outlookLastSyncTime) <> 0 Then
commonTools.addPropertyToAppointment(appointmentItem, "lastModifiedDates", outlookLastSyncTime)
appointmentItem.Save()
Else
_idOfAppointmentCurrentlySyncing.Remove(appointmentItem.EntryID)
End If
Else
If _idOfAppointmentCurrentlySyncingNormal.Contains(appointmentItem.EntryID) = False Then
DebugWriter("Normal Save: " + appointmentItem.Start.ToString)
Try
If appointmentItem.Body <> "" Then
appointmentItem.Body += " "
End If
Catch ex As Exception
End Try
_idOfAppointmentCurrentlySyncingNormal.Add(appointmentItem.EntryID)
commonTools.addPropertyToAppointment(appointmentItem, "lastModifiedDates", dateNow.ToString)
appointmentItem.Save()
Marshal.FinalReleaseComObject(appointmentItem)
appointmentItem = Nothing
GC.Collect()
Else
_idOfAppointmentCurrentlySyncingNormal.Remove(appointmentItem.EntryID)
End If
End If
Else
_lastFolderSwitch = _lastFolderSwitch.AddMilliseconds(100)
End If
End If
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
提前非常感谢。
I have written a VSTO add-in that needs to get the an appointment information from the exchange server.
On exchange (Outlook Web Access) I change a subject line of an appointment. When I see that Outlook changed the subject line to a new value, I try to grab the new value programmatically and most of the time it grabs old values, instead of the values that have appeared in Outlook.
I tried handling the ItemChange event and saving the item using .save function, but it doesn't seem to make any difference.
Does anybody know why can't I grab values from Outlook appointment programmatically as soon as they arrive to Outlook?
The code that kind of works right now, which is very ugly and which is one big work around is the following:
Public _idOfAppointmentCurrentlySyncing As New List(Of String)
Public _idOfAppointmentCurrentlySyncingNormal As New List(Of String)
Private Sub appointmentSave(ByVal Item As Object) Handles _m_olAppointment.ItemChange, _m_olAppointment.ItemAdd
Try
Dim dateNow As Date = Date.Now
If TypeOf Item Is Outlook.AppointmentItem Then
If (dateNow - _lastFolderSwitch).TotalMilliseconds > 3000 Then
Dim appointmentItem As Outlook.AppointmentItem = CType(Item, Outlook.AppointmentItem)
Dim lastModifiedDates As Date = commonToolsMethod.getAppointmentDateParameter(appointmentItem, "lastModifiedDates")
If _idOfAppointmentCurrentlySyncing.Contains(appointmentItem.EntryID) Then
Dim outlookLastSyncTime As Date = commonToolsMethod.getAppointmentDateParameter(appointmentItem, "OutlookLastSyncTime")
If outlookLastSyncTime <> Date.MaxValue And Date.Compare(lastModifiedDates, outlookLastSyncTime) <> 0 Then
commonTools.addPropertyToAppointment(appointmentItem, "lastModifiedDates", outlookLastSyncTime)
appointmentItem.Save()
Else
_idOfAppointmentCurrentlySyncing.Remove(appointmentItem.EntryID)
End If
Else
If _idOfAppointmentCurrentlySyncingNormal.Contains(appointmentItem.EntryID) = False Then
DebugWriter("Normal Save: " + appointmentItem.Start.ToString)
Try
If appointmentItem.Body <> "" Then
appointmentItem.Body += " "
End If
Catch ex As Exception
End Try
_idOfAppointmentCurrentlySyncingNormal.Add(appointmentItem.EntryID)
commonTools.addPropertyToAppointment(appointmentItem, "lastModifiedDates", dateNow.ToString)
appointmentItem.Save()
Marshal.FinalReleaseComObject(appointmentItem)
appointmentItem = Nothing
GC.Collect()
Else
_idOfAppointmentCurrentlySyncingNormal.Remove(appointmentItem.EntryID)
End If
End If
Else
_lastFolderSwitch = _lastFolderSwitch.AddMilliseconds(100)
End If
End If
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Many thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论