Невозможно архивировать документы в архивную базу данных в lotus notes

#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 и НЕ обновляйте представление, тогда оно будет работать