Domino 9 und frühere Versionen > ND6: Entwicklung

Bestimmte Dokumente per Agent löschen

(1/6) > >>

Wiesel:
Hallo!

Ich möchte aus einer EntwurfsDB per Agent immer die Datensätze löschen lassen, die mittlerweile in einer ArchivDB sind.
Dazu habe ich ein Feld mit einem eindeutigen Wert.
Ich lese also in einer View des Archivs den Wert aus und vergleiche die Doks in der EntwurfsDB, um sie dort zu löschen. Den Doks im Archiv gebe ich dann ein Merkmal, damit diese aus der Ansicht wieder verschwinden und nicht erneut abgeprüft werden müssen.

In meinem Agent habe ich nun das Problem, dass ich nicht weiß, wie ich dort bestimme, dass in der ArchivDB nur diejenigen Doks das Merkmla bekommen, die ich in der EntwurfsDB löschen konnte?!

Hier mal mein Script:

Sub Initialize
   Dim S As New NotesSession
   Dim DB As NotesDatabase
   Dim Doc As NotesDocument
   Dim View As NotesView
   Dim strEntwurfDB As String
   Dim strEntwurfPfad As String
   Dim strUnique As String
   
   Set DB = S.CurrentDatabase
   Set Doc = DB.GetProfileDocument("(DBProfil)")
   'Profil Dokument auslesen
   strEntwurfDB = Doc.dbServer(0)
   strEntwurfPfad = Doc.dbPfad(0)
   
   Dim VEntwuerfe As NotesDatabase
   Dim DocE As NotesDocument
   Dim ViewE As NotesView
   Set VEntwuerfe = S.GetDatabase(strEntwurfDB,strEntwurfPfad)
   Set ViewE = VEntwuerfe.GetView("(LoeschungEntwuerfeE)")
   
   Set View = DB.GetView("(LoeschungEntwuerfe)")
   Set Doc = View.GetFirstDocument
   
   'Dokumente kopieren   
   Do Until Doc Is Nothing
      strUnique = Doc.Unique(0)
      'Lösch jetzt alle dazugehörigen Dokumente und Antworten in der Datenbank VEntwuerfe
      Set DocE = ViewE.GetDocumentByKey(strUnique)
      Do While Not (DocE Is Nothing)
         If DocE.Unique(0) = strUnique Then
            Call DocE.Remove(True)
         End If
         Set DocE = ViewE.GetNextDocument(DocE)
      Loop      
      
      Doc.txtAktion = "gelöscht"
      Call doc.Save(True, False)
      Set Doc = View.GetNextDocument(Doc)
   Loop
   
   Call view.Refresh
   
End Sub


Im Moment, gebe ich immer allen das Merkmal mit. Auf jeden Fall klappt es nicht so, wie ich es mir vorstelle.

Kann mir jemand einen Tipp geben?

Vielen Dank im Voraus,
Wiesel

Driri:
Besser wäre es, wenn Du direkt beim Archivieren ein Flag in den zu archivierenden Dokumenten setzt. Dann kannst Du die in einer View anzeigen und regelmäßig per Agent aufräumen.

Wiesel:
Die Dokumente gehen werden in einer EntwurfsDB angelegt, werden dann in eine VeröffentlichungsDB kopiert (das Dok bleibt also in der EntwurfsDB bestehen) und gehen dann ins Archiv. Und wenn ein Dok im Archiv ist, soll der Ursprung in der EntwurfsDB gelöscht werden.
Daher geht das mit dem Flag schlecht.

Driri:
D.h. die Dokumente werden aus der VeröffentlichungsDB archiviert ?

Dann würde ich die DocumentUniqueID des Dokumentes der EntwurfsDB mit in ein Feld schreiben. Dieses bleibt dann ja beim Kopieren bzw. Archivieren erhalten und Du hast später dann direkt Zugriff auf das Original aus der EntwurfsDB.

Mea culpa. Ich hab jetzt erst das Script oben mal überflogen. Die UniqueID hast Du ja scheinbar. Ich hab dein Problem falsch verstanden.

Die Remove-Methode hat einen Rückgabewert, den Du einfach abfragen kannst. Wenn dieser True ist, dann setzt Du das Flag im Archiv-Dokument, ansonsten nicht.

Axel:
Wenn ich das richtig verstehe, sollen nur die Dokumente im Archiv eine Kennzeichnung bekommen, die du im Entwurf löschen konntest.

Eine Alternative wäre die folgende. Du fügst in die Maske ein berechnetes Feld mit der UniqueID ein, welches dann nicht mehr verändert wird und auch in der Archiv-DB mitgeführt wird. In der Archiv-DB erstellst du eine versteckte Ansicht, die nach diesem Feld in der ersten Spalte sortiert ist.
In deinem Agent kannst du dann an Hand dieser ID dann das Dokument in der Archiv-DB finden und wenn es im Entwurf gelöscht wurde, entsprechend deinen Wünsche bearbeiten.


Axel

[Edit]: Da war Ingo schneller.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln