Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: Frank_B am 27.04.17 - 14:37:00
Titel: function ( [...] ) as Notesdocument "verliert" Dokument wenn per ServerConsole
Beitrag von: Frank_B am 27.04.17 - 14:37:00
Ich habe in einer Scriptbibliothek eine Funktion à la: function ( [...] ) as Notesdocument
Die funktioniert auch wunderbar wenn ich meinen "Script-Agenten" (welcher die Funktion aufruft) im Domino Designer starte.
Wenn ich den Agenten allerdings über die Server-Konsole aufrufe, dann läuft zwar die Funktion inhaltlich korrekt. Das kann ich mit "print's" nachvollziehen, jedoch die Funktion selber liefert mir leider das gewünschte NotesDokument nicht.
Als wenn die Funktion selber das Notes-Dokument "verliert" im Script-Agenten.
hat jemand einen Tipp. So ein Verhalten hatte ich noch nie... :(
Titel: Re: function ( [...] ) as Notesdocument "verliert" Dokument wenn per ServerConsole
Beitrag von: Tode am 27.04.17 - 14:40:34
Wo wird die Datenbank definiert, aus der das Dokument kommt? Wenn die nur lokal innerhalb der function existiert, dann kannst Du das Document nicht rausgeben...
Titel: Re: function ( [...] ) as Notesdocument "verliert" Dokument wenn per ServerConsole
Beitrag von: Frank_B am 27.04.17 - 14:49:22
Die Datenbank hat ein Profildokument, in welchem ein Server mit einer anderen Datenbank hinterlegt ist, auf welche Ich per Funktion zugreife und darin das Dokument suche:
"GetDoc_StellenID" ist der Name der Funktion "f_pdoc" ist mein Profildokument "f_doc_ma" soll mein gefundenes Dokument dann sein "stellenID" ist das Schlüsselwort zur Suche
GetDoc_StellenID(SERVERNAME, DATEINAME, SUCHBEGRIFF) as notesdocument
Die Funktion baut eine Collection an Dokumenten und liefert mir normalerweise nur eins zurück. :)
Wird so aufgerufen:
Set f_doc_ma = GetDoc_StellenID(f_pdoc.Srv(0), f_pdoc.Srv_Datei(0), stellenID)
Titel: Re: function ( [...] ) as Notesdocument "verliert" Dokument wenn per ServerConsole
Beitrag von: ghostmw am 27.04.17 - 14:59:26
Hi Frank,
schick doch einfach kurz den Code rum ... dann können wir das auch besser erläutern.
Ich bin aber auch der Meinung von Torsten, dass dein Problem mit dem Focus der Datenbank-Variablen zusammen hängt. Ist die Datenbank lokal in der aufgerufenen Funktion deklariert, ist dein Notesdokument außerhalb nothing, weil das Datenbank-Objekt gelöscht wird nach Verlassen der Funktion.
Zwischen Datenbank und Notesdokument (bzw. View dazwischen oder ähnliches) besteht eine Eltern-Kind-Beziehung, ist der Elternteil weg ist auch das Kind weg.
Gruß Marco
Titel: Re: function ( [...] ) as Notesdocument "verliert" Dokument wenn per ServerConsole
Beitrag von: Frank_B am 27.04.17 - 15:29:43
Aufruf im DominoDesigner, dann geht es, über die ServerConsole wird leider kein Dokument zurück geliefert Das ist doch das seltsame !
Function GetDoc_fmHierarchy_stellenID(f_Server, f_db As String, f_stellenID As String) As NotesDocument On Error GoTo fehler
Dim f_session_h As New NotesSession Dim f_db_h As NotesDatabase Dim f_col_h As NotesDocumentCollection Dim f_search_h As String
Set f_db_h = f_session_h.GetDatabase(f_Server,f_db)
Set f_col_h = f_db_h.Search(f_Search_h, nothing, 0)
If f_col_h.count > 0 Then Set GetDoc_fmHierarchy_stellenID = f_col_h.getfirstdocument Else Set GetDoc_fmHierarchy_stellenID = Nothing End If
Exit Function
fehler: Print "Fehler in 'GetDoc_fmHierarchy_stellenID' Zeile " & erl
End Function
Titel: Re: function ( [...] ) as Notesdocument "verliert" Dokument wenn per ServerConsole
Beitrag von: Tode am 27.04.17 - 16:10:18
Das ist genau das was ich gemeint habe: f_db_h ist eine lokale Variable, die out of scope geht, sobald Du die Funktion verlässt, damit ist auch das von ihr abgeleitete Dokument weg...
Du musst die DB übergeben oder global deklarieren, anders geht das nicht.
Titel: Re: function ( [...] ) as Notesdocument "verliert" Dokument wenn per ServerConsole
Beitrag von: Frank_B am 27.04.17 - 16:13:24
OK,
aber wieso, Verständnissfrage, geht das dann über den DominoDesigner gestartet ?
Titel: Re: function ( [...] ) as Notesdocument "verliert" Dokument wenn per ServerConsole
Beitrag von: ghostmw am 27.04.17 - 16:35:01
... ich vermute, dass du dabei im Designer die Datenbank geöffnet hast, was du via Konsole ja nicht hast ;-)
Titel: Re: function ( [...] ) as Notesdocument "verliert" Dokument wenn per ServerConsole
Beitrag von: Frank_B am 28.04.17 - 07:47:29
Vielen Dank für die Hinweise/Tipps...
Das ich da im Script, bevor ich die Funktion aufrufe, folgendes vorneweg habe, "hilft" also dem Anwender, da er die Datenbank dann offen hat ?
If Not f_db.open(f_pdoc.Srv(0),f_pdoc.Srv_Datei(0)) Then f_fehler_msg = "Die Datenbank konnte nicht geöffnet werden." GoTo fehler Exit function End If
Der Server kann damit nichts anfangen ?
Titel: Re: function ( [...] ) as Notesdocument "verliert" Dokument wenn per ServerConsole
Beitrag von: ghostmw am 28.04.17 - 08:30:12
Damit öffnest du die Datenbank aber nicht im Frontend, das hatte ich gemeint.
Wenn du außerhalb der Funktion eine Variable setzt, so wie z.B.
set dbMe = session.getDatabase ( "SERVER", "DATENBANK" )
if dbMe.isOpen = false then f_fehler_msg = "Die Datenbank konnte nicht geöffnet werden." GoTo fehler Exit function end if
Set f_doc_ma = GetDoc_StellenID(dbMe, stellenID)
...
dann sollte das klappen ;-)
Titel: Re: function ( [...] ) as Notesdocument "verliert" Dokument wenn per ServerConsole
Beitrag von: Andrew Harder am 28.04.17 - 08:33:22
Dann hast Du in f_db ja schon die db drinne, Du musst Sie einfach noch übergeben...
Code
Function GetDoc_fmHierarchy_stellenID(f_db_h as NotesDatabase, f_stellenID As String) As NotesDocument
Titel: Re: function ( [...] ) as Notesdocument "verliert" Dokument wenn per ServerConsole
Beitrag von: ghostmw am 28.04.17 - 08:42:37
Danke ... das hab ich übersehen
Titel: Re: function ( [...] ) as Notesdocument "verliert" Dokument wenn per ServerConsole
Beitrag von: Frank_B am 28.04.17 - 09:08:51
Dieses "out of scope" war mir nicht so bewusst.
Meine Bibliothek ist nicht so ausgelegt, dass die serverseitig rennt. Da muss ich umschreiben.
Jetzt klappt es. Eigentlich logisch, wenn man es mal verstanden hat. :)