Domino 9 und frühere Versionen > ND7: Entwicklung
löschen von Dokumenten (MoveToTrash) selbst schreiben
Neuling_2k7:
--- Zitat von: koehlerbv am 16.11.07 - 18:49:55 ---Vielleicht denkst Du doch eher über Klaus' Vorschlag nach (und bestimmt nicht nur Klaus und ich gehen solche Wege). Du erreichst den gleichen Effekt, Du bist zudem unabhängig von Datenbank-Eigenschaften der Herr des Geschehens - musst aber natürlich dann auch noch für Designelemente sorgen, die dann das endgültige Löschen ermöglichen / erleichtern.
--- Ende Zitat ---
Ich denke Du hast recht Bernhard,
wahrscheinlich habe ich so eher eine Chance das ganze hinzubekommen...
ich würde jetzt also folgendermaßen vorgehen: (bitte verbessert mich, wenn ich falsch liege ::) )
Ich lege eine neue Ansicht an ("Papierkorb") als normale Ansicht (nicht nur gelöschte Docs).
Als Selektion: alle Docs, für die gilt: "gelöscht"=1
das feld setze ich über einen Agenten (wie von Klaus vorgeschlagen) und diesen Agenten rufe ich über das "Querydocumentdelete" auf, sofern das zu löschende Dokument nicht in der neuen Ansicht zu finden ist.
Wenn man versucht, das Dokument aus dem Papierkorb zu löschen, wird ein @deletedokument ausgelöst ??
klaussal:
--- Zitat ---und diesen Agenten rufe ich über das "Querydocumentdelete" auf
--- Ende Zitat ---
Nein, in einer stinknormalen Ansicht eine Aktion "Papiekorb" einbauen. Diese startet den Agenten.
Nicht vergessen, in alle (!) Ansichten (bis auf den Papierkorb) einbauen: Select form = "..." & geloescht != "1"
dirk_2909:
Wenn Du das Drücken der [Entf]-Taste abfangen willst, musst Du im QueryDocumentDelete das Löschen abfangen und die entsprechenden Flags in den jeweiligen Dokumenten setzen !!
Also:
1. Continue = False !!
2. Collection der zu "löschenden" Doks holen
3. Jedes dok verarbeiten und Flag setzen.....
Den Agenten benötigst Du in den Ansichten, um die Docs in den Papierkorb zu verschieben ohne das der User die [Entf]-Taste betätigt....
Neuling_2k7:
--- Zitat von: dirk_2909 am 21.11.07 - 08:47:34 ---Wenn Du das Drücken der [Entf]-Taste abfangen willst, musst Du im QueryDocumentDelete das Löschen abfangen und die entsprechenden Flags in den jeweiligen Dokumenten setzen !!
Also:
1. Continue = False !!
2. Collection der zu "löschenden" Doks holen
3. Jedes dok verarbeiten und Flag setzen.....
--- Ende Zitat ---
Soweit so gut, ich habe die ansichten dementsprechend umgebaut und in meinen Masken ein Feld 'is_deleted' eingefügt, das ich per Agent (über eine Aktion getriggert auch füllen aknn und das Dok somit aus der Ansicht "lösche".
Allerdings macht mir das script zum Abfangen der [Entf]->Taste noch Streß.
Hab euch hier mal das Coding eingehängt, das ich verwenden wollte - das Skript läuft auch ohne Fehler durch, aber das Feld wird nicht gefüllt...
Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)
Dim ws As New notesuiworkspace
Dim doc_col As NotesDocumentCollection
Dim doc As Notesdocument
Dim session As New NotesSession
Dim db As NotesDatabase
continue=False
Set db=session.CurrentDatabase
Set doc_col=source.Documents
Set doc=doc_col.GetFirstDocument
While Not doc Is Nothing
Call doc.AppendItemValue("is_deleted",1)
Call doc.Save(True,True)
Set doc=doc_col.GetNextDocument (doc)
Wend
End Sub
Ein weiterer "unschöner Effekt" ist im Moment, dass wenn das Skript durchgelaufen ist, das Dokument sporadich als gelöscht 'geflagt' ist und ich beim verlassen der Db gefragt werde, ob ich das Dokument im Papierkorb wirklich löschen möchte...
mibo11:
Hallo,
ich kann nicht ganz nachvollziehen warum du in deiner Routine ein Löschflag setzt, bzw. dir dazu geraten wurde. Wenn ich dein Problem richtig verstehe, möchtest du deine Dokumente in einen Papierkorb verschieben. Dieses Ziel erreichst du grundsätzlich über das bereits auch von dir erwähnte Softdeletion. Dadurch werden alle gelöschten Dokumente zunächst in den Papierkorb verschoben und können über einen selbst definierten Zeitraum wieder reaktiviert werden.
Um nun auf zu löschende Dokumente reagieren zu können, benutzt du das von Bernhard erwähnte Ereignis Querydocumentdelete. Dieses Event wird vor dem Löschen ausgeführt, genauer gesagt bevor das Dokument zum Löschen markiert wird. Dies aber willst du ja verhindern. Daher die Zeile continue = false in deinem Script, d.h. deine Löschanforderung wird nicht ausgeführt. Um nun trotzdem deine Dokumente zu löschen, musst du diese über eine Backendoperation entfernen.
Dein angepastes Script im Querydocumentdelete Ereignis sollte ungefähr (ohne Gewähr) so aussehen, dann kannst du dir deine Flags sparen.
Dim ws As New notesuiworkspace
Dim doc As notesdocument
Dim i As Integer
For i = 1 To Source.Documents.count
Set doc = Source.Documents.GetNthDocument(i)
doc.Remove(True)
Next
ws.ViewRefresh
Continue = False
Gruß
Sascha
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln