Einschränkungen der COM-Klassen

15.09.2006 von Martin Kuppinger
Die COM-Klassen von Lotus Notes/Domino weisen im Vergleich mit den LotusScript- und Java-Klassen einige wichtige Einschränkungen auf. Der Artikel befasst sich mit den wesentlichen Unterschieden und den daraus resultierenden Konsequenzen für die Anwendungsentwicklung.

Wenn man in der Online-Hilfe des Domino Designer die Dokumentation zu den LotusScript/ COM/OLE Classes betrachtet, fällt immer wieder auf, dass einzelne Klassen, Methoden und Eigenschaften für COM/OLE nicht unterstützt werden. Der Artikel betrachtet die wichtigsten Ausnahmen.

Generelle Ausnahmen

Es gibt einige generelle Ausnahmen, die sich aus konzeptionellen Unterschieden zwischen LotusScript und COM bzw. den Programmiermodellen von Lotus Notes/Domino und Windows ergeben.

Ein wichtiger Unterschied liegt darin, dass man aus COM-Anwendungen heraus keine Domino- Objekte außer dem Session-Objekt mit New erstellen kann. In allen anderen Fällen muss man über das Session-Objekt auf die entsprechenden Domino-Objekte zugreifen.

In analoger Weise kann nicht mit der aktuellen Umgebung gearbeitet werden. Während man bei LotusScript häufig auf die current database oder andere Objekte in der Laufzeitumgebung zugreift, müssen diese von COM aus immer explizit angegeben werden, da die Laufzeitinformationen von Notes oder Domino eben nicht zur Verfügung stehen.

Eine sehr logische Einschränkung liegt darin, dass man bei der Verwendung von COM nur mit Backend-Klassen arbeiten kann. Daher werden einige Klassen, die für Benutzer sichtbar sind, nicht unterstützt:

User Interface Klassen

Abgesehen von den speziellen Klassen für bestimmte Designelemente sind das fast ausschließlich Klassen, die explizit als User Interface-Klassen definiert sind. Darüber hinaus gibt es einige Unterschiede in der Behandlung von Datentypen, die vor allem bei der Portierung von Code zwischen Lotus- Script und beispielsweise Visual Basic, oder umgekehrt, zum Problem werden können – und nach den Ursachen für solche Fehler muss man ja manchmal lange suchen. Zu nennen sind hier:

Deutlich gravierender ist, dass man in COM nicht auf die Namen von Elementen zugreifen kann, also beispielsweise doc.titel. Das geht nur bei LotusScript. Bei COM muss man mit dem Methoden und Eigenschaften arbeiten, die für den Zugriff und die Bearbeitung der entsprechenden Elemente vorgesehen sind.

Speziell für VBScript als Skriptsprache, die logischerweise mit Late Bindings arbeitet, also erst zur Laufzeit die Umsetzung vornimmt, müssen Rückgabewerte erst in eine Variable geschrieben werden, bevor sie als Array indiziert werden können.

Zu beachten ist außerdem, dass Fehlercodes in COM aus vier Zeichen bestehen, wobei die letzten beiden Bytes den Domino-Fehlercodes entsprechen und die ersten beiden Zeichen immer den Wert &H8004 haben.

Außerdem kann COM keine Methoden und Eigenschaften nutzen, deren Rückgabe ein unbekanntes Objekt ist. In diesem Fall werden Typfehler gemeldet. Die Entsprechenden Eigenschaften und Methoden können daher nicht genutzt werden.

Spezifische Ausnahmen

Neben diesen generellen Unterschieden findet man noch einige spezifische Unterschiede zwischen COM und LotusScript. Eine vollständige Auflistung würde den Umfang dieses Artikels bei weitem sprengen. Die Methoden und Eigenschaften, die nicht eingesetzt werden können, sind in der Hilfe des Domino Designer unter dem Stichwort Specific exceptions to LotusScript specifications genannt, ebenso alle Klassen mit den entsprechenden Ausnahmen. In der Liste wird deutlich, dass es abgesehen von der Eigenschaft Parent und der Methode New nur wenige Ausnahmen gibt.

Reine COM-Funktionen

Bei den Eigenschaften und Methoden, die nur bei COM eingesetzt werden können, handelt es sich in den meisten Fällen um Workarounds für eben die Eigenschaft Parent oder, wie beim DXL Exporter und DXLImporter, spezielle Varianten für den Aufruf. Auch hier sei auf die Dokumentation mit Informationen unter dem Stichwort verwiesen.

Alles in allem ist die Übereinstimmung zwischen den LotusScript-Klassen und ihren jeweiligen Gegenstücken für COM aber weiterhin sehr groß. Damit ist es relativ einfach, mit guten Kenntnissen in LotusScript und grundlegendem Wissen über die VBScript-Programmierung Anwendungen zu erstellen, die Microsoft Office und Lotus Notes integrieren.