Тема: Извлечение документа с архивной базы в рабочую.
Есть архивная база за какой-то год, к примеру 2021 года. Например "documents2021.nsf"
И есть основная, куда нужно перенести документ + его ответные - "documents.nsf"
Еще есть индексная база - в которой хранятся документы связи. "P...doc\index.nsf"
На формах у документов в архивной базе используем кнопку "Извлечь из архива".
Sub Click(Source As Button)
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim workdb As NotesDatabase
Dim dc As NotesDocumentCollection
Dim uidoc As NotesUIDocument
Dim workview As NotesView
Dim uiview As NotesView
Dim doc As NotesDocument, workdoc As NotesDocument, ftdoc As NotesDocument, nextftdoc As NotesDocument
Dim mes As String, mes2 As String
On Error Goto Errh
Set workdb = session.GetDatabase(session.CurrentDatabase.Server,"promdoc\documents.nsf",False)
Set workview = workdb.GetView("arc_check")
Call workdb.UpdateFTIndex( False )
Call workview.Refresh()
user = session.CommonUserName
sdate = Evaluate("@Now( [SERVERTIME])")
Set uidoc = ws.CurrentDocument
Set doc = ws.currentdocument.Document
'База 2022
Set workdoc = workview.GetDocumentByKey( doc.id(0)) 'проверка, что дока нет в бд документы
If workdoc Is Nothing Then
If doc.parent(0)="" Then
Print "ГЛАВНЫЙ"
Set workdoc=workdb.CreateDocument ' создали в documents.nsf
Call doc.CopyAllItems(workdoc,1)
workdoc.UniversalID=doc.UniversalID
workdoc.archive = ""
workdoc.who = "На регистрации"
workdoc.whois = "На регистрации"
If doc.links(0)<>"" Then ' 2022
Call ReplacePathDoc(workdoc.UniversalID)
End If
mes2=sdate(0)+" "+user+" извлёк документ из архивной базы"&Chr(13)+" "&Chr(13)
mes2=mes2+uidoc.FieldGetText( "history" )
workdoc.history = mes2
Call workdoc.Save(True,False)
Set dc = doc.Responses
Set ftdoc = dc.GetFirstDocument
While Not ftdoc Is Nothing
Print "ОТВЕТ в Архивной"
Set workdoc=workdb.CreateDocument ' ОТВЕТ в ВЭД
Call ftdoc.CopyAllItems(workdoc,1)
workdoc.UniversalID=ftdoc.UniversalID
workdoc.archive = ""
workdoc.who = "На регистрации"
workdoc.whois = "На регистрации"
Call workdoc.Save(True,False)
Set nextftdoc = dc.GetNextDocument (ftdoc )
Call RemoveDoc(ftdoc.NotesURL) ' удалить ОТВЕТ в Архивной
Set ftdoc=nextftdoc
Set nextftdoc=Nothing
Wend
Call uidoc.Close()
Print "закрыли"
Call RemoveDoc(doc.NotesURL)
Msgbox "Документ извлечен успешно."
Else
Msgbox "Документ ответный, выделите главный!"
End If
Else
Msgbox "Документ уже был в БД Документы !"
End If
Exit Sub
errh:
Print Error & | in line | & Erl()
Exit Sub
End Sub
Function RemoveDoc (url_doc As String)
Print "RemoveDoc Удаляет перенесенный в раб базу документ"
Dim ns As NotesSession
On Error Goto Errh
Dim Agent As NotesAgent
Dim docRequest As NotesDocument
Dim item As NotesItem
Dim paramid As String
Dim db As NotesDatabase
Set ns=New NotesSession
Set db=ns.CurrentDatabase
Set docRequest = db.CreateDocument
Set item = docRequest.AppendItemValue("Field_curdoc_url", url_doc)
Call docRequest.save(True, False)
'Получаем агента(серверного с правами менеджера), передаем ему параметр(Noteid дока-запроса,и запускаем агент)
Set agent = db.GetAgent("doc_del_remove")
paramid = docRequest.Noteid
Print paramid
Call Agent.RunOnServer(paramid)
Print "RemoveDoc - END"
Exit Function
errh:
Print Error & | in line | & Erl()
Exit Function
End Function
Function ReplacePathDoc (url_doc As String)
'Меняет путь в БД связей, где находится документ
On Error Goto Errh
Dim linksDB As NotesDatabase
Dim Agent As NotesAgent
Dim docRequest As NotesDocument
Dim paramid As String
Set ns=New NotesSession
Set linksDB=ns.GetDatabase( ns.CurrentDatabase.Server,"Promdoc\index.nsf")
Print "функция ReplacePathDoc"
Set docRequest = linksDB.CreateDocument
Set item = docRequest.AppendItemValue("doc_id", url_doc)
'Set item =docRequest.AppendItemValue("Field_user_name", ns.UserName)
Call docRequest.save(True, False)
'Получаем агента(серверного с правами менеджера), передаем ему параметр(Noteid дока-запроса,и запускаем агент)
Set agent = linksDB.GetAgent("ReplacePath")
paramid = docRequest.Noteid
Call Agent.RunOnServer(paramid)
Print "функция ReplacePathDoc - END"
Exit Function
Errh:
Print Error & | in line | & Erl()
Exit Function
End Function