Domino 9 und frühere Versionen > ND6: Entwicklung

Aktuelle Datenbank

(1/2) > >>

Jürgen Schomann:
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.

m3:

--- Zitat von: Jürgen Schomann am 19.09.08 - 12:13:24 ---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.

--- Ende Zitat ---
Das ist genau das Problem von diesen "effizienten" aufrufen wie

--- Code: ---Call ws.GetCurrentDatabase.Close
--- Ende Code ---
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.
--- Ende Zitat ---
Alles klar?

Zu Deinem anderen Problem:
Wenn die mit

--- Code: ---Call ws.OpenDatabase(<Server>, <Datenbank>, <Ansicht>, "", True)
--- Ende Code ---
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.

Jürgen Schomann:
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]).

jBubbleBoy:
Wo wird denn der LotusScript-Code ausgeführt?

Jürgen Schomann:
In der aktuell geöffneten Datenbank.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln