COM Schnittstellen cloudfähig machen mit COM Forwarding
Product line
Standard
|Expert
Operating mode
CLOUD ABO
|ON-PREMISES
Modules
Services & CRM
Budget & Phases
Purchases
Resource Planning
Business Intelligence
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.
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).
win32com.client
) angelegt. Dies entspricht der bisherigen Verwendung von COM Objekten aus Python.
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:
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.
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.
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.
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.
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
.