Domino 9 und frühere Versionen > ND8: Entwicklung

Dokumente mit dem gleichen Wert eines Feldes finden

<< < (2/2)

Bruce Willis:

--- Zitat von: TRO am 04.08.10 - 17:58:53 ---Ansicht: erste Spalte sortiert nach Feld "Meins"

Dann mit ViewEntryCollection die Ansicht von oben nach unten abklappern
Wenn der gerade erreichte ViewEntry im Feld Meins vom vorhergehenden abweicht: Zähler auf Eins setzen
Nächsten viewEntry holen: ist der gleich dem vorhergehenden? dann Zähler erhöhen. Wenn nein, dann alten Zählerstand prüfen: ist der 1 dann gab es nur ein Doc, > 1 dann Mail schicken
Zähler wieder auf 1

--- Ende Zitat ---

Hallo Thomas,

VIELEN DANK !

Ich probiere es mal.
Ich habe ViewEntryCollection noch nie benutzt.

Gruß
Leo

Bruce Willis:
Hallo Bernhard,

Danke für Deine Untestützung.


--- Zitat von: koehlerbv am 04.08.10 - 21:09:27 ---...Dazu solltest Du obendrein eine (versteckte) Ansicht mit nur der einen Spalte haben.

--- Ende Zitat ---
Meinst Du noch eine oder nur eine aber mit nur einer Spalte?
Falls noch eine, dann wofür genau?


--- Zitat von: koehlerbv am 04.08.10 - 21:09:27 ---...Du kannst das aber auch in einen (persönlichen!) Ordner packen

--- Ende Zitat ---
Oh, das ist eine gute Idee!



--- Zitat von: koehlerbv am 04.08.10 - 21:09:27 ---Wenn Du "doppelte" Einträge suchst (weil Du sie nicht magst), dann ist es in der Regel hilfreicher, wenn man die Anlage solcher Dokumente schon verhindert. Vielleicht magst Du uns einfach etwas mehr über den Hintergrund Deiner Anfrage schreiben?

--- Ende Zitat ---
Ja, klar, erkläre ich gerne.
Du hast sehr richtig erkannt, es geht um die "doppelten" Einträge. :)
Ich hab schon mehrere Massnahmen ergriffen, wie z.B. das Sperren der Dokumente, das saubere Entsperren nach der Bearbeitung und das Verhindern des Kopierens der Dokumente in der Ansichten...
Irgenwie kommen die Replikationskonflikte trotzdem...
Vielleicht wenn ein User dasselbe Dokument zweimal nacheinander gleichzeitig öffnet und bearbeitet? Wie könnte man dies verhindern?

Gruß
Leo

Bruce Willis:
Anbei mein toller Agent.  ;)
Verbesserungsvorschläge willkommen!
 :)


--- Code: ---Sub Initialize()
%REM
Der Agent findet doppelte Dokumente (mit dem gleichen Wert im PlainText-Feld "Meins")
in der Datenbank und versendet die Mail(s) darüber.
Ansicht "(AllDouble)" sortiert nach erster Spalte "Meins" notwendig.
%END REM

Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim docOne As NotesDocument 'das erste Dokument in Ansicht
Dim docTwo As NotesDocument 'das nächste Dokument in Ansicht
Dim entryOne As NotesViewEntry 'das erste ViewEntry in Ansicht
Dim entryTwo As NotesViewEntry 'das nächste ViewEntry in Ansicht
Dim vec As NotesViewEntryCollection
Dim countDouble As Integer

Set db = session.CurrentDatabase
Dim serverName As String
If session.IsOnServer Then
serverName = db.Server
Else
   serverName = "lokal"
End If

countDouble = 1
Set view = db.GetView( "(AllDouble)" )
view.AutoUpdate = False
Set vec = view.AllEntries
Set entryOne = vec.GetFirstEntry()
Set docOne = entryOne.Document

Dim text1 As String
Dim text2 As String
      
While Not (docOne Is Nothing)
text1 = "Agent fand " & countDouble & " doppelte Dokumente " & text2 & _
         " in Datenbank '" & db.title & "' auf "  & serverName
