Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: tabama am 14.08.03 - 14:53:06

Titel: NotesDoc als Rückgabewert eine Funktion
Beitrag 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??? ???
Titel: Re:NotesDoc als Rückgabewert eine Funktion
Beitrag von: koehlerbv am 21.08.03 - 11:02:48
Wie wär's mit ein wenig Code ?
Titel: Re:NotesDoc als Rückgabewert eine Funktion
Beitrag von: koehlerbv am 29.08.03 - 17:06:30
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
Titel: Re: NotesDoc als Rückgabewert eine Funktion
Beitrag von: Don Pasquale am 25.01.05 - 13:25:12
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
Titel: Re: NotesDoc als Rückgabewert eine Funktion
Beitrag von: Driri am 25.01.05 - 13:26:30
Ist dir gerade langweilig oder warum antwortest Du auf nen mehr als 1 Jahre alten Thread ?  ;D
Titel: Re: NotesDoc als Rückgabewert eine Funktion
Beitrag von: Glombi am 25.01.05 - 13:31:55
Wenn die Function in einer Script Library ist, geht es mit dem Rückgabewert NotesDocument nicht immer. Das sind jedenfalls meine Erfahrungen.

Andreas
Titel: Re: NotesDoc als Rückgabewert eine Funktion
Beitrag von: koehlerbv am 25.01.05 - 13:38:01
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
Titel: Re: NotesDoc als Rückgabewert eine Funktion
Beitrag von: Glombi am 25.01.05 - 13:45:32
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
Titel: Re: NotesDoc als Rückgabewert eine Funktion
Beitrag von: koehlerbv am 25.01.05 - 14:18:26
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
Titel: Re: NotesDoc als Rückgabewert eine Funktion
Beitrag von: Don Pasquale am 25.01.05 - 14:19:29
@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
Titel: Re: NotesDoc als Rückgabewert eine Funktion
Beitrag von: koehlerbv am 25.01.05 - 14:22:34
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
Titel: Re: NotesDoc als Rückgabewert eine Funktion
Beitrag von: DatenDuck am 19.12.05 - 11:43:49
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 ***