LotusScript-Dokumentvergleich

Unterstützung mit LotusScript

Der Vergleich von Dokumenten und dem Inhalt der einzelnen Felder von Hand ist sehr aufwendig. Mit Hilfe eines LotusScript-Agenten kann dies automatisch erfolgen und so die Arbeit wesentlich erleichtern. Der im Folgenden vorgestellte Agent (Listing 1) vergleicht zwei in einer Ansicht ausgewählte Dokumente und sendet die Auswertung per Mail an den aktuell angemeldeten Benutzer. Dabei werden folgende Unterschiede aufgezeigt:

  • die unterschiedliche Anzahl von Werten in einem Feld,

  • unterschiedliche Werte in einem Feld,

  • fehlende Felder im zweiten gewählten Dokument,

  • zusätzliche Felder im zweiten gewählten Dokument.

Sub Initialize
Dim se As New NotesSession
Dim db As NotesDatabase
Dim col As NotesDocumentCollection
Dim doc1 As NotesDocument
Dim doc2 As NotesDocument
Dim mailDoc As NotesDocument
Dim ausgabe1 As String
Dim ausgabe2 As String
Dim ausgabe3 As String
Dim ausgabe4 As String
Dim fehler As Boolean
Dim f1 As Variant
Dim f2 As Variant
Dim i As Integer
Dim rtItem As NotesRichTextItem
fehler = False
ausgabe1 = ""
ausgabe2 = ""
ausgabe3 = ""
ausgabe4 = ""
Set db = se.CurrentDatabase
Set col = db.UnprocessedDocuments [1]
If col.Count <> 2 Then [2]
Msgbox "Um einen Vergleich auszuführen müssen Sie zwei Dokumente auswählen!", _
48, "Fehler bei Dokumentauswahl"
Exit Sub
End If
Set doc1 = col.GetFirstDocument [3]
Set doc2 = col.GetLastDocument [3]
Forall k In doc1.Items [4]
If doc2.HasItem(k.Name) Then [5]
f1 = k.values
f2 = doc2.GetItemValue(k.Name)
If Ubound(f1) <> Ubound(f2) Then [6]
fehler = True
ausgabe1 = ausgabe1 + "Feldname: '"+ k.Name + Chr(13)
ausgabe1 = ausgabe1 + "Feldwerte in Dokument1: " + _
Cstr(Implode(k.values," - ")) + Chr(13)
ausgabe1 = ausgabe1 + "Feldwerte in Dokument2: " + _
Cstr(Implode(doc2.GetItemValue(k.Name)," - ")) + Chr(13) + Chr(13)
Else [7]
For i = 0 To Ubound(f1)
If f1(i) <> f2(i) Then
fehler = True
ausgabe2 = ausgabe2 + "Feldname: "+ k.Name + Chr(13)
ausgabe2 = ausgabe2 + "Feldwerte in Dokument1: " + _
Cstr(Implode(k.values," - ")) + Chr(13)
ausgabe2 = ausgabe2 + "Feldwerte in Dokument2: " + _
Cstr(Implode(doc2.GetItemValue(k.Name)," - ")) + Chr(13) + Chr(13)
End If
Next
End If
Else [8]
fehler = True
ausgabe3 = ausgabe3 + "Feldname: "+ k.Name + Chr(13)
ausgabe3 = ausgabe3 + "Feldwerte in Dokument1: " + _
Cstr(Implode(k.values," - ")) + Chr(13) + Chr(13)
End If
End Forall
Forall k In doc2.Items [9]
If Not doc1.HasItem(k.Name) Then
fehler = True
ausgabe4 = ausgabe4 + "Feldname: "+ k.Name + Chr(13)
ausgabe4 = ausgabe4 + "Feldwerte in Dokument2: " + _
Cstr(Implode(k.values," - ")) + Chr(13) + Chr(13)
End If
End Forall
If Not fehler Then [10]
Msgbox "Die Dokumente stimmen überein", 48, ""
Else
Set mailDoc = db.CreateDocument
mailDoc.Form = "Memo"
mailDoc.SendTo = se.UserName
mailDoc.Subject ="Auswertung des Dokumentvergleichs in der Datenbank "+ _
db.Title+", "+ db.FileName
Set rtItem = New NotesRichTextItem(mailDoc, "Body")
Call rtItem.AppendText("Auswertung des Dokumentvergleichs in der Datenbank "+ _
db.Title+", "+ db.FileName)
Call rtItem.AddNewline(1)
Call rtItem.appendText("Dok-ID Dokument 1: "+ doc1.UniversalID+ " ")
Call rtItem.AppendDocLink(doc1,"")
Call rtItem.AddNewline(1)
Call rtItem.AppendText("Dok-ID Dokument 2: "+ doc2.UniversalID+ " ")
Call rtItem.AppendDocLink(doc2,"")
Call rtItem.AddNewline(2)
Call rtItem.AppendText("Es sind folgende Unterschiede zwischen den beiden _
Dokumenten vorhanden:")
Call rtItem.AddNewline(1)
Call rtItem.AppendText("----------------------------------------------------")
If ausgabe1 <> "" Then
Call rtItem.AddNewline(2)
Call rtItem.AppendText("Die Anzahl der Feldwerte in folgenden Feldern _
stimmt nicht überein:")
Call rtItem.AddNewline(1)
Call rtItem.AppendText(ausgabe1)
End If
If ausgabe2 <> "" Then
Call rtItem.AddNewline(2)
Call rtItem.AppendText("Die Feldwerte in folgenden Feldern sind _
unterschiedlich:")
Call rtItem.AddNewline(1)
Call rtItem.AppendText(ausgabe2)
End If
If ausgabe3 <> "" Then
Call rtItem.AddNewline(2)
Call rtItem.AppendText("Fehlende Felder im zweiten gewählten Dokument:")
Call rtItem.AddNewline(1)
Call rtItem.AppendText(ausgabe3)
End If
If ausgabe4 <> "" Then
Call rtItem.AddNewline(2)
Call rtItem.AppendText("Zusätzliche Felder in zweiten gewählten Dokument:")
Call rtItem.AddNewline(1)
Call rtItem.AppendText(ausgabe4)
End If
Call mailDoc.Send(False)
End If
End Sub