Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: MrMagoo am 11.06.03 - 08:44:23

Titel: Agent doppelte Dokumente löschen
Beitrag von: MrMagoo am 11.06.03 - 08:44:23
Hallo,

ich versuche gerade einen Agenten zu programmieren, der eine Ansicht nach doppelten Dokumenten durchsucht. Z.B. alle Dokumente löscht, die den gleichen Titel haben (Id geht leider nicht, da es sich um Kopien handelt.) Also ich schaffe es bis jetzt bestimmte Dokumente zu löschen. Wie bekomme ich den Vergleich von Titel1 zu Titlel2 und zu allen anderen Titeln hin?

Danke und Gruß
Titel: Re:Agent doppelte Dokumente löschen
Beitrag von: klaussal am 11.06.03 - 09:06:05
... mal so ins unreine gedacht:
erstes doc in der ansicht greifen, titel in einen string schieben. dann in einer inneren schleife den rest der docs lesen und bei = löschen. viewrefresh nicht vergessen. jetzt das nächste doc lesen und wieder die innere schleifen laufen lassen. :-\
Titel: Re:Agent doppelte Dokumente löschen
Beitrag von: Don Pasquale am 11.06.03 - 09:08:13
Hallo Magoo,

ich habe hier eine Funktion die auf DOC_ID überprüft.
Überall wo DOC_ID steht mußt Du deinen Titel
einsetzen. Teste das doch mal.

Ciao
Don Pasquale


Function DoesDOC_IDexists(Byval DOC_ID As String) As Integer
   
   Dim VIEW_BY_DOC_ID As String
   VIEW_BY_DOC_ID   = "DOC_ID"
   
   Dim Anzahl As Integer
   Dim session As New NotesSession    
   Set db = session.CurrentDatabase
   Set view = db.GetView(VIEW_BY_DOC_ID)
   Dim dc As notesdocumentcollection
   Set dc = view.GetAllDocumentsByKey(DOC_ID, False)
   
   Print DOC_ID
   ANZAHL = dc.Count
   
   If ANZAHL = 0 Then
      DoesDOC_IDexists = 0
   Else
      DoesDOC_IDexists = 1
   End If
End Function
Titel: Re:Agent doppelte Dokumente löschen
Beitrag von: MrMagoo am 11.06.03 - 09:30:11
@Don Pasquale

habe ich versucht, der macht aber irgendwie nix. Was passiert genau, sollte da ne Ausgabe oder so kommen?

Gruss
Titel: Re:Agent doppelte Dokumente löschen
Beitrag von: klaussal am 11.06.03 - 09:32:37
... nö, das teil von donpasquale setzt nur ein feld auf 0 oder 1, je nachdem ob die doc_id mehrmals vorkommt oder nicht...
Titel: Re:Agent doppelte Dokumente löschen
Beitrag von: Axel am 11.06.03 - 09:59:49
Hi,

nochmal ins Blaue gedacht...

Versuch's mal mit der Search-Methode aus der NotesDatabase-Klasse.

...
strTitel = "Überschrift nach der gesucht werden soll"
strSearch = "Titel = '" & strTitel & "'"
Set collection = db.Search(sSearch, Nothing, 0 )   

If collection.Count > 1 Then
  Messagebox "Mehrere Dokumente vorhanden"
End If
...

Axel
Titel: Re:Agent doppelte Dokumente löschen
Beitrag von: MrMagoo am 11.06.03 - 10:10:18
@Don Pasquale

irgendwie stehe ich wohl auf dem Schlauch, der Agent macht nix bei mir, ändert auch keine Feld

@Axel
ich will nicht nach einer bestimmte Überschrift suchen, sonder alle miteinander vergleichen und bei denen, die doppelt sind, den ältesten Eintrag rausschmeißen  ??? ??? ???
Titel: Re:Agent doppelte Dokumente löschen
Beitrag von: klaussal am 11.06.03 - 10:18:51
@MrMagoo,
ignorierst du meine antworten  ???. ich habe doch geschrieben, dass das teil von donpasquale nur das feld DoesDOC_IDexit
 nur auf 0 bzw auf 1 setzt... das war auch nur als anregung gedacht...
lass dir meine idee mal durch den kopf gehen... ::)
Titel: Re:Agent doppelte Dokumente löschen
Beitrag von: Axel am 11.06.03 - 10:19:21
Hi,

daß ist ja auch nur die Suche ob es weitere Dokumente mit diesem Titel gibt. a gehört noch weitere Logik außenrum.

So zum Beispiel:

...

Set entrycollection = view.AllEntries
Set entry = vc.GetFirstEntry()
While Not (entry Is Nothing)
  Set doc = entry.Document
  strTitel = doc.Titel(0)
  strSearch = "Titel = '" & strTitel & "'"
  Set collection = db.Search(sSearch, Nothing, 0 )  

  If collection.Count > 1 Then
    Messagebox "Mehrere Dokumente vorhanden"

    'Löschen der älteren Dokumente
  End If

  Set entry = vc.GetNextEntry(entry)

Wend
...


Axel

Titel: Re:Agent doppelte Dokumente löschen
Beitrag von: klaussal am 11.06.03 - 10:32:22
@axel,

