Как сказано в заголовке, я пытаюсь предотвратить жесткое удаление элементов в Outlook. Я могу поймать операцию в BeforeItemMove-событие. Затем пользователю предоставляется выбор: продолжить или отменить. Если он решит продолжить, элемент должен быть перемещен в папку «Удаленные» и не может быть удален окончательно.
Моей первой идеей было отменить операцию удаления, задав для параметра «Отмена» значение «Истина», а затем переместив элемент в папку «Удаленные». Проблема в том, что событие снова запускается для операции перемещения, но врученный предмет-объект кажется каким-то образом сломанным. Я попытался установить UserProperty для удаленного элемента, а затем переместить его. но во "втором запуске" события-sub, когда я пытаюсь прочитать реквизит, я получаю ошибку времени выполнения, в которой говорится, что сообщение не может быть найдено.
Может С.О. помочь?
Вот два обработчика событий:
Private Sub oTasks_BeforeItemMove(ByVal Item As Object, ByVal MoveTo As Folder, Cancel As Boolean)
Dim shouldDelete As Boolean
shouldDelete = False
Dim hardDeletePerformed
hardDeletePerformed = False
If (MoveTo Is Nothing) Then
shouldDelete = True
hardDeletePerformed = True
ElseIf (g_oNS.CompareEntryIDs(MoveTo.EntryID, oDeletedItems.EntryID)) Then
shouldDelete = True
End If
Dim oTask As TaskItem
Set oTask = Item
If shouldDelete Then
If (InStr(1, oTask.Subject, "frist", vbTextCompare)) Then
Dim message As String
message = "..."
Dim res As VbMsgBoxResult
res = MsgBox(message, vbOKOnly + vbCritical, "Compliance-Warnung!")
Cancel = True
Else
Dim message2 As String
message2 = "..."
Dim res2 As VbMsgBoxResult
res2 = MsgBox(message2, vbYesNo + vbCritical, "Compliance-Warnung!")
If (res2 = vbYes) Then
Cancel = False
If hardDeletePerformed Then
oTask.Move oDeletedItems
Cancel = True
End If
Else
Cancel = True
End If
End If
End If
End Sub
Private Sub oAppointments_BeforeItemMove(ByVal Item As Object, ByVal MoveTo As Folder, Cancel As Boolean)
If inProgress Then
Cancel = True
inProgress = False
Else
Dim shouldDelete As Boolean
shouldDelete = False
Dim hardDeletePerformed
hardDeletePerformed = False
If (MoveTo Is Nothing) Then
shouldDelete = True
hardDeletePerformed = True
ElseIf (g_oNS.CompareEntryIDs(MoveTo.EntryID, oDeletedItems.EntryID)) Then
shouldDelete = True
End If
Dim oAppointment As AppointmentItem
Set oAppointment = Item
If shouldDelete Then
If (InStr(1, oAppointment.Subject, "frist", vbTextCompare)) Then
Dim message As String
message = "..."
Dim res As VbMsgBoxResult
res = MsgBox(message, vbOKOnly + vbCritical, "Compliance-Warnung!")
Cancel = True
Else
Dim message2 As String
message2 = "..."
Dim res2 As VbMsgBoxResult
res2 = MsgBox(message2, vbYesNo + vbCritical, "Compliance-Warnung!")
If (res2 = vbYes) Then
Cancel = False
If hardDeletePerformed Then
inProgress = True
oAppointment.Move oDeletedItems
oAppointment.Save
'inProgress = False
Cancel = True
End If
Else
Cancel = True
End If
End If
End If
End If
End Sub
Странно то, что первый обработчик событий для oTasks работает именно так, как я хочу. Элемент перемещается в удаленные элементы, а обработчик событий вызывается только один раз. второй для oAppointments будет вызываться дважды без предложений Tims для предложения inProgress-if-claus ... и что действительно странно, это то, что во втором обработчике событий элемент перемещается в Черновики, а не в Удаленные элементы, но в oDeletedItems-Object не меняется между ... Есть идеи?
PS: я ненавижу VBA!