Set entryTwo = vec.GetNextEntry(entryOne)

'Kein weiteres Dokument in Ansicht vorhanden
If entryTwo Is Nothing Then
      
       If countDouble > 1 Then 'Zumindest ein doppeltes Dokument wurde gefunden
         Set doc = New NotesDocument(db)
         doc.Subject = "Doppelte Dokumente in " & db.title & " !"
         doc.Body = text1
         Call doc.Send( False, "Bruce Willis/World" )
         End If
        
Exit Sub
End If

Set docTwo = entryTwo.Document
  
   'Ein (oder noch ein) doppeltes Dokument vorhanden
   If docOne.Meins(0) = docTwo.Meins(0) Then
      countDouble = countDouble + 1
      text2 = docOne.Meins(0)
   End If
  
   'Zumindest ein doppeltes Dokument wurde gefunden, das nächste Dokument ist aber kein doppeltes mehr
   If countDouble > 1 And (docOne.Meins(0) <> docTwo.Meins(0)) Then
        Set doc = New NotesDocument(db)
        doc.Subject = "Doppelte Dokumente in " & db.title & " !"
        doc.Body = text1
        Call doc.Send( False, "Bruce Willis/World" )
        countDouble = 1
   End If
      
   Set entryOne = vec.GetNextEntry(entryOne)  
   Set docOne = entryOne.Document
Wend

End Sub
--- Ende Code ---

Gruß
Leo

Bruce Willis:
Noch kürzer und ohne Zugriff auf NotesDocument:


--- Code: ---Sub Initialize()
%REM
Der Agent findet doppelte Dokumente (mit dem gleichen Wert im PlainText-Feld "Meins")
in der Datenbank und versendet die Mail(s) darüber.
Ansicht "(AllDouble)" sortiert nach erster Spalte "Meins" notwendig.
%END REM

Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim entryOne As NotesViewEntry 'das erste ViewEntry in Ansicht
Dim entryTwo As NotesViewEntry 'das nächste ViewEntry in Ansicht
Dim vec As NotesViewEntryCollection
Dim countDouble As Integer

Set db = session.CurrentDatabase
Dim serverName As String
If session.IsOnServer Then
serverName = db.Server
Else
   serverName = "lokal"
End If

countDouble = 1
Set view = db.GetView( "(AllDouble)" )
view.AutoUpdate = False
Set vec = view.AllEntries
Set entryOne = vec.GetFirstEntry()

Dim text1 As String
Dim text2 As String
      
While Not (entryOne Is Nothing)
text1 = "Agent fand " & countDouble & " doppelte Dokumente " & text2 & _
         " in Datenbank '" & db.title & "' auf "  & serverName
Set entryTwo = vec.GetNextEntry(entryOne)

'Kein weiteres Dokument in Ansicht vorhanden
If entryTwo Is Nothing Then
      
       If countDouble > 1 Then 'Zumindest ein doppeltes Dokument wurde gefunden
         Set doc = New NotesDocument(db)
         doc.Subject = "Doppelte Dokumente in " & db.title & " !"
         doc.Body = text1
         Call doc.Send( False, "Bruce Willis/World" )
         End If
        
Exit Sub
End If
  
   'Ein (oder noch ein) doppeltes Dokument vorhanden
   If entryOne.ColumnValues(0) = entryTwo.ColumnValues(0) Then
      countDouble = countDouble + 1
      text2 = entryOne.ColumnValues(0)
   End If
  
   'Zumindest ein doppeltes Dokument wurde gefunden, das nächste Dokument ist aber kein doppeltes mehr
   If countDouble > 1 And (entryOne.ColumnValues(0) <> entryTwo.ColumnValues(0)) Then
        Set doc = New NotesDocument(db)
        doc.Subject = "Doppelte Dokumente in " & db.title & " !"
        doc.Body = text1
        Call doc.Send( False, "Bruce Willis/World" )
        countDouble = 1
   End If
      
   Set entryOne = vec.GetNextEntry(entryOne)  
Wend

End Sub

--- Ende Code ---

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln