Autor Thema: löschen von Dokumenten (MoveToTrash) selbst schreiben  (Gelesen 7302 mal)

Offline Neuling_2k7

  • Frischling
  • *
  • Beiträge: 22
  • Geschlecht: Männlich
Hallo @all,

Ich habe folgendes Problem:

Ich habe eine DB erstellt und innerhalb dieser DB einen Ordner ($Trash) angelegt. Die Softdel ist aktiviert.
In das Querydocumentdelete hab ich den Befehl @command([MoveToTrash]) eingetragen.

Wenn ich jetzt versuche ein Dok zu löschen bekomme ich eine Fehlermeldung "Zu viele rekursive Formelauswertungen"...

Jetzt habe ich 2 Fragen:
a)Ist mein Vorgehen überhaupt so sinnvol? Und wenn ja, woher stammt dann die Fehlermeldung??
b)Gibt es einen besseren Lösungsansatz??? Bin für alle Vorschläge offen...

gruß
Torsten

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: löschen von Dokumenten (MoveToTrash) selbst schreiben
« Antwort #1 am: 14.11.07 - 22:58:52 »
Ganz, ganz falsch:
Im QueryDocumentDelete werden Löschanforderungen abgefangen zur weiteren Behandlungen. Wenn Du dort eine Löschanforderung auslöst, rufst Du damit logischerweise gleich wieder das QueryDocumentDelete aus (vor allem, da @Command ([MoveToTrash]) ein Frontend-Befehl ist und genau dieser QueryDocumentDelete auslöst).

Zu Deinen Fragen:
a) nein
b) nein

Die Frage lautet ganz anders: Hast Du Deine DB korrekt für Softdeletions vorbereitet? Hast Du eine Ansicht, die wirklich nur gelöschte Dokumente aufnimmt? Dein Problem liegt offensichtlich auf einer anderen Ebene. Bitte auch die DesignerHelp hierzu erneut studieren.

Bernhard

Offline Neuling_2k7

  • Frischling
  • *
  • Beiträge: 22
  • Geschlecht: Männlich
Re: löschen von Dokumenten (MoveToTrash) selbst schreiben
« Antwort #2 am: 14.11.07 - 23:32:39 »
Ganz, ganz falsch:
Im QueryDocumentDelete werden Löschanforderungen abgefangen zur weiteren Behandlungen. Wenn Du dort eine Löschanforderung auslöst, rufst Du damit logischerweise gleich wieder das QueryDocumentDelete aus (vor allem, da @Command ([MoveToTrash]) ein Frontend-Befehl ist und genau dieser QueryDocumentDelete auslöst).

Zu Deinen Fragen:
a) nein
b) nein

Die Frage lautet ganz anders: Hast Du Deine DB korrekt für Softdeletions vorbereitet? Hast Du eine Ansicht, die wirklich nur gelöschte Dokumente aufnimmt? Dein Problem liegt offensichtlich auf einer anderen Ebene. Bitte auch die DesignerHelp hierzu erneut studieren.

Bernhard

Hi,

ich hab mir die DesignerHelp nochmal angeschaut, aber so ganz schlau werd ich daraus nicht...
Einmal steht da ich brauche eine gemeinsame Ansicht ($Softdeletions) die alle Dokumente mit Status "Wiederherstellbare löschung" enthält, ein anderer eintrag sagt ich brauche einen Ordner ($Trash).... :-:

Irgendwie hatte ich mir das einfacher vorgestellt...
gruß
Torsten

Offline Neuling_2k7

  • Frischling
  • *
  • Beiträge: 22
  • Geschlecht: Männlich
Re: löschen von Dokumenten (MoveToTrash) selbst schreiben
« Antwort #3 am: 15.11.07 - 10:54:46 »
Hi @All,

