Lotus Notes / Domino Sonstiges > OLE/COM-Programmierung
OpenOffice Anbindung an Lotus Notes per OLE
ata:
... hat mir keine Ruhe gelassen - ich habe etwas herumprobiert, und mein Verdacht ist, daß OpenOffice hier bei der Einbindung der OLE/COM-Schnittstelle nicht ganz sauber implementiert hat. Der Verdacht begründet sich darauf, daß OO beim Initialisieren mit session.Initialize die Länge der Argumente bemängelt - laut Spezifizierung aber gar nicht notwendig. In meinem Beispiel arbeite ich mit einem leeren Passwort - das wird angenommen - zumindest geht Lotus Notes damit im Frontend auf. Probiert habe ich mit Windows XP ...
Der folgende Code in OpenOffice bringt die Fehlermeldung, daß ein Initialize fehlschlägt, der bei dir im Code gefehlt hat, aber notwendig ist. Die Session erscheint im Frontend, der Debugger bleibt aber beim session.Initialize("") stehen, mit dem Hinweis, daß er nicht initialisieren kann: Basic-Laufzeitfehler, Object-Variable ist nicht belegt
sub open_LN()
dim service as object
dim session as object
dim db As object
service = createUnoService("com.sun.star.bridge.oleautomation.Factory")
session = service.createInstance("Lotus.NotesSession")
session.Initialize("")
db = session.GetDatabase("" ,"names.nsf")
MsgBox( "Das lokale Adressbuch heißt => " & db.Title )
end sub
Ein Versuch es mit "Lotus.NotesSession.7.0" und anderen Möglichkeiten schlug ebenso fehl.
Der Leerstring im Initialize steht für ein Passwort, falls es bei der Anmeldung in Notes erforderlich wäre. Laut Spezifizierung braucht man auch keines einzugeben. Für den Fall, daß es erforderlich wäre, würde dann danach gefragt werden.
Eine Initialisierung mit session.InitializeUsingNotesUserName (username, password) wird speziell für den Zugriff auf einen Server benötigt - der klappt bei lokalem Zugriff nicht...
Der für Excel oder Word angepasste Code funktioniert hervoragend:
sub open_LN()
Dim session as Variant
Dim db As Variant
Set session = GetObject("Lotus.NotesSession")
Call session.Initialize("")
Set db = session.GetDatabase("" ,"names.nsf")
MsgBox( "Das lokale Adressbuch heißt => " & db.Title )
end sub
Achtung:
Im Taskmanager verbleiben pro Versuch nlnotes.exe-Tasks, die wieder abgeschossen werden müssen, wenn sie wie in meinen Beispielen nicht wieder bereinigt wurden, und ...
--- Zitat ---"Notes.NotesUIWorkspace" brachte keinen Erfolg
--- Ende Zitat ---
... klappt mit OLE/COM-Schnittstelle nie, da keine Frontend-Klassen unterstützt werden...
Das wärs erst mal für's erste... ::)
Toni
mibo11:
Hallo Toni,
dass die OLE/COM Schnittstelle nicht ganz sauber implementiert ist, möchte ich noch mit einem Beispiel unterlegen. Nachfolgender Code in OpenOffice ausgeführt liefert über hasProperty oApp.hasProperty("UserName") = True, oApp.hasProperty("Hier bewusst einen faschen Wert angegeben") = False zurück. Dies kannst du auch über hasMethode(irgendwas) nachzuvollziehen. D.h. die Methoden und Eigenschaften werden schon erkannt. Wird dann allerdings auf die Eigenschaft zugegriffen, schlägt der angegebene Fehler wieder zu.
Dim oleService as Object
Dim oApp as Object
oleService = createUnoService("com.sun.star.bridge.oleautomation.Factory")
oApp = oleService.createInstance("Lotus.NotesSession")
Msgbox oApp.hasProperty("UserName") ' liefert True zurück
Msgbox oApp.hasProperty("Irgendwas") ' liefert False zurück
Msgbox oApp.hasMethod("Initialize") ' liefert True zurück
Msgbox oApp.UserName ' liefert Fehler zurück
Msgbox oApp.getValue("UserName") ' liefert ebenso Fehler zurück
Gruß
Sascha
ata:
Hallo Sascha,
da wirst du auf diesem Weg schlechte Papiere haben, solange es nicht sauber implementiert ist, wer auch immer da den schwarzen Peter hat...
Es muß wohl in der Vergangenheit in einer früheren Version des OpenOffice schon funktioniert haben, denn ich bin beim googeln auf Threads in Foren gestossen (Jahr 2005) die mit anderen Problemen gekämpft haben - gemeinsam war bei denen, daß das Initialize eingebaut war und damals als Methode ansprechbar war. Stellt sich noch immer die Frage, woran es liegt. COM-Schnittstelle in Microsoft Office funktioniert über GetObject( "..." ) ohne Probleme. Der gleiche Weg, oder der über den Service funktioniert in OpenOffice jedoch nicht.
Auf der anderen Seite habe ich von OpenOffice aus ein MS Word-Dokument geöffnet und was reingeschrieben - das hat funktioniert. Damit dürfte es entweder die Datei sein, die Lotus zur Verfügung stellt und nicht konform ist - oder von OpenOffice unsauber verwendet wird - derzeit ein Patt in der Frage nach dem Schuldigen - und den sollte man herausfinden, um sich an den richtigen wenden zu können...
Harren wir der Dinge. Ich werde noch probieren, ob es mit der Notes-Version zusammenhängen kann - dann käme eine Alt-Installation von OpenOffice dran. Wie sieht das bei dir aus - brauchst du das bereits für einen Kunden oder dient es eher der Fortbildung? ::)
Toni
mibo11:
Hallo Toni,
der OLE/COM Gedanken aus OO ist zunächst erst einmal verworfen. Warten wir da auf bessere Unterstützung, von wem auch immer. ;D
Nächster Versuch ist der Zugriff über die NotesAPI. Ich werde darüber berichten, sobald ich brauchbare Ergebnisse habe.
Gruß
Sascha
PS: Bei dem Beschriebenen handelt es sich übrigens um eine Vorstudie.
ata:
Hallo Sascha,
was genau hast du denn vor?
Toni
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln