Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: MadMetzger am 26.04.06 - 11:24:12

Titel: Problem mit einer Function, keine Rückgabe ohne Debugger
Beitrag von: MadMetzger am 26.04.06 - 11:24:12
Hallo zusammen,

folgende Function liefert mir ohne Debugger nichts zurück, so dass mir bei Verwendung ein "Object Variable not set" um die Ohren gehauen wird. Jedoch lasse ich es mit Debugger laufen funktioniert die Funktion ohne Tadel... Das verstehe ich nicht ganz, warum sich die Funktion mit und ohne Debugger unterschiedlich verhält...

Code
Function getLocationDocument(locationName As String) As NotesDocument
	
	Dim session As NotesSession
	Dim names As NotesDatabase
	Dim auview As NotesView
	Dim au As NotesDocument
	Dim aucoll As NotesDocumentCollection
	
	Const NAME_VIEW_LOCATIONS$ = "Locations"
	
	Set session = New NotesSession
	Forall db In session.AddressBooks
		If db.Isprivateaddressbook Then
			Set names = db
			If Not names.IsOpen Then
				Call names.Open("","")
			End If
			Exit Forall
		End If
	End Forall
	
	Set auview = names.GetView(NAME_VIEW_LOCATIONS$)	
	Set aucoll = auview.GetAllDocumentsByKey(locationName,True)
	Set au = aucoll.GetFirstDocument
	Set getLocationDocument = au
	
End Function
Titel: Re: Problem mit einer Function, keine Rückgabe ohne Debugger
Beitrag von: Untitled am 26.04.06 - 11:29:43
Ich vermute mal, dass irgend eine Frontendklasse mit der Bearbeitung nicht fertig kommt, bevor deine Funktion bereits aufgerufen wird. Im Debugger lässt du ihr die Zeit die sie braucht (um sich vielleicht zu öffnen) und das Ganze funktioniert.

Kann es sowas sein?

Versuch mal mit MsgBoxen den Ablauf ein wenig zu bremsen und herauszufinden, wo es hakt.
Titel: Re: Problem mit einer Function, keine Rückgabe ohne Debugger
Beitrag von: MadMetzger am 26.04.06 - 12:12:38
Damit konnte ich leider nichts feststellen. Innerhalb der Funktion ist alles in Ordnung, nur kommt leider nichts heraus... Option Declare ist gesetzt, so dass ein Schreibfehler beim Rückgabewert schonmal ausgeschlossen ist.
Titel: Re: Problem mit einer Function, keine Rückgabe ohne Debugger
Beitrag von: umi am 26.04.06 - 12:29:13
Code
Forall db In session.AddressBooks
		If db.Isprivateaddressbook Then
			Set names = db
			If Not names.IsOpen Then
				Call names.Open("","")
			End If
			Exit Forall
		End If
	End Forall
Prüfe doch mal mit if db is nothing ob überhaupt ein DB Objekt gesetzt ist.
Titel: Re: Problem mit einer Function, keine Rückgabe ohne Debugger
Beitrag von: koehlerbv am 26.04.06 - 12:32:17
Du instantiierst innerhalb Deiner Function eine Datenbank und ziehst aus dieser ein Dokument. Das Dokument ist von der Datenbank vererbt.
Diese Datenbank ist aber dem aufrufenden Modul nicht bekannt - daher geht auch das vererbte NotesDocument verloren.
Da der Debugger für Dich diese Objekte "beobachtet", funktioniert die Vererbung dort, nicht aber in einer realen Laufzeitumgebung.

Bernhard
Titel: Re: Problem mit einer Function, keine Rückgabe ohne Debugger
Beitrag von: MadMetzger am 26.04.06 - 12:34:54
@umi: Es wird ein DB-Objekt ermittelt, ansonsten würde das Script auch schon vorher abstürzen.

Irgendwie ging mein Verdacht mittlerweile in die Richtung. Was kann ich dagegen tun?
Titel: Re: Problem mit einer Function, keine Rückgabe ohne Debugger
Beitrag von: koehlerbv am 26.04.06 - 12:40:20
Übergib der Function ein NotesDatabase-Objekt by reference, welches Du im aufrufenden Modul instantiierst. Damit ist names in beiden Modulen bekannt (und wird durch Deine Function belegt).

HTH,
Bernhard
Titel: Re: Problem mit einer Function, keine Rückgabe ohne Debugger
Beitrag von: MadMetzger am 26.04.06 - 12:59:02
Übergib der Function ein NotesDatabase-Objekt by reference, welches Du im aufrufenden Modul instantiierst. Damit ist names in beiden Modulen bekannt (und wird durch Deine Function belegt).

Genau damit hat es dann funktioniert. Vielen Dank für die Hilfe!
Titel: Re: Problem mit einer Function, keine Rückgabe ohne Debugger
Beitrag von: Worn am 03.05.07 - 12:49:53
Sorry das ich hier reinschreibe, das Teil is doch ein TIPP wert oder?
Mir hat es geholfen, habe genau das gesucht!

Super!

Danke

Grüße
Ben