#lotus-notes #lotus-domino #lotusscript #lotus-formula #domino-designer-eclipse
#lotus-notes #lotus-domino #lotusscript #lotus-формула #domino-designer-eclipse
Вопрос:
Существует агент для архивирования документов в архивную базу данных с удалением их из текущей базы данных, но когда я запускаю агент, некоторые документы архивируются, архивирование прекращается, и появляется ошибка «Ожидающие архивирования запросы: 4000: Строка 33: ошибка, определенная пользователем»
Option Public
'Use "LogError"
Sub Initialize
On Error Goto errorHandler
Dim s As New NotesSession
Dim Odb As NotesDatabase
Dim Oview As NotesView
Dim Oview2 As NotesView
Dim archdb As NotesDatabase
Dim archdbpath As String
Dim Ovc As NotesViewEntryCollection
Dim doc As NotesDocument
Dim archview As NotesView
Set Odb = s.CurrentDatabase
archdbpath = "ArchivingArchive2_DunkMatMaint911.nsf"
Set archdb = s.GetDatabase("BRUSPLNA101", archdbpath, False)
If Not(archdb.IsOpen()) Then
'Logaction "Could not locate Archive database "
Msgbox "Could not locate Archive database "
Exit Sub
End If
'Set archview = archdb.GetView("vw_InArchivedDB")
Set Oview = Odb.GetView("Archive Requests 1") '----Archiving View Name
Msgbox "Going In While Loop"
Set doc = Oview.GetFirstDocument()
While Not(doc Is Nothing)
Call doc.CopyToDatabase(archdb)
doc.Archived = "True"
Call doc.Save(True, False)
Call Oview.Refresh
Set doc = Oview.GetFirstDocument()
Wend
Set Oview2 = Odb.GetView("Archive Requests 2")
Call Oview2.Refresh
Set Ovc = Oview2.AllEntries
Exit Sub
errorHandler:
'LogAction("Archiving Pending Requests: " Format$(Err) " : Line " Format$(Erl) " : " Error$(Err) )
Msgbox "Archiving Pending Requests: " Format$(Err) " : Line " Format$(Erl) " : " Error$(Err)
End Sub
Ответ №1:
К счастью, в вашем коде есть обработчик ошибок… Итак, мы точно знаем, в какой строке возникает эта ошибка:
Call doc.Save(True, False)
Это означает: документ, над которым работает код, не может быть сохранен.
К сожалению, ошибка 4000 является общей ошибкой, которая может означать много вещей. Я предполагаю, что в вашем случае документ вырос до большого размера (> 32 кб данных в одном поле) и поэтому не может быть сохранен.
Я бы изменил код таким образом, чтобы он записывал журнал о документах, которые не удалось заархивировать, и просто переходил к следующему документу вместо сбоя. Для этого вам также необходимо изменить логику, поскольку документ никогда не исчезнет из представления, если его нельзя сохранить:
Dim viwNav as NotesViewNavigator
Dim ve as NotesViewEntry
Set viwNav = Oview.CreateViewNavigator()
Oview.AutoUpdate = False
Set ve = viwNav.GetFirst()
While Not(ve Is Nothing)
Set doc = ve.Document
On Error Goto errorHandlerDoc
Call doc.CopyToDatabase(archdb)
doc.Archived = "True"
Call doc.Save(True, False)
NextDoc:
Set ve = viwNav.GetNext(ve)
Wend
On Error Goto errorHandler
Set Oview2 = Odb.GetView("Archive Requests 2")
Call Oview2.Refresh
Set Ovc = Oview2.AllEntries
Exit Sub
errorHandlerDoc:
Msgbox "Archiving Pending Requests: " Format$(Err) " : Line " Format$(Erl) " : " Error$(Err) " for document " doc.UniversalId
Resume NextDoc
errorHandler:
'LogAction("Archiving Pending Requests: " Format$(Err) " : Line " Format$(Erl) " : " Error$(Err) )
Msgbox "Archiving Pending Requests: " Format$(Err) " : Line " Format$(Erl) " : " Error$(Err)
Комментарии:
1. Привет, Торстен, спасибо за помощь. У меня более 5000 документов для архивирования, но дело в том, что этот код показывает универсальный идентификатор документа с ошибкой, но он всегда запрашивает подтверждение для перехода к следующему документу. (отображается ошибка с универсальным идентификатором документа при нажатии кнопки «Ok») Поскольку количество документов очень велико, как может быть сложно всегда нажимать кнопку «ОК», не могли бы вы помочь мне в этом.
2. затем замените «msgbox» на «печать»… Извините: но вы действительно модифицируете 5000 документов, даже не понимая самых простых основ LotusScript? Это немного пугает…. На всякий случай: вы понимаете, что ваш код НЕ удаляет документы из исходной базы данных, а дублирует их, а затем просто устанавливает флаг «Архивировано» в true?
3. Я новичок в этой технологии и знаю, что этот код просто добавляет флаг к документу и не удаляет документы из исходной базы данных. Но когда мы получаем ошибку при запуске агента, этот код останавливается на документе с ошибкой и не переходит к следующему документу, он копирует документ с ошибкой несколько раз, пока я не остановлю процесс принудительно.
4. Проверьте мое редактирование: используйте NotesViewNavigator и НЕ обновляйте представление, тогда оно будет работать