Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: bikerboy am 10.05.10 - 10:55:18

Titel: Funktion gibt kein Dokument zurück
Beitrag von: bikerboy am 10.05.10 - 10:55:18
Code
%REM
	Function getTargetDoc
	Description: Comments for Function
%END REM
Function getTargetDoc(doc As NotesDocument) As NotesDocument
	
	Dim dbTarget As NotesDatabase	
	Dim docResult As NotesDocument
	
	'Zieldatenbank öffnen
	Set dbTarget = getTargetDB(doc)
	
	If Not dbTarget Is Nothing Then
		'Zieldokument öffnen
		Set getTargetDoc = dbTarget.Getdocumentbyunid(CStr(doc.Getitemvalue(FLDTARGETUNID)(0)))		
	End If
	
End Function

Ich weiss das ich die Problemlösung hier mal gesehen habe, aber die Suche zeigt es mir nicht.

Nun zum Problem. die Funktion gibt mir kein Dokument zurück, obwohl Sie Sie zum Exit Function hin ein Dokument im Zugriff hat, also getTargetDoc gesetzt ist.
Titel: Re: Funktion gibt kein Dokument zurück
Beitrag von: ascabg am 10.05.10 - 11:04:35
Hallo,

Weil dbTarget hier in dieser Funktion definiert wird.
Und das Dokument in dieser Db eingestellt wird.

Wird dbTarget durch verlassen der Funktion "vernichtet" folgen dem auch alle von dieser Instanz der Db initiierten Objekte.

Schlagwort: Garbage Collector


Andreas
Titel: Re: Funktion gibt kein Dokument zurück
Beitrag von: koehlerbv am 10.05.10 - 11:04:35
Das NotesDocument in der Function hat nur innerhalb der Function einen "Vater" (NotesDatabase), ausserhalb der Function ist dieser Bezug verloren gegangen - NotesDocument haucht damit sein Leben aus.

Du musst der Function daher auch die NotesDatabase übergeben, die ausserhalb der Function bekannt ist.

Bernhard
Titel: Re: Funktion gibt kein Dokument zurück
Beitrag von: Peter Klett am 10.05.10 - 11:06:52
in solchen Fällen definiere ich die Datenbank (hier dbTarget) entweder global oder übergebe sie als Parameter an die Function

Function getTargetDoc(dbTarget As NotesDatabase, doc As NotesDocument) As NotesDocument

Anscheinend wird der Verweis auf das Dokument mit der Datenbank aus dem Speicher gelöscht, habe das Problem jedenfalls auch schon gehabt, ohne eine Logik darin zu erkennen.
Titel: Re: Funktion gibt kein Dokument zurück
Beitrag von: bikerboy am 10.05.10 - 11:10:19
okay,

also eigentlich alles richtig gemacht, aber durch die NotesLogik eben doch falsch.
Titel: Re: Funktion gibt kein Dokument zurück
Beitrag von: koehlerbv am 10.05.10 - 11:11:46
An der "Noteslogik" liegt das aber nicht  ;)

Bernhard
Titel: Re: Funktion gibt kein Dokument zurück
Beitrag von: MadMetzger am 10.05.10 - 11:16:16
Hier (http://atnotes.de/index.php/topic,46372.0.html) hatten wir schon mal eine ähnliche Diskussion, wo es um "verschwindende" Dokumentreferenzen geht. Da ist auch ein Link mit weiterführenden Informationen. In einem anderen Thread hatte ich auch schon mal das Problem, finde den aber nicht mehr wieder.
Titel: Re: Funktion gibt kein Dokument zurück
Beitrag von: BigWim am 10.05.10 - 11:24:18
Ich hatte auch mal eine (für mich sehr lehrreiche) Diskussion über Gültigkeit von Variablen (http://atnotes.de/index.php/topic,44537.msg286343.html#msg286343) angezettelt.

Markus
Titel: Re: Funktion gibt kein Dokument zurück
Beitrag von: Kadlec am 10.05.10 - 12:09:49
Ich hatte letzte Woche das gleiche Problem mit einer view.
Über einen Beitrag hier wurde ich dann ins IBM Forum geleitet, weiss jetzt nicht mehr was dort genau fehlte.
Die Lösung war Static Function GetCatNoSynchView.

Boris
Titel: Re: Funktion gibt kein Dokument zurück
Beitrag von: bikerboy am 10.05.10 - 12:29:50
So habe die Funktion wie vorgeschlagen geändert also

Code
Function getTargetDoc(dbTarget as NotesDatabase, doc As NotesDocument) As NotesDocument
, damit läuft auch alles wie gewünscht.

Habe die anderen Threads auch gelesem.

Danköööööööööö (ist ja bald WM)