Autor Thema: NotesDocumentCollection as Rückgabewert nicht möglich?  (Gelesen 4398 mal)

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Liebe Kolleginnen und Kollegen,

kann mir bitte jemand erklären, warum die von der Funktion zurückgelieferte NOtesDocument Collection immer leer ist?
Ich steh derzeit auf der Leitung.  ???


Code
Option Public
Option Declare



Sub Initialize()
	Dim dc As NotesDocumentCollection
	Set dc = getCol()
	If( dc Is Nothing) Then
		MsgBox "NotesDocumentCollection ist NOTHING"
	Else
		MsgBox CStr(dc.Count) & " Einträge gefunden"
	End If
	
End Sub


Private Function getCol () As NotesDocumentCollection
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim view As NotesView
	Dim dc2 As NotesDocumentCollection
	
	Set db = New NotesDatabase("", "names.nsf")
	If( Not db.IsOpen ) Then
		Call db.Open("","")
	End If
	Set view = db.GetView("($People)")
	Set dc2 = view.Getalldocumentsbykey("", False)
	Print "Found in Function getCol: " & CStr( dc2.Count ) & "<"
	Set getCol  = dc2
End Function
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: NotesDocumentCollection as Rückgabewert nicht möglich?
« Antwort #1 am: 17.11.09 - 12:03:18 »
Deine NotesDocumentCollection basiert ja auf NotesDatabase - die ist aber private in Deiner Funktion. Du musst also die NotesDatabase für Deine NotesDocumentCollection bereits der Function übergeben.

Bernhard

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: NotesDocumentCollection as Rückgabewert nicht möglich?
« Antwort #2 am: 17.11.09 - 12:12:13 »
Ja weil sonst schlägt der Garbage Collector von Lotus Script zu.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: NotesDocumentCollection as Rückgabewert nicht möglich?
« Antwort #3 am: 17.11.09 - 12:30:41 »
Hallo,

Und wenn er die Collection, die zurueckgegeben werden soll nicht als Rueckgabewert liefert, sondern die zu fuellende Collection als Parameter an die entsprechende Funktion/Prozedur uebergibt.

Parameter werden doch, wenn nichts anderes angegeben wird mittels "ByRef" uebergeben.

Code
Sub Main
  Dim col As NotesDocumentCollection

  Call GetDocuments(col)
End Sub

Sub GetDocuments(colGet As NotesDocumentCollection)
  Dim ses As New NotesSession
  Dim db As NotesDatabase
  Dim vw As NotesView
	
  Set db = ses.CurrentDatabase
  If db.IsOpen Then
    Set vw = db.GetView("Name")
    If Not vw Is Nothing Then
      Set colGet = vw.GetAllDocumentsByKey("Key", True)
    End If
  End If
End Sub

In dem Fall sollte bei Main die Collection nach erfolgreichem Aufruf der Prozedur GetDocuments doch noch vorhanden sein.


Andreas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: NotesDocumentCollection as Rückgabewert nicht möglich?
« Antwort #4 am: 17.11.09 - 12:34:24 »
Da ist aber auch die Garbage Collection davor, Andreas. Das Objekt NotesDatabase muss bereits in der aufrufenden Routine definiert werden.

Bernhard

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: NotesDocumentCollection as Rückgabewert nicht möglich?
« Antwort #5 am: 17.11.09 - 12:44:41 »
@Bernhard

Also der oben abgebildete Code funktioniert bei mir auf einem 7er-Client immer noch ohne Probleme.
Mit einem 8er-Client kann ich es aktuell nicht testen, da ich keinen im Zugriff habe.

In der aufrufenden Prozedur habe ich immer noch (mein Beispielcode) col.Count = 6 stehen und kann die Collection auch mit einer For ... Next Schleife durchlaufen und die Dokumente verwenden.

Daher auch meine Frage, ob man es nicht doch so machen kann.


Andreas
« Letzte Änderung: 17.11.09 - 12:47:02 von ascabg »

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: NotesDocumentCollection as Rückgabewert nicht möglich?
« Antwort #6 am: 17.11.09 - 12:53:44 »
obiger Code funktioniert deswegen, weil du auf  "set db = ses.CurrentDatabase" zugreifst und die aktuelle Datenbank von der GBC nicht entfernt wird.
Wenn du eine andere DB mit "set db = new NotesDatabase(server,file)" öffnest, so wird diese am Ende deiner Methode durch die GBC entfernt/geschlossen und alle Objekte (Dokumente/Views/...) welche aus dieser DB abgeleitet wurden, "sterben" mit

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: NotesDocumentCollection as Rückgabewert nicht möglich?
« Antwort #7 am: 17.11.09 - 12:56:33 »
Ok. Stimmt.


Andreas

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: NotesDocumentCollection as Rückgabewert nicht möglich?
« Antwort #8 am: 17.11.09 - 13:17:17 »
Deine NotesDocumentCollection basiert ja auf NotesDatabase - die ist aber private in Deiner Funktion. Du musst also die NotesDatabase für Deine NotesDocumentCollection bereits der Function übergeben.
Grandios. Danke Bernhard.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: NotesDocumentCollection as Rückgabewert nicht möglich?
« Antwort #9 am: 17.11.09 - 13:20:56 »
Immer gerne. Du kannst mir ja am Sonnabend-, Sonntag- oder Montagabend in Wien ein Krügerl ausgeben  ;)

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz