Autor Thema: function ( [...] ) as Notesdocument "verliert" Dokument wenn per ServerConsole  (Gelesen 3873 mal)

Offline Frank_B

  • Senior Mitglied
  • ****
  • Beiträge: 275
  • Geschlecht: Männlich
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... :(

« Letzte Änderung: 28.04.17 - 09:12:31 von Frank_B »
Gruß Frank

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.873
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
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...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Frank_B

  • Senior Mitglied
  • ****
  • Beiträge: 275
  • Geschlecht: Männlich
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)
« Letzte Änderung: 27.04.17 - 14:52:31 von Frank_B »
Gruß Frank

Offline ghostmw

  • Aktives Mitglied
  • ***
  • Beiträge: 201
  • Geschlecht: Männlich
    • BELOS - Raum+Ressourcenmanagement unter Lotus Notes
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
Grüße
Marco Weller
Lotus Domino / Lotus Notes seit 1996 (ab 4.5x)

Offline Frank_B

  • Senior Mitglied
  • ****
  • Beiträge: 275
  • Geschlecht: Männlich
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)

   f_Search_h = "form = ""fmHierarchy"" & aktuell = ""1"" & stellenID = """ + f_StellenID + """ "

   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
« Letzte Änderung: 27.04.17 - 16:03:55 von Frank_B »
Gruß Frank

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.873
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
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.
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Frank_B

  • Senior Mitglied
  • ****
  • Beiträge: 275
  • Geschlecht: Männlich
OK,

aber wieso, Verständnissfrage, geht das dann über den DominoDesigner gestartet ?
Gruß Frank

Offline ghostmw

  • Aktives Mitglied
  • ***
  • Beiträge: 201
  • Geschlecht: Männlich
    • BELOS - Raum+Ressourcenmanagement unter Lotus Notes
... ich vermute, dass du dabei im Designer die Datenbank geöffnet hast, was du via Konsole ja nicht hast ;-)
Grüße
Marco Weller
Lotus Domino / Lotus Notes seit 1996 (ab 4.5x)

Offline Frank_B

  • Senior Mitglied
  • ****
  • Beiträge: 275
  • Geschlecht: Männlich
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 ?
« Letzte Änderung: 28.04.17 - 08:00:00 von Frank_B »
Gruß Frank

Offline ghostmw

  • Aktives Mitglied
  • ***
  • Beiträge: 201
  • Geschlecht: Männlich
    • BELOS - Raum+Ressourcenmanagement unter Lotus Notes
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 ;-)
Grüße
Marco Weller
Lotus Domino / Lotus Notes seit 1996 (ab 4.5x)

Offline Andrew Harder

  • Senior Mitglied
  • ****
  • Beiträge: 295
  • Geschlecht: Männlich
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
« Letzte Änderung: 28.04.17 - 08:34:54 von Andrew Harder »
Andy

Offline ghostmw

  • Aktives Mitglied
  • ***
  • Beiträge: 201
  • Geschlecht: Männlich
    • BELOS - Raum+Ressourcenmanagement unter Lotus Notes
Danke ... das hab ich übersehen
Grüße
Marco Weller
Lotus Domino / Lotus Notes seit 1996 (ab 4.5x)

Offline Frank_B

  • Senior Mitglied
  • ****
  • Beiträge: 275
  • Geschlecht: Männlich
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. :)

Vielen Dank an euch.
Gruß Frank

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz