Autor Thema: Soft löschen im Database Script  (Gelesen 2067 mal)

Offline Alexis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 534
  • Geschlecht: Männlich
  • LotusNotes macht süchtig!
Soft löschen im Database Script
« 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
« Letzte Änderung: 18.10.05 - 15:43:13 von Alexis »
wenn ich kein Problem hätte, wär' ich nicht hier ---
wenn ich im Forum eine Lösung gefunden hätte, wär' ich nicht hier ---
wenn ich nicht wüsste, dass mir hier fast immer geholfen wird, wär' ich AUCH nicht hier ---

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Soft löschen im Database Script
« Antwort #1 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.

« Letzte Änderung: 17.10.05 - 17:33:48 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Alexis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 534
  • Geschlecht: Männlich
  • LotusNotes macht süchtig!
Re: Soft löschen im Database Script
« Antwort #2 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

wenn ich kein Problem hätte, wär' ich nicht hier ---
wenn ich im Forum eine Lösung gefunden hätte, wär' ich nicht hier ---
wenn ich nicht wüsste, dass mir hier fast immer geholfen wird, wär' ich AUCH nicht hier ---

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Soft löschen im Database Script
« Antwort #3 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 ??
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Alexis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 534
  • Geschlecht: Männlich
  • LotusNotes macht süchtig!
Re: Soft löschen im Database Script
« Antwort #4 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

 
wenn ich kein Problem hätte, wär' ich nicht hier ---
wenn ich im Forum eine Lösung gefunden hätte, wär' ich nicht hier ---
wenn ich nicht wüsste, dass mir hier fast immer geholfen wird, wär' ich AUCH nicht hier ---

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Soft löschen im Database Script
« Antwort #5 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.
« Letzte Änderung: 17.10.05 - 19:17:08 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Soft löschen im Database Script
« Antwort #6 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.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Soft löschen im Database Script
« Antwort #7 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"<<.

Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Soft löschen im Database Script
« Antwort #8 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

Offline Alexis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 534
  • Geschlecht: Männlich
  • LotusNotes macht süchtig!
Re: Soft löschen im Database Script
« Antwort #9 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



wenn ich kein Problem hätte, wär' ich nicht hier ---
wenn ich im Forum eine Lösung gefunden hätte, wär' ich nicht hier ---
wenn ich nicht wüsste, dass mir hier fast immer geholfen wird, wär' ich AUCH nicht hier ---

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz