Einige Vertec Schnittstellen zu Drittprogrammen basieren auf einer
COM Schnittstelle
zum Fremdsystem. Da die Verbindung jedoch nur lokal, d.h. auf demselben Rechner, funktioniert, sind diese Schnittstellen nicht cloudfähig und können nur mit der Vertec Desktop App und demnach nur On-Premises verwendet werden.
Mit dem
COM Forwarding
führen wir mit Vertec 6.7.0.7 ein System ein, mit welchem auch aus der Cloud App auf die COM Objekte des Fremdsystems zugegriffen werden kann.
So können im serverseitigen Python-Code COM Forwarding Objekte verwendet werden, deren Aktionen dann an die Cloud App weitergeleitet und dort auf die eigentlichen COM Objekte des Drittprogramms angewendet werden.
Modul vtccom
Die Funktionalitäten für das COM Forwarding werden im Modul
vtccom
mitgeliefert. Dieses ist auch als
Stub File
vorhanden.
Die Funktion
vtccom.createobject(<progid>)
liefert ein COM Objekt, welches in Python verwendet werden kann (siehe Beispiel unten).
-
In der
Desktop App
wird das COM Objekt direkt aus der App unter Verwendung des Python COM Systems (
win32com.client
) angelegt. Dies entspricht der bisherigen Verwendung von COM Objekten aus Python.
-
In der
Cloud App
wird das COM Objekt durch die Cloud App auf dem Client-System via COM Forwarding angelegt. Alle Interaktionen mit dem resultierenden Python Objekt werden zur Cloud App übertragen und dort auf das eigentliche COM Objekt angewendet.
Bestehende, nicht cloudfähige Schnittstellen umbauen
Schnittstellen, welche COM Forwarding verwenden, funktionieren auch in der Desktop App unverändert.
Falls Sie in Vertec (andere als die standardmässig mitgelieferten) Schnittstellen mit COM Zugriffen auf Drittprogramme verwenden und diese an COM Forwarding anpassen möchten, müssen Sie folgende Änderungen vornehmen:
vtccom.createobject() statt win32com.Dispatch()
Die Aufrufe der COM Objekte erfolgen mittels
vtccom.createobject(identifier)
anstelle von
win32com.Dispatch
.
Dafür muss das Modul
vtccom
importiert und die Aufrufe wie folgt geändert werden:
Neu
|
Bisher
|
import vtccom
self.invoice = vtccom.createobject('ThirdPartyAPI.Invoice')
|
from win32com.client import Dispatch
self.invoice = Dispatch('ThirdPartyAPI.Invoice')
|
import vtccom
word = vtccom.createobject("Word.Application")
word.Visible = True
doc = word.Documents.Add()
doc.SaveAs(r"C:\temp\Test Document.docx")
|
from win32com.client import Dispatch
Word = Dispatch('Word.Application')
Word.Visible = True
doc = Word.Documents.Add()
doc.SaveAs(r"C:\temp\Test Document.docx")
|
Für die Sicherstellung der Rückwärtskompatibilität liefert
vtccom.createobject()
in der Desktop App das originale
COM Objekt
zurück.
Nicht zugelassene Module ausbauen
Damit die Schnittstellen mit COM Forwarding auch mit
Restrict Scripting
funktionieren, müssen Aufrufe von Modulen wie
sys
oder
pywintypes
ausgebaut werden. Es dürfen nur Module verwendet werden, die auf der
Whitelist
stehen.
Kompatibilität mit COM Objekten
Je nach Implementierung des verwendeten Drittproduktes (COM Server) kann es mit COM Forwarding zu Inkompatibilitäten kommen. In diesen Fällen kann der COM Server nur in der Desktop App verwendet werden.
Sicherheit
Um zu vermeiden, dass ein Script mit COM Forwarding auf dem Server "unbemerkt" Code in der Cloud App ausführt, wird der Benutzer des Clients einmalig um Erlaubnis gefragt, wenn ein COM Server auf dem Client aufgerufen wird. Diese Erlaubnis wird für zukünftige Aufrufe auf dem Client gespeichert.
Beim Zugriff auf einen COM Server via COM Forwarding (Aufruf von vtccom.createobject()
) erscheint in der Cloud App ein Dialog, dass ein Server Script versucht, auf dieses Objekt auf dem Client zuzugreifen.
- Wird der Zugriff erlaubt, wird das Script ausgeführt und die Erlaubnis auf dem Client gespeichert. Bei zukünftigen Aufrufen desselben COM Servers erscheint die Abfrage nicht mehr.
- Wird der Zugriff nicht erlaubt, bricht die Ausführung ab, ohne dass eine Meldung erscheint. Bei wiederholtem Aufruf erscheint die Meldung erneut.
Die von uns mitgelieferten Buchhaltungsschnittstellen mit COM Forwarding sind bereits hinterlegt. Bei ihnen kommt diese Abfrage also auch beim erstmaligen Aufruf nicht.
Gespeichert werden die zugelassenen COM Server im Registry Key HKEY_CURRENT_USER\SOFTWARE\Vertec\ComObjectWhitelist
.