Vertec AI Chatbot

Der Chatbot hilft Ihnen bei Fragen rund um das Produkt und die Anpassbarkeit der Software. Wie bei allen AI-generierten Daten sollten die Antworten bei kritischen Informationen verifiziert werden. Nehmen Sie dafür gerne Kontakt mit uns auf. Weitere Informationen zur Verarbeitung der Chat-Daten bieten wir auf der Datenschutzseite.

Die besten Antworten liefert der Chatbot, wenn Ihr Input möglichst viele Informationen enthält. Zum Beispiel:

«Welche Apps stehen im Vertec Cloud Abo zur Verfügung?»

Embedded Python Scripting

26.05.2023
|

In einer Business Software mit Objektmodell ist es ganz nützlich, eine integrierte Scriptsprache zur Verfügung zu haben. Sofern die Integration den Zugriff auf die Businessobjekte und gewisse interne APIs erlaubt, kann damit vieles kundenspezifisch automatisiert werden.

Für die ersten Schritte mit Scripting hatten wir bei Vertec auf Visual Basic Script (VBScript) gesetzt. Das war auch recht einfach, da unsere Applikationen bereits eine COM Schnittstelle zur Verfügung stellten und VBScript diese direkt nutzen konnte. Von den sprachlichen Möglichkeiten, die VBScript bietet, war ich aber nie wirklich begeistert. Wenn wir da weiterkommen wollten, musste eine «echte» Programmiersprache her.

Zum Glück Python

Zu der Zeit, vor vielen Jahren, begann der Aufstieg von Python als neuer Stern am Sprachen-Himmel. Die Sprache war noch nicht sehr bekannt, es sprach sich aber herum, dass sie intern von Google eingesetzt würde, und das hiess ja schon mal was. Was damals für Python sprach, war die klare Struktur, gute Lesbarkeit und das Modulkonzept. Ausserdem hatte die Sprache ein internes API, das ein Embedding ermöglichte. Glücklicherweise hatten wir auf das richtige Pferd gesetzt, denn Python ist mittlerweile eine der bekanntesten und weitverbreitetsten Programmiersprachen.

Embedding von Python

Wie bringen wir denn nun Python als Sprache in unsere eigene Applikation? Das Python «Extending and Embedding API» basiert auf der Programmiersprache C, bei uns eigentlich ein Tabu. Fertige Integrationen von Python in .NET gibt es leider keine, abgesehen von eigenen .NET Python Varianten wie IronPython, die aber leider nicht mehr wirklich gepflegt werden.

An dieser Stelle kommt uns unsere Delphi Vergangenheit zu Hilfe. Delphi ist eine recht moderne Hochsprache, eine Variante der Sprache Pascal, kann sich aber bei Bedarf gegenüber anderen Komponenten wie C verhalten (technisch gesagt, unterstützt es verschiedene «calling conventions»). Für eine Python Integration ist das ideal und tatsächlich gibt es das wunderbare in Delphi geschriebene Python4Delphi Projekt, welches das ganze interne Python API für Delphi aufbereitet. 

Die Vertec Software basiert zwar grösstenteils auf .NET und ist in C# geschrieben, gewisse Komponenten sind aus historischen Gründen aber noch in Delphi implementiert und lassen sich aus .NET Code aufrufen. So ist auch die Python Integration in Delphi implementiert und aus C# verwendbar.

Die Python4Delphi (kurz P4D) Library erlaubt es, Python-Module und Klassen in Delphi zu implementieren und diese Python zur Verfügung zu stellen.

Ausserdem bietet P4D Unterstützung für das Hosting von embedded Python Engines. Normalerweise wird ein Python Programm durch Starten des Python Interpreters python.exe und Angabe eines .py Scripts ausgeführt. Im Embedded Modus lädt das Host Programm, in unserem Fall Vertec, den Python Interpreter als DLL Library und ruft darauf bestimmte API Funktionen zum Starten eines Scripts auf. Anstatt python.exe heisst der Python Prozess dann z. B. Vertec.Session.exe und macht neben Python Scripts Ausführen noch eine Menge anderes.

Module und Adapter

Unsere Python Umgebung umfasst als Einstiegspunkt für Script-Code ein eingebautes Python-Modul «vtcapp», welches in Delphi implementiert ist. Es bietet Zugriff auf verschiedene Funktionen zur Interaktion mit der Vertec Software. Ein Beispiel wäre die «msgbox» Funktion, welche mit «vtcapp.msgbox(‘Hallo’)» eine Messagebox mit dem angegebenen Text anzeigt.

Richtig brauchbar wird die Scripting Integration aber erst mit einem möglichst nahtlosen Zugriff auf die Businessobjekte. Dafür haben wir eine generische Python Adapterklasse eingeführt, welche mit einem Vertec Businessobjekt verbunden ist. Pro Businessobjekt wird bei Bedarf ein solcher Adapter instantiiert und repräsentiert das Businessobjekt in Python.

Ganz Python-like haben wir auf den Adaptern die Python Standard-Methoden «__getattr__» und «__setattr__», natürlich als Delphi Methoden zugänglich, überschrieben und ermöglichen so den Zugriff auf alle Eigenschaften der Vertec Businessobjekte. Die Python Methoden machen dynamisch einen Lookup des angegebenen Members im Datenmodell und erlauben dann das Auslesen oder das Setzen der entsprechenden Eigenschaft. Auch eine «evalocl» Methode zum Auswerten von OCL Expressions darf auf den Adaptern nicht fehlen.

