Autor Thema: Vererbung in Notes  (Gelesen 2279 mal)

Offline smithy

  • Frischling
  • *
  • Beiträge: 6
  • Geschlecht: Weiblich
Vererbung in Notes
« am: 04.03.05 - 10:13:57 »
Hallo.

Wie kann ich in Notes realisieren ein Dokument mit all seinen Child-Dokumenten (aus einer View heraus) zu löschen OHNE dafür einen Agenten zu schreiben ?

(Löschen erfolgt vom enduser per Button - soll aus der Datenbank komplett gelöscht werden, nicht nur aus der View)

Vielen Dank schon mal im Voraus.

Glombi

  • Gast
Re: Vererbung in Notes
« Antwort #1 am: 04.03.05 - 10:56:48 »
Das geht wenn Du den Button mit Script programmierst und die doc.Responses Methode verwendest. Damit erhälst Du die Antworten. Wenn es auch Rückantworten gibt, müsstest Du das rekursiv aufrufen.

Andreas

Marinero Atlántico

  • Gast
Re: Vererbung in Notes
« Antwort #2 am: 04.03.05 - 11:10:30 »
imho ist das ein bischen eine Vermischung von Begrifflichkeiten.
Antwortdokumente ist eigentlich keine Vererbung im OO-Sinne (is-A Relationship).
Vererbung als Begriff wird im Kontext von Antwortdokumenten auch selten verwendet, oder ???
Es werden zwar Werte vom Hauptdokument übernommen.
Das ist aber mehr so ein Sonderfeature.
Im Grunde ist das Feature "Antwortdokument" mehr zur Strukturierung von Daten-Entities in einer Notes-Datenbank zu sehen.
Oder ???

Offline smithy

  • Frischling
  • *
  • Beiträge: 6
  • Geschlecht: Weiblich
Re: Vererbung in Notes
« Antwort #3 am: 04.03.05 - 11:12:47 »
die methode an sich würde funktionieren, dass problem, das sich jetzt ergeben hat, ist:

ich will das dokument aus der view heraus löschen lassen und nicht das dokument erst öffnen und dann löschen

wie greife ich auf das aktuell markierte element in der view zu ?

Glombi

  • Gast
Re: Vererbung in Notes
« Antwort #4 am: 04.03.05 - 11:16:53 »
Vorab eine Bemerkung am Rande: Du solltest ggf. doch einen Agenten ins Auge fassen. Dieser wird dann von Deinem Button aufgerufen. Ich weiss nicht, ob es in R6 inwzischen besser ist, aber früher waren Aktionsbuttons in Ansichten unausgereift. Dazu gibt es hier auch einige Threads.

Zurück zur Frage: Da markierte Dokument in einer View bekommst Du mit

dim session as New NotesSession
dim db as NotesDatabase
dim dc as NotesDocumentCollection
set db = session.CurrentDatabase
set dc = db.UnprocessedDocuments    'NotesDocumentCollection mit dem gewählten Dok.

Andreas

Offline smithy

  • Frischling
  • *
  • Beiträge: 6
  • Geschlecht: Weiblich
Re: Vererbung in Notes
« Antwort #5 am: 04.03.05 - 11:24:59 »
super, vielen dank

>> kann agenten auf dem system nur nachts laufen lassen, ansonsten krieg ich die db nicht genehmigt, sonst wäre vieles einfacher  ;)

Glombi

  • Gast
Re: Vererbung in Notes
« Antwort #6 am: 04.03.05 - 11:30:06 »
Du brauchst doch keinen periodischen Agenten sondern nur einen der für gewählte Dokumente läuft. Von Design her ist das mit einer Aktion gleich zu setzen.

Andreas

Offline smithy

  • Frischling
  • *
  • Beiträge: 6
  • Geschlecht: Weiblich
Re: Vererbung in Notes
« Antwort #7 am: 04.03.05 - 12:46:54 »
ich hoffe, das ist der letzte post für heute:

ich habe folgenden code auf den delete-Button gelegt

Sub Click(Source As Button)
               
                Dim session As New NotesSession
                REM Dim ws As New NotesUIWorkspace
                Dim db_this As notesDatabase
                REM Dim vw_current As NotesView
                Dim dc As notesDocumentCollection
                Dim dc_child As notesDocumentCollection
                Dim doc_child As Notesdocument
                Dim doc_parent As Notesdocument
               
                Set db_this = session.CurrentDatabase
                REM Set vw_current = db_this.GetView( "VW_custom" )
                Set dc = db_this.UnprocessedDocuments
                Set doc_parent = dc.getFirstDocument()
                Set dc_child = doc_parent.getResponses()
               
                Set doc_child = dc_child.GetFirstDocument()
               
                While Not (doc_child Is Nothing)
                        Call doc_child.RemovePermanently(True)
                        Set doc_child = dc_child.getNextDocument(doc_child)
                Wend
               
                Call doc_parent.RemovePermanently(True)
               
End Sub


und bekomme die fehlermeldung:

wrong number of array subscripts

ich weiß echt nicht mehr weiter ....

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Vererbung in Notes
« Antwort #8 am: 04.03.05 - 12:52:40 »
Code
               While Not (doc_child Is Nothing)
                        Call doc_child.RemovePermanently(True)
                        Set doc_child = dc_child.getNextDocument(doc_child)
                Wend

Da beisst sich die Karte auch in den Schwanz: Erst doc_Child löschen und dann doc_Child an GetNextDocument übergeben - das ist doch jetzt Nothing.

Du musst mit einem temporären NotesDocument arbeiten:
While Not ...
Set doc_Remove = doc_Child
Set doc_Child = .... GetNextDocument
Call doc_Remove.Remove....

HTH,
Bernhard

Glombi

  • Gast
Re: Vererbung in Notes
« Antwort #9 am: 04.03.05 - 13:02:57 »
Statt
  Set dc_child = doc_parent.getResponses()
muss es
  Set dc_child = doc_parent.Responses
heissen.

Das getResponses() ist Java.

Andreas


Offline smithy

  • Frischling
  • *
  • Beiträge: 6
  • Geschlecht: Weiblich
Re: Vererbung in Notes
« Antwort #10 am: 04.03.05 - 13:06:34 »
oh man,

ich sollte feierabend machen.

vielen herzlichen dank nochmal.

Marinero Atlántico

  • Gast
Re: Vererbung in Notes
« Antwort #11 am: 04.03.05 - 13:09:39 »
Kann man nicht in 6 direkt die ganze Collection löschen:
Code
dc_child.removeAll(true)

Glombi

  • Gast
Re: Vererbung in Notes
« Antwort #12 am: 04.03.05 - 13:39:18 »
Das geht auch schon in R5. Aber es müssen Antworten auf Antworten berücksichtigt werden, daher sprach ich von Rekursion...

Andreas

Offline networkaccess

  • Frischling
  • *
  • Beiträge: 5
Re: Vererbung in Notes
« Antwort #13 am: 12.05.05 - 15:24:06 »
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

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Vererbung in Notes
« Antwort #14 am: 12.05.05 - 18:26:59 »
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
Ohne Computer wären wir noch lange nicht hinterm Mond!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz