LotusScript und Datenbanken

15.12.2006 von Martin Kuppinger
Um mit LotusScript direkt auf Datenbanken zuzugreifen, werden die Lotus Connector Lotus Script Extensions (LC LSX) benötigt. Mit ihrer Hilfe lässt sich LotusScript nutzen, um die Connectoren anzusteuern. Das ist komplexer als die Verwendung von DCRs, bietet aber auch mehr Steuerungsmöglichkeiten. Der Artikel gibt einen Überblick.

Der Einsatz der LC LSX ist mit einer Reihe der Lotus Domino Connectors möglich. Der Zugriff kann nicht nur auf Datenbanken erfolgen, sondern auch auf Dateien und andere Notes-Systeme. Natürlich wird auch ODBC wieder unterstützt. Aber auch weitere Connectoren wie solche für SAP oder PeopleSoft, die nicht standardmäßig mitgeliefert werden, können angesteuert werden. In diesem Fall sind aber teilweise zusätzliche Methoden für die Ansteuerung erforderlich, die bei den jeweiligen Connectoren dokumentiert sind und von diesen bereitgestellt werden.

Voraussetzungen

Für die Nutzung der LC LSX müssen die Connectoren mit den entsprechenden Schnittstellen für die angesteuerten Datenbanken installiert sein. Es werden also je nachdem beispielsweise die Treiber für die IBM DB2, Oracle-Datenbanken oder – bei allen aktuellen Windows-Versionen vorinstalliert – für ODBC benötigt. Sie müssen gegebenenfalls auch noch konfiguriert werden. Wichtig ist, dass diese Treiber auf dem System, auf dem der Code später ausgeführt wird, vorhanden sein müssen, also auf dem Notes-Client oder dem Domino-Server, je nach Arbeitsweise.

Da das LSX standardmäßig nicht geladen wird, muss außerdem die Zeile

Uselsx "*lsxlc"

zu Beginn des Skripts eingefügt werden. Das gilt zumindest für alle Versionen ab dem Release 5, weil dort keine automatische Registrierung des LSX mehr erfolgt.

Grundbegriffe

Um erfolgreich mit diesen Modellen arbeiten zu können, sollte man mit einigen Grundbegriffen vertraut sind. Wichtig sind hier vor allem drei Begriffe:

Vor allem das Modell des Ergebnissatzes muss man verstehen, um effizient arbeiten zu können. Das ist aber bei praktisch allen Varianten der Programmierung von Datenbankzugriffen ähnlich.

Die Klassen

Insgesamt werden vom LC LSX acht Klassen bereitgestellt werden. Die zentrale Klasse ist LCSession für den Aufbau und die Steuerung der Verbindung. Außerdem können darüber auch verfügbare Adapter ermittelt werden.

Die Klasse LCConnection wird für den Aufbau von Verbindungen verwendet. Pro Connector wird eine Instanz benötigt, über die aber mehrere Verbindungen hergestellt werden können. Damit wird die Last optimiert

Mit den weiteren Klassen

werden spezielle Funktionen für den Umgang einerseits mit Felder und andererseits mit speziellen Datentypen angeboten. Man kommt aber für viele Anwendungen ohne nähere Kenntnis zumindest der Klassen für spezielle Datentypen und mit Grundkenntnissen von LCFieldlist und LCField aus.

Grundlagen der Nutzung

Das Grundkonzept von Anwendungen, die auf dem LC LSX basieren, ist recht statisch – wie es ja bei den meisten Anwendungen der Fall ist, die mit Lotus Notes/Domino entwickelt werden. Wenn man das Raster einmal kennt, kann man es relativ einfach in immer wieder ähnlicher Form implementieren. Eine typische Anwendung für Abfragen auf eine Datenbank, deren Ergebnisse in einer Domino-Datenbank gespeichert werden, besteht aus folgenden Schritten:

Ein noch einfacheres Beispiel dafür zeigt Listing 1, das die Ergebnisse nur verarbeitet und ausgibt. Schon hier wird aber die Grundstruktur deutlich – und es wird sichtbar, dass man wirklich nicht sehr viel wissen muss, um mit dem LC LSX in LotusScript-Anwendungen arbeiten zu können.

Option Public
Uselsx "*lsxlc"
Sub Initialize
Dim src As New LCConnection ("db2")
Dim fldLst As New LCFieldList
Dim fld As LCField
Dim count As Integer
src.Database = "Gold"
src.Userid = "JDoe"
src.Password = "xyzzy"
src.Connect
If (src. Execute ("SELECT * from customer", fldLst) = 0) Then
Print "No records were fetched."
End
End If
Set fld = fldLst.Lookup ("CONTACTNAME")
Print "the 'contact names' stored in the table are:"
While (src.Fetch (fldLst) > 0)
count = count + 1
Print " record #" & Cstr(count) & " = '" & fld.text(0) & "'"
Wend
If (count = 0) Then Print "No records were fetched."
End Sub

Informationen für Datenbankzugriff zusammenstellen

Nach dem Verbindungsaufbau wird hier zunächst eine Verbindung zu dem DB2-Connector hergestellt. Nach der Dimensionierung der Objekte werden die Informationen für den Zugriff auf die Datenbank zusammengestellt, bevor mit der Methode Connect die eigentliche Verbindung hergestellt wird. Hier wird auch deutlich, dass das Zusammenspiel mit dem Connector und der Aufbau von Verbindungen zwei getrennte Schritte sind, weshalb eben mehrere Verbindungen über einen Connector arbeiten können.

Anschließend folgt über die Methode Execute bereits die Abfrage von Informationen. Die If-Anweisung wird verwendet, um Situationen abzufangen, in denen keine Informationen in der Datenbank vorhanden sind. Anschließend muss in der Liste der Felder noch nach einem definierten Feld gesucht werden, das dann verarbeitet wird. Falls Informationen aus mehreren Feldern ausgegeben werden sollen, ist die Anweisung natürlich entsprechend komplexer.

Im Grundsatz ist das ganze Skript aber doch relativ einfach. Auf einer solchen Struktur lassen sich nun unterschiedliche Anwendungen realisieren – die weiter oben beschriebene Grundstruktur typischer Skripts ist insofern eine Erweiterung, als zunächst die Informationen für die Abfrage, also zur Konstruktion des SQL-Statements, gesammelt werden müssen.

Im kommenden Jahr wird die Entwicklung von Anwendungen mit dem LC LSX das Thema mehrerer Artikel in Expert’s inside Lotus Notes/Domino sein.