Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: tabama am 14.08.03 - 14:53:06
-
Hallo,
ich will mir aus einer Funktion ein NotesDocument als Rückgabewert übergeben lassen.
Die Funktion arbeitet auch richtig und ermittelt das von mir gewünschte Dokument.
Doch in der aufrufenden Procedur steht der Rückgabewert nicht zur Verfügung.
Ändere ich die Funktion und lasse mir einen String zurückgeben, funktioniert dies.
Lt. Handbuch kann eine Funktion aber auch Produktklassen zurückgeben.
Woran kann's liegen??? ???
-
Wie wär's mit ein wenig Code ?
-
Klopf, klopf, klopf ...
Problem erledigt ? Lösung selbst gefunden ? Sollen wir uns noch kümmern ? Dann brauchen wir aber ein Beispiel, welcher Code denn nun nicht das tut, was er tun soll (und NotesDocument als Rückgabewert ist nun mehr als üblich, ergo machbar).
Bernhard
-
Dann springe ich mal ein, dieser Code ermittelt ein Doc
und soll dies zurückgeben.
In diesem Code bleibt lastdoc leer !
Dim s As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument, pdoc As NotesDocument
Dim lastdoc As NotesDocument
Dim meinMailFile As String
Dim meinName As NotesName
Set meinName = s.CreateName(s.UserName)
meinMailfile = getMailFile(meinName)
Set lastdoc = getFirstMail( meinMailFile)
FUNKTION:
Function getLastMail(meineDB As String) As NotesDocument
Dim s As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument, pdoc As NotesDocument
Set db = s.database
Set dc = db.AllDocuments
Set doc = dc.GetLastDocument
While Not(doc Is Nothing)
If doc.HasItem("XYZ") Then
If doc.GetItemValue("XYZ")(0) = "Form" Then
Set pdoc = doc End If
End If
Set doc = dc.GetNextDocument(doc)
Wend
Set getLastMail = pdoc
End Function
-
Ist dir gerade langweilig oder warum antwortest Du auf nen mehr als 1 Jahre alten Thread ? ;D
-
Wenn die Function in einer Script Library ist, geht es mit dem Rückgabewert NotesDocument nicht immer. Das sind jedenfalls meine Erfahrungen.
Andreas
-
Ich habe - ausser erklärliche Fälle - noch niemals Probleme damit gehabt. Und in ScriptLibs stecken eigentliche so gut wie alle functions von mir.
Was auf jeden Fall aber nicht geht, ist die Rückgabe eines NotesDocuments aus einer anderen DB, wenn der aufrufenden Routine nicht das Parent object (die NotesDatabase) bekannt ist - dann geht jeder Zusammenhang verloren.
Nicht geht:
Function GetDocument As NotesDocument
Dim AndereDatenbank as NotesDatabase
....
Was aber geht:
Function GetDocument (AndereDatenbank As NotesDatabase) As NotesDatabase
Das der vom Don gepostete Code ggf. kein NotesDocument zurückliefert, kann ja auch ganz andere Ursachen haben. Da wird das LETZTE Dokument einer Collection genommen und auf ein Item geprüft. Ist das da, wird ein Document zurückgegeben. Wenn nicht, dann eben nicht.
Unklar ist mir auch, warum versucht wird, vom letzten Document der Collection aus noch durch diese zu loopen - nach dem Ding ist ja sowieso Ende Gelände.
Bernhard
-
Ich hatte des öfteren den Fall, dass - obwohl in der Funktion das NotesDocument da war (wie der Debugger gezeigt hatte) - in der aufrufenden Sub dann nach
set doc = meinefunction
das doc nicht da war.
meinefunction ist eine Function in einer Script Library.
Woran es genau liegt, kann ich nicht sagen. Es spielt jedenfalls auch eine Rolle, welchen Scope doc hat d.h. wo es deklariert ist.
Beim nächsten Mal werde ich es mal genauer untersuchen.
Andreas
-
Ich arbeite Massiv mit Functions, die NotesDocument zurückliefern. Ein Problem hatte ich, wie gesagt, noch nie.
Wenn das Problem wieder mal auftritt: Schau nach dem ParentObject. Ich schätze, da tritt der Verlust auf.
Bernhard
-
@driri:
Wenn ich wirklich nur alte Threads reanimieren wollte, dann hätte ich
richtig alte Threads genommen ;-)
Was auf jeden Fall aber nicht geht, ist die Rückgabe eines NotesDocuments aus einer anderen DB, wenn der aufrufenden Routine nicht das Parent object (die NotesDatabase) bekannt ist - dann geht jeder Zusammenhang verloren.
Nicht geht:
Function GetDocument As NotesDocument
Dim AndereDatenbank as NotesDatabase
....
Was aber geht:
Function GetDocument (AndereDatenbank As NotesDatabase) As NotesDatabase
OK, dieser Fall trifft bei mir zu.
Ich beschrieb bereits, die Function hat ein gültiges Dokument gefunden,
es wird aber nicht übergeben. Klaro, es ist ja auch aus einer anderen DB.
Dennoch werde ich aus der oben genannten Function nicht ganz schlau.
Ich werd wohl noch a weng probieren müssen
Ciao
Don Pasquale
-
Woraus wirst Du nicht schlau ?
Dein Problem bist Du auf jeden Fall los, wenn Du
- die andere DB im aufrufenden Modul instantiierst und an die Function mit übergibst
oder
- Du die andere DB zentral (für beide Module verfügbar) deklarierst. Dann ist auch der Ort der Instantiierung nicht mehr wichtig (aber der Code wird unübersichtlicher).
HTH,
Bernhard
-
Ist das ParentObject in jedem Fall immer die Datenbank oder müssen auch Collections aus denen ein Dokument geholt wurde, besonders beachtet werden?
Ich hänge momentan ebenfalls an so einem "Dokumentverlust". Damit dass nicht wieder auftritt will ich sichergehen, dass ich keine anderen Objekte irgendwo "vergesse" und dadurch mein NotesDokument nochmal flöten geht.
*** NACHTRAG: Hat sich erledigt... Die DC ist vernachlässigbar ***