Autor Thema: Rückantworten auf Rückantworten...  (Gelesen 2030 mal)

Offline Basti07

  • Frischling
  • *
  • Beiträge: 19
Rückantworten auf Rückantworten...
« am: 03.07.07 - 15:12:13 »
Hallo Ihr lieben,

im Forum gibt es einiges zum Thema "Responses ermitteln", aber nichts wirklich für mich brauchbares, um durch mehrere Hierarchien durchzugehen...Noch dazu bin ich 'Anfänger' was LS angeht.

Zur Situation:
In einer Datenbank werden Projekte abgebildet. Das Projekt ist vom Typ "Dokument". Alle darunter anlegbaren Dokumente (z.B: Aufgaben, Vorgänge, etc.) werden "Rückantworten".
Es ist nicht auszuschließen, das Rückantworten weitere Rückantworten erhalten. (Verhält sich quasi wie eine Diskussionsdatenbank)

Das Ziel ist, das im QuerySave des Projektdokuments per Script alle darunterliegende Rückantwortdokumente (über alle Hierarchien hinweg) ermittelt werden.

Mein aktuelles Script kann dato nur die Rückantworten der 1. Hierarchie ermitteln. Damit jetzt aber über alle Hierarchien durchgeschliffen werden kann, muss jede gefundene Rückantwort auf weitere Rückantworten geprüft werden?! Könnt Ihr mir vielleicht zeigen, wie ich mein u.s. Script anpassen müßte, damit es funktioniert?

Besten Dank!

Gruß, Basti07

Code

Sub GetAllResponses
	
	Dim Session As New NotesSession
	
	Dim workspace As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Dim responsedoc As NotesDocument
	Dim collection As NotesDocumentCollection
	Dim doc As NotesDocument	
	
	Set uidoc = workspace.CurrentDocument
	Set doc = uidoc.Document
	Set collection = doc.Responses
	Set responsedoc = collection.GetFirstDocument
	

	While Not (responsedoc Is Nothing) 
		
		If collection.Count > 0 Then
			
		      fldThema = responsedoc.A_Thema(0)
                                      Msgbox  "Gefundene Rückantwort mit Thema '" & fldThema & "'"

>>> Hier müsste jetzt weiter geprüft werden ob Rückantworten zur Rückantwort vorhanden sind... <<<

		Else
		      Messagebox "Nichts gefunden!"
		End If
		
		Set responsedoc = collection.GetNextDocument(responsedoc)

	Wend
End Sub

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Rückantworten auf Rückantworten...
« Antwort #1 am: 03.07.07 - 15:21:39 »
Das "Durchtackern" durch eine Antworthierarchie lässt sich wunderbar durch Rekursion lösen. Im Prinzip musst du deine Funktion dahingehend anpassen, dass sie das aktuelle Dokument als Parameter bekommt und an deiner Stelle sich selbst mit dem gefundenen Antwortdokument aufruft. Etwa so:

Code
Sub GetAllResponses(doc as NotesDocument)
.
.
.
While Not (responsedoc Is Nothing)

If collection.Count > 0 Then

      fldThema = responsedoc.A_Thema(0)
                                      Msgbox  "Gefundene Rückantwort mit Thema '" & fldThema & "'"

     Call GetAllResponses(responsedoc)

Else
      Messagebox "Nichts gefunden!"
End If

Set responsedoc = collection.GetNextDocument(responsedoc)

Wend

End Sub

Zusätzlich musst du dann die Beschaffung des Starts aus dieser Sub herausziehen, da du ja in der Sub schon das Dokument, nach dessen Antworten du suchst, als Parameter zur Verfügung hast.

Verständlich?
« Letzte Änderung: 03.07.07 - 20:01:15 von MadMetzger »

Offline Basti07

  • Frischling
  • *
  • Beiträge: 19
Re: Rückantworten auf Rückantworten...
« Antwort #2 am: 04.07.07 - 10:14:39 »
Also was Du mir mit Rekursion sagen wolltest hab ich kapiert.. "Wenn true, rufe die Sub mit bekanntem Parameter erneut auf"

Zitat
Zusätzlich musst du dann die Beschaffung des Starts aus dieser Sub herausziehen, da du ja in der Sub schon das Dokument, nach dessen Antworten du suchst, als Parameter zur Verfügung hast.

Was ich hier tun muss hab ich nicht kapiert. Ist mir aber klar das noch was fehlt, denn aktuell läuft mein Script in der Endlosschleife  :-\

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Rückantworten auf Rückantworten...
« Antwort #3 am: 04.07.07 - 10:56:41 »
Okay, die Beschaffung des Startdokuments musst du aus der Funktion herausziehen. Also etwa diese Zeilen:
Code
Dim Session As New NotesSession

Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim responsedoc As NotesDocument
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument

Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document

Mit dem letzten doc rufst du dann deine Funktion auf und fängst an mit der Beschaffung der Antwortdokumente und Iteration über diese. Sprich so beginnt dann die Funktion:
Code
Set collection = doc.Responses
Set responsedoc = collection.GetFirstDocument


While Not (responsedoc Is Nothing) 
Innerhalb der While-Schleife darfst du das Springen zum nächsten Dokument nicht vergessen.

Jetzt verständlicher?

Offline Basti07

  • Frischling
  • *
  • Beiträge: 19
Re: Rückantworten auf Rückantworten...
« Antwort #4 am: 04.07.07 - 15:06:53 »
So. Nach langem hin und her hab ichs jetzt glaub hinbekommen.

Danke nochmal für die Hilfe!!!

Folgende Routine funktioniert und geht durch alle Hierarchien:

Code
Sub SetRightsOnResponses(doc As NotesDocument)
	
	Dim Session As New NotesSession
	Dim Workspace As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Dim collection As NotesDocumentCollection
	Dim responsedoc As NotesDocument
	Dim tmp As NotesDocument
	
	Set uidoc = workspace.CurrentDocument
	Set collection = doc.Responses
	Set responsedoc = collection.GetFirstDocument
	
	While Not (responsedoc Is Nothing) 
		
		Set tmp = collection.GetNextDocument(responsedoc)
		
		fldThema = responsedoc.Thema(0)
		Msgbox  "Gefundene Rückantwort mit Thema '" & fldThema
		
		Call SetRightsOnResponses(responsedoc)
		Set responsedoc = tmp
		
	Wend
	
End Sub


Gibt es eine Möglichkeit die Selbe Routine Rückwärts laufen zu lassen, ausgehend im QuerySave von einer Rückantwort? Z.B. mit '... collection.GetPrevDocument' ?
So könnte dann z.B. von einer Rückantwort (die weit unten in der Hierarchie liegt) immer auf das sog. Hauptdokument zugegriffen werden. Bei den gefundenen Dokumenten wäre ja dann logischerweise das zuletzt gefundene Dokument das richtige.

Gruß, Basti07

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Rückantworten auf Rückantworten...
« Antwort #5 am: 04.07.07 - 19:15:57 »
Klar kannst du das auch rückwärts machen. Nur geht das ein wenig anders, als du es hier gemacht hast. Lies dir mal in der Designer-Hilfe den Eintrag zu NotesDocument und NotesDatabase durch. Dort sind die Methoden und Properties beschrieben, die du dafür brauchst.

Aus NotesDocument: ParentDocumentUniqueID (nicht auf exakten Namen festnageln, habe gerade keinen Client zur Verfügung) und evtl auch isResponse.

Aus NotesDatabase brauchst du GetDocumentByUniqueID(unid as String)

Mit der ParentDocumentUniqueID kannst du das zugehörige Elterndokument über GetDocumentByUniqueID in Zugriff als NotesDocument erlangen.

Ansonsten empfiehlt sich noch die Lektüre dieses Threads in den BestPractices.

Wenn du dann noch Fragen hast, hast du ja gesehen, wo du Hilfe zur Selbsthilfe bekommen kannst.  ;)

Offline Basti07

  • Frischling
  • *
  • Beiträge: 19
Re: Rückantworten auf Rückantworten...
« Antwort #6 am: 05.07.07 - 09:34:43 »
Ok dann danke einstweilen. Werde mich mal bei Gelegenheit dran machen und mir das im Detail anschauen.

Danke
Gruß, Basti07

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz