Domino 9 und frühere Versionen > ND6: Entwicklung

Vererbung in Notes

<< < (3/3)

smithy:
oh man,

ich sollte feierabend machen.

vielen herzlichen dank nochmal.

Marinero Atlántico:
Kann man nicht in 6 direkt die ganze Collection löschen:

--- Code: ---dc_child.removeAll(true)

--- Ende Code ---

Glombi:
Das geht auch schon in R5. Aber es müssen Antworten auf Antworten berücksichtigt werden, daher sprach ich von Rekursion...

Andreas

networkaccess:
Hallo, hier nochmal eine getestete Zusammenfassung - Mit Sub für rekursiven Aufruf...


'========================================================================================
' Dokumente mit Responses in View löschen
' Start über Action-Button in entspr. View
'========================================================================================
Sub Click(Source As Button)
   
   On Error Resume Next               'Errorhandler
   
   Dim workspace As New NotesUIWorkspace
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim dc_parent As NotesDocumentCollection   'Doc Collection Parent
   Dim doc_parent As NotesDocument
   Dim countresp As Integer
   
   Set db = session.CurrentDatabase
   Set dc_parent = db.UnprocessedDocuments    'von User gewähltes Doc (Cursorbalken in View)
   Set doc_parent = dc_parent.getFirstDocument()
   
   REM === Prüfen, ob Responses vorhanden sind
   Dim dc_child As NotesDocumentCollection    'Doc Collection Children
   Dim doc_child As NotesDocument
   Set dc_child = doc_parent.Responses
   Set doc_child = dc_child.GetFirstDocument
   While Not (doc_child Is Nothing)
      countresp = countresp + 1
      Set doc_child = dc_child.getNextDocument(doc_child)
   Wend
   REM ===
   
   REM === Wenn Responses vorhanden, Sub deleteChilds aufrufen
   If countresp > 0 Then
      Call deleteChilds(doc_parent)         'Aufruf Sub deleteChilds   
   End If
   REM ===
   
   Call doc_parent.RemovePermanently(True)    'Parent Doc löschen
   Call workspace.ViewRefresh             'View aktualisieren
   
End Sub




'========================================================================================
' Routine, um Responses zu löschen (rekursiver Aufruf)
' doc_parent wird übergegen
'========================================================================================
Sub deleteChilds (doc_parent As NotesDocument)   'Parent übernehmen
   
   Dim dc_child As NotesDocumentCollection    'Doc Collection Children
   Dim doc_child As NotesDocument
   Set dc_child = doc_parent.Responses
   Set doc_child = dc_child.GetFirstDocument
   
   While Not (doc_child Is Nothing)
      Call doc_child.RemovePermanently(True)
      Call deleteChilds(doc_child)
      Set doc_child = dc_child.getNextDocument(doc_child)
   Wend
   
End Sub

Axel:
Hi,

du kannst das Ganze auch im PostDocumentDelete-Event des Datenbank-Scriptes machen. Das gilt dann allerdings für alle Ansichten.

Sub Postdocumentdelete(Source As Notesuidatabase)
   
   Dim collection As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim i As Integer
   
   Set collection = Source.Documents
   
   If collection.Count = 0 Then
      Exit Sub
   Else
      For i = 1 To collection.Count
         Set doc = collection.GetNthDocument(i)
         Call DeleteResponseDocs(doc)
         Call doc.Remove(True)
      Next  'For i = 1 To collection.Count
   End If  'If collection.Count = 0 Then
   
End Sub

Die benötigte DeleteResponseDocs - Routine sieht so aus:

Sub DeleteResponseDocs (doc As NotesDocument)
   
   Dim responses As NotesDocumentCollection
   Dim tmpdoc As NotesDocument
   Dim dummy As NotesDocument
   
   Set responses = doc.Responses
   Set dummy = responses.GetFirstDocument
   While Not (dummy Is Nothing)
      Set tmpdoc = responses.GetNextDocument(dummy)
      Call DeleteResponseDocs(dummy)
      Call dummy.Remove(True)
      Set dummy = tmpDoc
   Wend  'While Not (dummy Is Nothing)
   
End Sub


Axel

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln