Autor Thema: Aktuelle Datenbank  (Gelesen 2279 mal)

Jürgen Schomann

  • Gast
Aktuelle Datenbank
« am: 19.09.08 - 12:13:24 »
Ich öffne eine Datenbank und arbeite folgenden LotusScript ab

Dim ws As NotesUIWorkspace
Dim session As NotesSession
Dim db As NotesDatabase
Set session = New NotesSession
Set db = session.CurrentDatabase
Msgbox db.Title
Set ws = New NotesUIWorkspace
Call ws.OpenDatabase(<Server>, <Datenbank>, <Ansicht>, "", True)
Call ws.GetCurrentDatabase.Close
Set session = New NotesSession
Set db = session.CurrentDatabase
Msgbox db.Title

Ich erhalte aber nicht wie erwatet jedesmal das gleiche Datenbankobjekt sondern zuerst die aktuelle Datenbank, in der der Script gestartet wurde und nach dem Öffnen der anderen Datenbank, diese als aktuelle Datenbank. Laut Designer Hilfe soll session.Currentdatabase aber immer die Datenbank liefern in der der Script liegt.

CurrentDatabase property
Read-only. The database in which the current script resides. This database may or may not be open.

Das Problem ist außerdem, dass die andere geöffnete Datenbank nicht geschlossen wird und damit das zugehörige Fenster noch aktiv obwohl die Anweisung Call ws.GetCurrentDatabase.Close schon durchlaufen wurde. Das Fenster wird erst am Ende des gesamten Scripts geschlossen.

Kann mir jemand hierzu etwas sagen.

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Aktuelle Datenbank
« Antwort #1 am: 19.09.08 - 12:22:06 »
Das Problem ist außerdem, dass die andere geöffnete Datenbank nicht geschlossen wird und damit das zugehörige Fenster noch aktiv obwohl die Anweisung Call ws.GetCurrentDatabase.Close schon durchlaufen wurde. Das Fenster wird erst am Ende des gesamten Scripts geschlossen.

Kann mir jemand hierzu etwas sagen.
Das ist genau das Problem von diesen "effizienten" aufrufen wie
Code
Call ws.GetCurrentDatabase.Close
Du weißt nie, ob "ws.GetCurrentDatabase" überhaupt gesetzt ist. Die 6er Designer-Hilfe meint nämlich:
Zitat
GetCurrentDatabase gets the current database. This method supersedes the CurrentDatabase property, which fails under some circumstances but cannot be fixed for reasons of backward compatibility.
Alles klar?

Zu Deinem anderen Problem:
Wenn die mit
Code
Call ws.OpenDatabase(<Server>, <Datenbank>, <Ansicht>, "", True)
aufgemachte DB nicht zugemacht wird, ist für mich klar, dass session.CurrentDatabase was anderes zurück gibt, auch wenn die Designer-Hilfe da etwas anderes sagt. Ich würde jetzt mal so locker ein Bierchen drauf verwetten, dass es wie erwartet funktioniert, wenn der Close call auf die Datenbank funktionieren würde.
« Letzte Änderung: 19.09.08 - 12:25:24 von m3 »
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Jürgen Schomann

  • Gast
Re: Aktuelle Datenbank
« Antwort #2 am: 19.09.08 - 12:54:05 »
Vielen Dank für die Antwort.
Ich habe das Problem in dem kleinen Script auf einen kleinen Umfang reduziert. In der echten Umgebung prüfe ich natürlich die Zuweisung der Objekte auf Nothing.
Ich habe aber den Test mit Prüfung ws.GetCurrentDatabase auf Nothing wiederholt, es ist nicht Nothing und der Effekt bleibt der selbe.
Das session.CurrentDatabase immer die aktuelle Datenbank liefert, also auch die gerade geöffnete habe ich erkannt. Aber was könnte man machen um über Script das Fenster zu schließen, damit man wieder die ursprüngliche Datenbank hat?
In Forlmelsprache gibt es ja @Command([FileCloseWindow]).

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Re: Aktuelle Datenbank
« Antwort #3 am: 19.09.08 - 12:58:40 »
Wo wird denn der LotusScript-Code ausgeführt?
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Jürgen Schomann

  • Gast
Re: Aktuelle Datenbank
« Antwort #4 am: 19.09.08 - 13:23:15 »
In der aktuell geöffneten Datenbank.

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Re: Aktuelle Datenbank
« Antwort #5 am: 19.09.08 - 13:43:41 »
Ist das ein Agent, eine Maske oder ein Datenbankereignis?
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Jürgen Schomann

  • Gast
Re: Aktuelle Datenbank
« Antwort #6 am: 19.09.08 - 14:42:59 »
In dem Test rufe ich einen Agent auf.
Ich habe inzwischen weiter probiert und folgender Code klappt. Indem ich dann wieder die ursprüngliche Datenbank über den Workspace öffne.

Dim ws As NotesUIWorkspace
Dim uidb As NotesUIDatabase
Dim uiview As NotesUIView
Dim session As NotesSession
Dim db As NotesDatabase
Set session = New NotesSession
Set db = session.CurrentDatabase
Msgbox db.Title
Set ws = New NotesUIWorkspace
Set uiview = ws.CurrentView
Call ws.OpenDatabase("<Server>", "<Datenbank>", "<Ansicht>", "", True)
Set uidb = ws.GetCurrentDatabase
If Not (uidb Is Nothing) Then Call uidb.Close
Call ws.OpenDatabase(db.Server, db.FilePath, uiview.View.Name, "", True)
Call uiview.Close
Set session = New NotesSession
Set db = session.CurrentDatabase
Msgbox db.Title
Exit Sub

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz