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:
-
Metadaten sind Informationen über die Datenstrukturen, auf die zugegriffen wird. Hier finden sich also beispielsweise die Informationen zu Tabellen und den darin enthaltenen Spalten. Von Alternate Metadata spricht man, wenn ein Connector mehrere Varianten der Darstellung solcher Metadaten anbietet.
-
Das Result Set oder eben der Ergebnissatz ist die Menge der Ergebnisse, die von einer Abfrage zurückgeliefert wird. Jede Verbindung kann einen aktiven Ergebnissatz haben, der mit unterschiedlichen Verfahren durchsucht werden kann. Eine spezielle Variante ist das Writeback Result Set, mit dessen Hilfe Informationen auch wieder zurückgeschrieben werden können. Sie lassen sich in dem Ergebnissatz schnell verändern, weshalb diese Variante für schnelle Update- und Delete-Operationen besonders gut geeignet ist. Dieses Verfahren wird allerdings ebenfalls nicht von allen Connectoren unterstützt.
-
Schließlich werden über das Token Eigenschaften von Verbindungen identifiziert. Tokens werden also benötigt, um solche Eigenschaften gegebenenfalls modifizieren zu können.
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
-
LCFieldlist
-
LCField
-
LCStream
-
LCNumeric
-
LCCurrency
-
LCDatetime
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:
-
Über den Zugriff auf eine Notes-Maske oder eine View werden die Informationen ermittelt, aus denen die Abfrage generiert werden soll. Alternativ können diese auch über eine Eingabe abgefragt werden. Dabei ist aber typischerweise eine Verifizierung gegen bereits vorhandene Informationen erforderlich.
-
Es wird eine Verbindung zu dem externen System aufgebaut.
-
Die Daten in der Datenbank werden auf Basis der zu Beginn ermittelten Informationen abgefragt. Das Ergebnis ist ein Result Set, der verarbeitet werden muss.
-
Die einzelnen Zeilen in diesem Ergebnissatz werden nun Schritt für Schritt verarbeitet und in Notes-Dokumenten abgelegt.
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.