Autor Thema: NotesDoc als Rückgabewert eine Funktion  (Gelesen 4365 mal)

Offline tabama

  • Aktives Mitglied
  • ***
  • Beiträge: 233
  • Geschlecht: Männlich
  • hier werden Sie geholfen
NotesDoc als Rückgabewert eine Funktion
« 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??? ???

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:NotesDoc als Rückgabewert eine Funktion
« Antwort #1 am: 21.08.03 - 11:02:48 »
Wie wär's mit ein wenig Code ?

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:NotesDoc als Rückgabewert eine Funktion
« Antwort #2 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

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re: NotesDoc als Rückgabewert eine Funktion
« Antwort #3 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

Driri

  • Gast
Re: NotesDoc als Rückgabewert eine Funktion
« Antwort #4 am: 25.01.05 - 13:26:30 »
Ist dir gerade langweilig oder warum antwortest Du auf nen mehr als 1 Jahre alten Thread ?  ;D

Glombi

  • Gast
Re: NotesDoc als Rückgabewert eine Funktion
« Antwort #5 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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: NotesDoc als Rückgabewert eine Funktion
« Antwort #6 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

Glombi

  • Gast
Re: NotesDoc als Rückgabewert eine Funktion
« Antwort #7 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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: NotesDoc als Rückgabewert eine Funktion
« Antwort #8 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

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re: NotesDoc als Rückgabewert eine Funktion
« Antwort #9 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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: NotesDoc als Rückgabewert eine Funktion
« Antwort #10 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

DatenDuck

  • Gast
Re: NotesDoc als Rückgabewert eine Funktion
« Antwort #11 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 ***
« Letzte Änderung: 20.12.05 - 09:04:33 von DatenDuck »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz