Тема: BackresponcesNew - Возвращает ответные документы к главным
Агент работает по расписанию, запускается ночью.
Если нет главного, то у ответного дока ставиться who=1.
Кроме возврата ответного документа к главному, агент чистит на дубли ряд полей: addreaders, addauthors.
Option Public
Sub Initialize
' находит все ответные документы и отправляет их туда, где находится их главный документ
' также приводит в соответствие основные поля
Dim session As New NotesSession
Dim db As NotesDatabase
Dim respview As NotesView, uniview As NotesView
Dim curdoc As NotesDocument, maindoc As NotesDocument
Dim bebe As Variant
Dim i As Integer, ii As Integer, k As Integer, jj As Integer, x As Integer, xx As Integer
Print "START BackresponcesNew"
On Error GoTo Errh
Set db=session.Currentdatabase
Set respview = db.getview("responces") ' все ответы
Set uniview = db.getview("unids")
Set curdoc = respview.getfirstdocument
xx = 0 'что исправлено
x = 0
While Not curdoc Is Nothing
x=x+1
i=0
j=0 ' запись изменений
k=0
Set maindoc = uniview.GetDocumentByKey( curdoc.parent(0)) ' главный для ответа
If maindoc Is Nothing Then
i=1
If curdoc.who(0)<>"1" Then
curdoc.who = "1"
Print "Нет главного! " curdoc.header(0)
xx = xx+1
Call curdoc.save(0,0)'если нет главного, то who=1
End If
End If
If i=0 Then ' есть главный
If curdoc.archive(0)<>maindoc.archive(0) Then
curdoc.archive=maindoc.archive(0)
Print "ответ.archive<>главный.archive " curdoc.header(0)
Call curdoc.save(0,0)
xx = xx+1
End If
'синхронизация who
Set item1=curdoc.GetFirstItem("who") ' ответ
Set item2=maindoc.GetFirstItem("who") ' главный
ForAll z In item2.Values
If Not item1.Contains(z) Then
k=1 ' who ответа не содердит who главного
Print "ФИО " z
End If
End ForAll
If k=1 Then ' who ответа <> who главного
Print "k=1 "
curdoc.who=maindoc.who
curdoc.whois=maindoc.whois
ii= UBound(maindoc.addreaders)
maindoc.addreaders=ArrayUnique(maindoc.addreaders)
jj=UBound(maindoc.addreaders)
If ii <> jj Then
maindoc.addauthors=ArrayUnique(maindoc.addauthors) 'заодно и addreaders убрал дубли
Call maindoc.save(0,0)
Print "ArrayUnique addreaders " maindoc.header(0)
End If
curdoc.addreaders=maindoc.addreaders
curdoc.addauthors=maindoc.addauthors
Print "Вернули ответ " curdoc.header(0)
Call curdoc.save(0,0)
xx = xx+1
Print "xx: " xx
k=0
End If
End If
Set curdoc = respview.GetNextDocument (curdoc )
Wend
Print "Всего Обработано Ответов: " x
Print "Всего ошибочных Ответов: " xx
Print "END BackresponcesNew"
Exit Sub
Errh:
Print Error & | in line | & Erl(), | BackresponcesNew (| & LSI_Info(2) & |)|
Exit Sub
End Sub