in die gleiche richtung zielte meine erste idee. das mit der collection ist natürlich eine gute idee  :D
Titel: Re:Agent doppelte Dokumente löschen
Beitrag von: Axel am 11.06.03 - 10:38:56
Hi,

ich glaube aber auch, dass das nicht ganz unproblematisch ist.

Das Problem dürfte hier liegen:

Set entrycollection = view.AllEntries

Damit hast du alle Dokumente in einer Ansicht. Was passiert aber, wenn doppelte Dokumente gelöscht werden. In entrycollection sind sie aber noch vorhanden. Versucht man dann drauf zuzugreifen, knallts. Das müsste man irgendwie abfangen. Aber dafür fehlt mir im Moment die Idee wie.

Axel
 
Titel: Re:Agent doppelte Dokumente löschen
Beitrag von: klaussal am 11.06.03 - 10:59:30
@axel,

so gesehen ist mein erster ansatz dann doch nicht so schlecht. dabei fliegt ja nur das doppelte doc raus. das ist zwar zeitaufwendig, aber es klappt.
Titel: Re:Agent doppelte Dokumente löschen
Beitrag von: Axel am 11.06.03 - 11:09:34
@klaussal

Ja aber,....

Ein Teufel steckt auch hier noch im Detail. Du machst das mit

Set doc = view.GetFirstDocument

While...

  Set doc = view.GetNextDocument(doc)
Wend
...

Wenn du dann doc löscht, weil doppelt und älter, fehlt der Bezug für GetNextDocument. Das muss auch irgendwie abgefangen werden.


Axel
 
Titel: Re:Agent doppelte Dokumente löschen
Beitrag von: klaussal am 11.06.03 - 11:23:15
@axel,

jau, stimmt. :'(
nächster ansatz: eine view seq. durchgehen. für jedes doc eine collection bilden, jedes doc dieser collection anschauen, wenn docid-collection = doc-id-view, nix tun, sonst löschen, next document.
da mrmagoo sich aber ausgeklinkt hat, sollte es jetzt reichen.
Titel: Re:Agent doppelte Dokumente löschen
Beitrag von: Don Pasquale am 11.06.03 - 11:40:11

Wie wäre damit ?



   Dim session As NotesSession
   Dim db As NotesDatabase
   Dim view As NotesView
   
   Dim doc As NotesDocument   
   Dim RemoveDoc As NotesDocument
   
   Dim LOESCHLISTE List As String*32   
   
   Set session = New NotesSession
   Set db  = session.CurrentDatabase
   Set view = db.GetView( "DEINE VIEW" )
   Set doc = view.GetFirstDocument
   
   
   While Not doc Is Nothing
      
      
      If DOPPELT Then
         j = j + 1
         LOESCHLISTE(j) = doc.UniversalID
      End If
      
      Set doc = view.GetNextDocument(doc)         
   Wend
   
   Forall x In LOESCHLISTE
      
      Set RemoveDoc = db.GetDocumentByUNID(X)   
      Call Removedoc.RemoveFromFolder("($Inbox)")         
      
   End Forall
Titel: Re:Agent doppelte Dokumente löschen
Beitrag von: Axel am 11.06.03 - 12:05:48
@Don

Klasse Idee, dass mit einer Liste zu regeln. Damit geht man allem Ärger mit fehlenden Bezügen o. ä. aus dem Weg.

Werd ich mir merken, wenn ich mal so'n Problem hab.

Axel


Titel: Re:Agent doppelte Dokumente löschen
Beitrag von: klaussal am 11.06.03 - 12:33:11
... und wie sieht's da mit der 64k-beschränkung aus ?
Titel: Re:Agent doppelte Dokumente löschen
Beitrag von: Don Pasquale am 11.06.03 - 13:07:21

... und wie sieht's da mit der 64k-beschränkung aus ?

@Klaussal
Du Nörgler, Jetzt bekomme ich einmal ein Lob und
Du findest wieder ein Haar in der Suppe
 ;)

Ciao

Don Pasquale
Titel: Re:Agent doppelte Dokumente löschen
Beitrag von: klaussal am 11.06.03 - 13:09:54
 :'( :'( :'(  ... und dabei hab ich noch nicht einmal gefragt, was DOPPELT ist und wo's herkommt.

nein, ganz im ernst, die lösung ist sehr schön  :D :D :D :D :D

aber da es sich wohl um eine grössere anzahl von docs handelt (sonst würd ich das ja per hand machen) , sollte man schon die sache im auge behalten.
Titel: Re:Agent doppelte Dokumente löschen
Beitrag von: klaussal am 12.06.03 - 13:29:10
... schau mal hier nach:

http://www-10.lotus.com/ldd/sandbox.nsf/Search?SearchView&Query=agent&SearchOrder=1&SearchMax=1000&SearchWV=FALSE&SearchFuzzy=FALSE&Start=1&Count=10

da gibt's den punkt: DELETE DUPLICATE DOCS.....
Titel: Re:Agent doppelte Dokumente löschen
Beitrag von: MrMagoo am 12.06.03 - 17:48:43
Danke für Eure Hilfe!!!