Python ist modular

Ein wesentlicher Vorteil von Python ist sein Modulkonzept. Komplexere Automatisierungs-Projekte lassen sich so in verschiedene Code-Module aufteilen, die von einem zentralen Modul importiert werden. Python Module sind üblicherweise einfach Python Files auf dem Filesystem. Das ist für unsere Zwecke etwas zu offen und unsicher. Darum erweitern wir den Python Import Mechanismus und definieren eigene Importer. Das geschieht grundsätzlich in Python, mit gewissen Einsprungspunkten, die in Delphi umgesetzt sind. Wie das generell funktioniert, beschreibt das «Python Enhancement Proposal» PEP-302. Wir ermöglichen so den Import von «eingebautem» Python Code aus den Applikations-Ressourcen sowie das Importieren von Python Modulen, welche als Vertec Datenobjekte abgelegt sind.

Ausserdem können wir auf diese Weise kontrollieren, welche Module importiert werden dürfen und welche nicht. Aus Gründen der Applikations-Sicherheit möchten wir dem Code in unserer Scripting-Umgebung nicht zu viele Freiheiten geben.

Scope dank Context

Da wir mittlerweile Python an zahlreichen Orten in unseren Applikationen verwenden, ist es wichtig, dass der interne Zugriff auf die Python Umgebung möglichst einfach und transparent ist. Pro Vertec Session existiert eine Python Umgebung, welche während der ganzen Session Laufzeit zur Verfügung steht. Das ermöglicht Anwendungen, wo Python Objekte über einen Aufruf hinweg weiter existieren. Für Dinge wie Caching oder Ähnliches ist das sehr nützlich.

Nun möchten wir aber trotzdem eine möglichst gute Isolation der verschiedenen Orte, wo Python verwendet wird. Insbesondere möchten wir Konflikte aufgrund von gleichlautenden Symbolen vermeiden. Das Python API sieht vor, dass beim Ausführen von Python Code jeweils ein Dictionary der lokalen Variablen mitgegeben wird. Das machen wir uns zunutze und haben das Konzept des PythonContext eingeführt. Es ist ein leichtgewichtiges Konstrukt mit eigenem Satz von lokalen Variablen sowie Zugriff-Funktionen, welche das Auslesen und Setzen von Python Werten in der Python Umgebung und das Umwandeln in die jeweils andere Welt (C# bzw. Delphi) übernehmen.

Aus .NET können wir uns in C# einen Python-Context anlegen und dort darauf einfach Python Statements und Expressions ausführen. Der Context hat dank lokaler Variablen einen eigenen Naming-Scope in Python. Er sieht die lokalen Variablen anderer Contexte nicht.

Geschenk für Power-User

Wir bauen die Möglichkeiten unserer Python Integration auf Basis der beschriebenen Konzepte laufend aus. So setzt zum Beispiel auch das Vertec Bericht-System zur Aufbereitung der Daten auf Python. Natürlich schaffen wir damit auch eine gewisse Komplexität, die verdaut werden muss. Das Customizing von Vertec mit Python ist sicher ein Werkzeug, das sich vor allem an Power-User richtet.

Die Möglichkeiten, damit eine Vertec Umgebung für den Kunden anzupassen, sind jedenfalls (fast) unbegrenzt.

None
20.03.2024

Kanzleisoftware in der Cloud – mit Sicherheit in die Zukunft

Die Art und Weise, wie Anwaltskanzleien ihre Prozesse abbilden, verwalten und optimieren, ändert sich signifikant
None
08.12.2023

Das Plug-in "Regelprüfung Präsenzzeiten" komplementiert die Vertec Leistungserfassung

Das Vertec Plug-in "Regelprüfung Präsenzzeiten" sichert Arbeitgeber noch besser gegen Arbeitszeitverstösse ab
None
05.12.2023

Branchenlösungen – wirklich der beste Ansatz?

Der Begriff Branchenlösung klingt verlockend. Eine Lösung, gemacht für alle Anforderungen meiner Branche. Oder etwa nicht?
None
22.11.2023

Transparenz und Nähe gelebt – Die Vertec Anwendertagung 2023

Vertec begrüsst mehr als 200 Kunden im SIX Convention Point in Zürich. Die rege Teilnahme freut uns sehr.
None
27.09.2023

Vertec 6.7 vorgestellt

Diese Neuerungen warten in unserem Major Release Vertec 6.7 auf Sie.
None
17.07.2023

Zufriedenheit der Vertec Kunden 2023

Unsere Kunden kommen zu Wort: Die Ergebnisse der Umfrage 2023 liegen vor.
Mit Vertec RVG-Gebühren abrechnen
28.06.2023

Mit Vertec RVG-Gebühren abrechnen

Mit dem RVG-Rechner kalkulierte Gebühren mit Vertec schnell mandatsbezogen abrechnen
None
24.04.2023

Ein Hausmeister für die Business Software

Nach der Software-Einführung beginnt die Pflege der Software
Kontakt

Montag bis Freitag
9-12 und 14-17 Uhr

Vertec 30 Tage kostenlos ausprobieren

Lernen Sie unsere Software mit allen Kernfunktionen kennen

Jetzt testen
Bitte wählen Sie Ihren Standort