1

Тема: 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

Поделиться