Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Alexis am 17.10.05 - 17:16:04

Titel: Soft löschen im Database Script
Beitrag von: Alexis am 17.10.05 - 17:16:04
Hallo Forum,

ich möchte im Database Script das Löschen von Response-Dokumenten ausführen, jedoch das Hauptdokument nur mit einem neuen Status versehen ("Archiv"). Das Löschen klappt, nicht jedoch das Setzen des Feldes "Status".

Dim collection As NotesDocumentCollection
   Dim  doc As NotesDocument
   Set collection = Source.Documents
   
   If collection.Count > 0 Then
      For i = 1 To collection.Count
         Set doc = collection.GetNthDocument(i)
         Call DeleteResponseDocs(doc)
         Call  doc.replaceItemValue("Status", "Archiv")
         Call doc.Save(True, True)
         Continue = False         
      Next
   End If 

Ich bin sicher, dass der Code falsch ist, aber ich weiss es nicht besser! Kann mir jemand auf die Sprünge helfen? Geht das überhaupt auf diesem Wege?

Alexis
Titel: Re: Soft löschen im Database Script
Beitrag von: eknori am 17.10.05 - 17:31:38
hmm, ist DeleteResponseDocs(doc) eine eigenen Routine ?

wenn ja, versuche es mal so

 If collection.Count > 0 Then
      For i = 1 To collection.Count
         Set doc = collection.GetNthDocument(i)
         Call DeleteResponseDocs(doc)
       Next
   End If

Call collection.StampAll("Status", "Archiv")


nee, stop, das geht ja auch nicht.
Wie kommst du eigentlich auf Source.Documents ?

Sieht mir alles sehr nach PseudoCode aus, was du hier gepostet hast.

Titel: Re: Soft löschen im Database Script
Beitrag von: Alexis am 17.10.05 - 18:35:18
Hallo Eknori,

1. DeleteResponseDocs(doc) ist eine eigene Routine, funktioniert auch (nix pseudo)
2. Der, die, das Event Querydocumentdelete des Database scripts beginnt mit
           Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)

Alexis

Titel: Re: Soft löschen im Database Script
Beitrag von: eknori am 17.10.05 - 18:42:39
warum Querydocumentdelete ?

Du stösst deinen Code zum Löschen aller Antwortdokumente immer dann an, wenn in der Datenbank ein Dokument gelöscht werden soll ... Wo ist der Sinn ??
Titel: Re: Soft löschen im Database Script
Beitrag von: Alexis am 17.10.05 - 19:00:56
Hallo Eknori,

der Sinn ist folgender:

Die Antwortdokumente sind "Linkdokumente", die die Verbindung zwischen dem Hauptdokument und anderen Dokumenten herstellt. Diese Verbindungsdokumente werden hinfällig mit dem Prozess, dass das Hauptdokument ungültig wird und ins Archiv wandern soll.

Vielleicht ist das verständlich.

Das ist meine Absicht: Hauptdokument bekommt den Stempel "Archiv" und ist nicht mehr allgemein sichtbar in der Datenbank und die Linkdokumente werden gelöscht.

Alexis

 
Titel: Re: Soft löschen im Database Script
Beitrag von: eknori am 17.10.05 - 19:03:59
OK, fangen wir alsio wieder beim Urschleim an; WAS funktioniert denn an deiner anfangs geposteten Routine nicht ?

Das Problem, das du hast ist, daß das Löschen der Antwortdocs ja wieder den Querydocumentdelete event auslöst; dumm gelaufen.
Titel: Re: Soft löschen im Database Script
Beitrag von: TMC am 17.10.05 - 21:38:55
Würde es so machen:

Code
	Dim uiws As New NotesUIWorkspace
	Dim collection As NotesDocumentCollection	
	Dim docLoop As NotesDocument
	Dim docTemp As NotesDocument
	
	Set collection = Source.Documents
	
	Set docLoop = collection.GetFirstDocument	
	While Not (docLoop Is Nothing)
		Set docTemp = collection.GetNextDocument(docLoop)
		
		If docLoop.IsResponse Then
			Call docLoop.Remove( True )
		Else
			Call  docLoop.ReplaceItemValue("Status", "Archiv")
			Call doc.Save(True, True)
		End If
		
		Set docLoop = docTemp
	Wend
	continue=False 'Damit das Lösch-Symbol weg ist in der View
	Call uiws.ViewRefresh

D.h. im QuerydocDelete-Event wird jedes selektierte Dok durchlaufen.
Über docLoop.IsResponse wird geprüft, ob es ein Antwort-Dokument ist. Wenn ja, dann löschen, wenn nein, dann Status ändern.
Titel: Re: Soft löschen im Database Script
Beitrag von: TMC am 17.10.05 - 21:45:26
Das Problem, das du hast ist, daß das Löschen der Antwortdocs ja wieder den Querydocumentdelete event auslöst; dumm gelaufen.

Nicht ganz,
Normalerweise hat man eine View vom Typ "Shared, contains deleted documents". Dort rein wandern die Dokumente u.a. bei NotesDocument.Remove. Der QueryDocumentDelete - Event greift nicht in dieser View, zumindest nicht in ND6, in R5 schon. Kann man abfangen durch die Abfrage der View im Event, also z.B. >>if uiworkspace.currentview.viewname = "Papierkorb"<<.

Titel: Re: Soft löschen im Database Script
Beitrag von: koehlerbv am 17.10.05 - 22:36:51
Das Problem, das du hast ist, daß das Löschen der Antwortdocs ja wieder den Querydocumentdelete event auslöst; dumm gelaufen.

Wird das Löschen im Backend ausgeführt, wird QueryDocumentDelete nicht rekursiv aufgerufen - bestimmt nicht.

Bernhard
Titel: Re: Soft löschen im Database Script
Beitrag von: Alexis am 18.10.05 - 15:42:57
Hallo Forum, hallo TMC,

die richtige Mischung macht's:

Die Konstruktion von TMC und eine eigene Routine (Sub DeleteResponseDocs (doc As NotesDocument)) zum Löschen der Antwortdokumente löst meine Aufgabe. Dabei müssen nicht einmal die Responses markiert werden.

Danke für die Antworten.

Alexis