Domino 9 und frühere Versionen > ND6: Entwicklung
Bestimmte Dokumente per Agent löschen
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