also - ich komm einfach nicht mehr weiter - irgendwie will das alles nicht so wie ich will und die DominoDesigner Help hilft mir auch nicht wirklich weiter...  >:(

Hat vielleicht jemand eine "MoveToTrash for Dummys" dokumentation für mich?
Danke schon mal im Voraus....
gruß
Torsten

klaussal

  • Gast
Re: löschen von Dokumenten (MoveToTrash) selbst schreiben
« Antwort #4 am: 15.11.07 - 11:27:52 »
Vielleicht etwas einfacher:

Ich habe eine Ansicht "Papierkorb" und angehakelte Dokumente werden per Agent dahin verschoben.

Code
FIELD loesch:=loesch;
@SetField("loesch"; "1" );SELECT @All

Bei Bedarf können die wieder reanimiert werden.

Offline Neuling_2k7

  • Frischling
  • *
  • Beiträge: 22
  • Geschlecht: Männlich
Re: löschen von Dokumenten (MoveToTrash) selbst schreiben
« Antwort #5 am: 15.11.07 - 13:22:09 »
Vielleicht etwas einfacher:

Ich habe eine Ansicht "Papierkorb" und angehakelte Dokumente werden per Agent dahin verschoben.

Code
FIELD loesch:=loesch;
@SetField("loesch"; "1" );SELECT @All

Bei Bedarf können die wieder reanimiert werden.

Hi,

und wie bekommst du es hin, dass das auch dann funktioniert, wenn der Anwender die ENTF-Taste drückt?
Sorry, wenn ich so blöd frage, aber ich bin noch neu in der Notes-Entwicklung...
gruß
Torsten

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: löschen von Dokumenten (MoveToTrash) selbst schreiben
« Antwort #6 am: 15.11.07 - 13:24:18 »
Das fängt man dann wiederum im QueryDocumentDelete ab.

klaussal

  • Gast
Re: löschen von Dokumenten (MoveToTrash) selbst schreiben
« Antwort #7 am: 15.11.07 - 13:27:23 »
Oder in der ACL den Haken raus bei "Dokumente löschen".

Offline Neuling_2k7

  • Frischling
  • *
  • Beiträge: 22
  • Geschlecht: Männlich
Re: löschen von Dokumenten (MoveToTrash) selbst schreiben
« Antwort #8 am: 16.11.07 - 00:49:57 »
Hi @All,

erst mal danke für eure Antworten - hab jetzt gefunden, was mit noch gefehlt hat...

Für alle, die es interessiert: http://www-1.ibm.com/support/docview.wss?rs=0&uid=swg21091152

Jetzt müssen die Dokumente nur noch aus der Ursprungsansicht verschwinden, ohne das man gefragt wird, ob man "die Dokumente im Papierkorb wirklich löschen will...  ;D
gruß
Torsten

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: löschen von Dokumenten (MoveToTrash) selbst schreiben
« Antwort #9 am: 16.11.07 - 18:49:55 »
Wenn die Frage (eine Frontend-Geschichte, die ja wirklich Sinn macht!) nicht mehr erscheinen soll, dann musst Du das ganze über das Backend machen. Aber da wirst Du vermutlich sehr schnell an Deine Grenzen stossen.
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.

HTH,
Bernhard

Offline Neuling_2k7

  • Frischling
  • *
  • Beiträge: 22
  • Geschlecht: Männlich
Re: löschen von Dokumenten (MoveToTrash) selbst schreiben
« Antwort #10 am: 20.11.07 - 23:11:22 »
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.

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 ??

gruß
Torsten

klaussal

  • Gast
Re: löschen von Dokumenten (MoveToTrash) selbst schreiben
« Antwort #11 am: 21.11.07 - 08:11:52 »
Zitat
und diesen Agenten rufe ich über das "Querydocumentdelete" auf

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"

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: löschen von Dokumenten (MoveToTrash) selbst schreiben
« Antwort #12 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.....


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....
Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline Neuling_2k7

  • Frischling
  • *
  • Beiträge: 22
  • Geschlecht: Männlich
Re: löschen von Dokumenten (MoveToTrash) selbst schreiben
« Antwort #13 am: 26.11.07 - 23:23:11 »
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.....



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...
« Letzte Änderung: 26.11.07 - 23:26:14 von Neuling_2k7 »
gruß
Torsten

Offline mibo11

  • Senior Mitglied
  • ****
  • Beiträge: 325
  • Geschlecht: Männlich
Re: löschen von Dokumenten (MoveToTrash) selbst schreiben
« Antwort #14 am: 27.11.07 - 01:02:27 »
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

Offline Neuling_2k7

  • Frischling
  • *
  • Beiträge: 22
  • Geschlecht: Männlich
Re: löschen von Dokumenten (MoveToTrash) selbst schreiben
« Antwort #15 am: 27.11.07 - 09:39:13 »
Hi Sascha,

Das Skript funktioniert perfekt...
Die Dokumente verschwinden aus der Ansicht und tauchen im "Papierkorb" wieder auf...

Danke für die super Hilfe!!!

Gibt es eigentlich eine Möglichkeit zu verhindern, das Dokumente im Papierkorb geändert werden können? Dadurch würden sie nämlich wiederhergestellt...  :(
gruß
Torsten

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: löschen von Dokumenten (MoveToTrash) selbst schreiben
« Antwort #16 am: 27.11.07 - 09:54:03 »
Code
  For i = 1 To Source.Documents.count
   Set doc = Source.Documents.GetNthDocument(i)

.. würde ich drauf verzichten. Ist ein PerformanceKiller ... (natürlich macht sich das nicht bei so wenigen Docs bemerkbar  ;) ).

Besser :
Code
set doc = coll.GetFirstDocument
While not doc is Nothing
    ...
    Set doc = coll.GetNextDocument( doc )
Wend 

Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline Neuling_2k7

  • Frischling
  • *
  • Beiträge: 22
  • Geschlecht: Männlich
Re: löschen von Dokumenten (MoveToTrash) selbst schreiben
« Antwort #17 am: 27.11.07 - 10:37:05 »
Besser:
Code
set doc = coll.GetFirstDocument
While not doc is Nothing
    ...
    Set doc = coll.GetNextDocument( doc )
Wend 

Hi,

das funktioniert bei mir leider nicht :(

folgendes Coding:
Code
Dim ws As New notesuiworkspace   
Dim coll As NotesDocumentCollection	
Dim doc As notesdocument

Set coll=source.Documents 
Set doc =coll.getfirstdocument

While Not doc Is Nothing
  doc.Remove(True)
  Set doc=coll.GetNextDocument(doc)
Wend


beim Löschen der Dokumente kommt dann folgende Fehlermeldung:

"Function requires a valid ADT argument"


F1F1F1 !!
gruß
Torsten

Glombi

  • Gast
Re: löschen von Dokumenten (MoveToTrash) selbst schreiben
« Antwort #18 am: 27.11.07 - 10:38:36 »
So:

Dim ws As New notesuiworkspace   
Dim coll As NotesDocumentCollection   
Dim doc As notesdocument
Dim nextdoc As notesdocument

Set coll=source.Documents
Set doc =coll.getfirstdocument

While Not doc Is Nothing
set nextdoc = coll.getnextdocument(doc)
  doc.Remove(True)
  Set doc=nextdoc
Wend


P.s: Da war noch ein kleiner Fehler drin!
« Letzte Änderung: 27.11.07 - 10:44:43 von Glombi »

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: löschen von Dokumenten (MoveToTrash) selbst schreiben
« Antwort #19 am: 27.11.07 - 10:40:03 »
set doc2 = coll.GetNextDocument(doc)
doc.remove(true)
set doc = doc2


wenn du das doc löscht, kann er das nächste dazu natürlich nicht mehr suchen
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz