Gestaltungselemente importieren

Externes Programm

Der Import über einen LotusScript-Agenten funktioniert. Er ist jedoch mit einem Nachteil verbunden: Um ein Gestaltungselement in eine Datenbank zu importieren, wird in dieser der Importagent benötigt. Eine Möglichkeit zur Behebung dieses Problem wäre, den Agenten so umzuschreiben, dass er das Gestaltungselement nicht einfach in die aktuelle Datenbank einfügt, sondern die Zieldatenbank im Dialog mit dem Anwender erfragt und verwendet. Offen bleibt bei dieser Lösung jedoch die Frage, wo man diesen universalen Agenten einbindet, damit er jederzeit zur Verfügung steht.

Als Lösung des Problems bietet es sich an, ein externes Programm zu erstellen, welches den Import ausführt. Es soll die Zieldatenbank und das zu importierende Gestaltungselement (die DXLDatei) vom Anwender erfragen und den Import danach bewerkstelligen.

Als Programmiersprache für ein solches externes Programm stehen Ihnen verschiedene Alternativen zur Auswahl, von Visual Basic über Delphi und Java bis hin zu C++ und C.

Wir wollen uns die Umsetzung mit Visual Basic ansehen. In der Ausgabe 11/2002 von Expert's Inside Lotus Domino wurden im Artikel „Domino Objects und COM“ die Grundlagen für den Dort wurde auch bereits darauf hingewiesen, dass für Lotus Notes-Entwickler die Basic-Programmierung keine allzu große Herausforderung ist – LotusScript ist schließlich ein Basic-Derivat. Die Ähnlichkeit zwischen den beiden Sprachen ist sehr groß. Zu beachten ist die Einschränkung, dass über die COM-Schnittstellenur die Backend-Klassen verfügbar sind. Weitere Unterschiede bestehen neben anderen im Umgang mit Objekten der Klasse Item und bei der Erstellung von Objekten. Hinter letztgenanntem verbirgt sich die Tatsache, dass lediglich Objekte der Klasse NotesSession mit New erstellt werden können. Alle anderen Objekte müssen Sie über Methoden und Eigenschaften des Objekts Session erstellen.

Die COM-Schnittstelle ist automatisch mit der Installation von Lotus Notes auf einem Computer vorhanden. Es ist nicht notwendig, dass Notes ausgeführt wird, um mit ihr zu arbeiten. Eine grundlegende Voraussetzung ist jedoch, dass die Domino COM-Objekte Zugriff auf die notes.ini haben. Die dort unter KeyFileName angegebene User-ID wird für den programmtechnischen Zugriff genutzt. Des Weiteren muss bei Visual Basic- Programmen ein Verweis auf die Komponenten der Lotus Domino Objects in dem Projekt eingebunden werden. Die Komponenten befinden sich in der Datei domobj.tlb.

Das Beispiel in Listing 2 wurde mit Microsoft Visual Studio .Net 2003 erstellt. Das Formular enthält lediglich eine Schaltfläche, bei deren Betätigung der Importvorgang gestartet wird. Nach der Aufforderung zur Eingabe des Passworts für die gefundene ID kann der Anwender zuerst die Zieldatenbank und anschließend das zu importierende Gestaltungselement in Form einer DXLDatei bestimmen (Bild 2). Die Angabe des zu verwendenden Benutzers samt dessen Kennwort kann auch direkt im Quelltext erfolgen. Vom Standpunkt der Sicherheit aus sollte man sich eine derartige Vorgehensweise jedoch gut überlegen.

Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim se As New Domino.NotesSession
Dim db As Domino.NotesDatabase
Dim stream As Domino.NotesStream
Dim dbName As Object
Dim datName As Object
Dim im As Domino.NotesDXLImporter
Dim ofd1 As New OpenFileDialog
Dim ofd2 As New OpenFileDialog
'Session initialisieren
Call se.Initialize()
'Einstellungen für Dialogfenster Datenbank auswählen
ofd1.InitialDirectory = "c:otus\notes\data"
ofd1.Filter = "Notes Datenbanken (*.nsf)|*.nsf|Alle Dateien (*.*)|*.*"
ofd1.FilterIndex = 1
ofd1.Title = "Auswahl der Zieldatenbank"
If ofd1.ShowDialog() = Windows.Forms.DialogResult.OK Then
dbName = ofd1.FileName
If dbName Is Nothing Then
MsgBox("Fehler beim Öffnen der Datei", , "Error")
Exit Sub
Else
db = se.GetDatabase("", dbName)
End If
End If
'Datenstrom erzeugen
stream = se.CreateStream
'Einstellungen für Dialogfenster DXL Datei auswählen
ofd2.InitialDirectory = "c:\temp"
ofd2.Filter = "DXL Dateien (*.dxl)|*.dxl|Alle Dateien (*.*)|*.*"
ofd2.FilterIndex = 1
ofd2.Title = "Auswahl der DXL Datei des zu importierenden _
Gestaltungselements"
If ofd2.ShowDialog() = Windows.Forms.DialogResult.OK Then
datName = ofd2.FileName
'Quelldatei für Datenstrom festlegen
If Not stream.Open(datName) Then
MsgBox("Fehler beim Öffnen der Datei", , "Error")
Exit Sub
Else
'DXLImporterobjekt erzeugen
im = se.CreateDXLImporter()
'Import von Designdokumenten aktivieren
im.DesignImportOption = 2
'Import vom Datenstrom unter Angabe von Zieldatei ausführen
Call im.Import(stream, db)
Call stream.Close()
End If
End If
End
End Sub