Grundlagen für das Arbeiten mit COM / ActiveX
Standard
|Expert
CLOUD ABO
|ON-PREMISES
Leistung & CRM
Budget & Teilprojekt
Fremdkosten
Ressourcenplanung
Business Intelligence
Über die COM-Schnittstelle (oder ActiveX-Schnittstelle) kann Vertec von aussen ganz ähnlich ferngesteuert werden wie über VBScript. Tatsächlich benutzt das Vertec Script die genau gleiche COM-Schnittstelle für die Vertec Objekte. In den folgenden Beispielen wird von MS-Excel aus auf Vertec zugegriffen, genauso gut könnte der Zugriff aber von jedem Programmiersystem aus erfolgen.
Die Desktop App (Vertec.Desktop.exe) und die Cloud App (Vertec.Cloud.exe) können von anderen Applikationen aus als "out-of-process" COM Server verwendet werden. Die Type Library dazu ist im jeweiligen exe-File enthalten. Dazu muss als erstes die Vertec Type Library referenziert werden. Dies geschieht im Visual Basic Editor über das Menü Extras > Verweise. Es öffnet sich folgendes Fenster (je nach Windows sieht das Fenster ev. etwas anders aus):
Die nicht markierten Einträge sind alphabetisch sortiert. Suchen Sie den Eintrag Vertec Typelibrary
und markieren Sie ihn. Wenn Sie das Fenster erneut öffnen, sollte der Eintrag Vertec Typelibrary
wie hier dargestellt erscheinen.
Die Vertec.App Komponente kann mit oder ohne Type-Library Unterstützung verwendet werden. Wir empfehlen jedoch, die obigen Schritte vorzunehmen, da dann je nach Entwicklungsumgebung (z.B. VB) automatische Code-Completion und compile-time type checking zur Verfügung stehen.
Für einen Überblick über die verfügbaren Objekte (genauer: Interfaces) können Sie im VB-Editor den Objektkatalog über Ansicht > Objektkatalog aufrufen. Wählen Sie anschliessend in der Combo-Box oben Vertec, und es erscheint folgende Ansicht:
Hier im Beispiel werden die Methoden (als Symbol die grünen Würfel) und Eigenschaften (als Symbol die Hand) des IVtcObject dargestellt.
Eine genaue Beschreibung der wichtigsten Klassen siehe im Kapitel COM Interfaces.
Im Rahmen der Unterstützung der COM Schnittstelle in der Cloud App musste für Vertec 6.0 die COM Typelibrary geringfügig angepasst werden, damit diese mit dem .NET COM Server kompatibel ist.
Die Cloud App bietet lokal einen COM Server an, obwohl gar keine Business-Logik vorhanden ist. Dies wird nun mit einem Proxy zum eigentlichen COM Server, der auf dem Server in der Vertec Session läuft, simuliert. Der Verkehr läuft dabei über die normale Datenleitung (und ist darum eher nicht geeignet für Datenmigration und schwere Excel-Reports). Wegen dieser Neuimplementation mussten gewisse Dinge an der Type-Library geändert werden.
Arbeitet man mit Microsoft Office und bindet die Type-Library ein ("Verweise"), siehe oben, so funktioniert alles wie bisher. Bindet man keine Type-Library ein, so ergibt sich ein wichtiger Unterschied:
Das Schreiben eines Members über
projekt.Member("code") = "WINCO"
wirft einen Fehler.
Darum wurden neue Methoden eingeführt, welche in allen Apps und unabhängig von der Type-Library laufen:
projekt.SetMember "code", "WINCO"
Es gibt im Ganzen drei solche neuen Setter-Methoden, diese sind:
Es geht dabei nur um den externen Zugriff via COM und daher nur um die Cloud App - nicht um eingebaute Scripts etc. Potenziell davon betroffen sind auch Excel-Berichte, da diese ebenfalls über COM auf Vertec zugreifen. Da diese aber selten Members schreiben und via Cloud App auch keine Migrationen gemacht werden (sollten), wird das in den allermeisten Fällen keine Auswirkungen haben.
Eine weitere Änderung gibt es bei der Funktion TypeName(). Diese gibt in der Cloud App einen anderen Namen zurück als bisher. Reports, welche die Funktion TypeName() verwenden, müssen angepasst werden.
Die entsprechenden Namen für die COM Interfaces im Proxy (Cloud App) sind:
Resultat bisher | Resultat neu |
---|---|
App | ComCoClass |
IVtcObject | VtcObjectProxy |
IVtcObjectList | VtcObjectListProxy |
ITimBearbeiter | TimBearbeiterProxy |
... |
Mit Ausnahme von App wird der ClassName + "Proxy" zurückgegeben.
Falls die TypeLibrary nicht eingebunden ist, gibt es eine Eigenheit bei der Übergabe von Variants an den ComProxy::
Sub TestVariantPassing() Dim Vertec As Object Dim Projektbearbeiter As Variant Dim ObjectList As Object Set Vertec = CreateObject("Vertec.App") Set Projektbearbeiter = Vertec.CurrentObject Set ObjectList = Vertec.CreateList("Projektbearbeiter") ObjectList.Add Projektbearbeiter End Sub
Das Hinzufügen eines Projektbearbeiters als Variant funktioniert nicht und meldet Ungültiger Prozeduraufruf oder ungültiges Argument. Wird der Projektbearbeiter allerdings als als Object deklariert funktioniert alles problemlos.
Davon betroffen sind generell Funktionen, welche ein spezifisches Objekt (IVtcObject, IVtcObjectList, ITimBearbeiter etc.) als Parameter akzeptieren. Als Übergabe zählt auch eine Zuweisung. Beispiele:
IVtcObjectList
IVtcSession
Als Variant Deklarierte Objekte sollten deshalb nicht an den COM Proxy übergeben werden.