Python Scripts in Vertec

Vertec hat eine Python Engine eingebunden, um benutzerdefinierte Scripts ausführen zu können. Aus einem Vertec Pythonscript heraus ist wiederum das ganze Vertec Objektmodell zugänglich.

Ein Script kann entweder über den Vertec Python-Editor oder in jedem Text-Editor (z.B. Notepad) erstellt werden. Scripts, die immer wieder verwendet werden, können im Vertec registriert werden. Sie sind dann über den Menüpunkt Aktionen oder im Kontextmenü über die rechte Maustaste abrufbar. Siehe dazu den Artikel über das Registrieren von Scripts.

Weitere Informationen:

Inhaltsverzeichnis

Der Python-Editor

Scripts erstellen oder laden

Um Python Scripts zu erstellen und auszuführen gibt es den Python Script Editor. Diesen öffnen Sie über Menü Einstellungen > Python Script Editor

Im oberen Teil des Fensters wird der Scriptcode angezeigt bzw. geschrieben. Der untere Teil mit den >>> ist das Ausgabe-Fenster.

Folgende Buttons sind verfügbar:

pythoneditor_buttons.png

  1. Neue Datei: Fügt einen weiteren Reiter im Codefenster ein, wo ein Script geschrieben oder geladen werden kann.
  2. Datei öffnen: Über diesen Button können Sie ein bestehenden Script in den Editor laden. Es erscheint im aktuellen Reiter.
  3. Datei speichern: Speichert das Script im aktuellen Reiter als .py-Datei ab.
  4. Datei schliessen: Schliesst das Script bzw. den Reiter im Editor. Nicht gespeicherte Inhalte gehen verloren!
  5. Datei ausführen: Führt das Script aus. Falls Fehler auftreten, erscheinen diese im Ausgabefenster.

Neben den üblichen Kürzeln für Kopieren (Ctrl-C) und Einfügen (Ctrl-V) sind die folgenden Tastaturkürzel im Python Scripteditor nützlich:

  • Markieren und Tab: markierten Block einrücken
  • Markieren und Shift-Tab: Einrückung des markierten Blocks verkleinern
  • ALT-Backspace: Undo (letzte Textänderung rückgängig machen)
  • Shift-ALT-Backspace: Redo (letztes Undo rückgängig machen)

Hinweis

In Vertec Versionen vor 5.8 müssen Sie Vertec mit dem Parameter /pythonedit starten, um ihn einzublenden.

Die Variable "argobject"

Die variable argobject liefert das zur Zeit aktuelle Objekt (den aktuellen Eintrag) in Vertec. Dies ist der Eintrag, welcher im aktiven Fenster von Vertec als Haupteintrag ausgewählt ist, bzw. der Eintrag in der Liste, von dem aus der Aufruf erfolgt.

projekt = argobject

Das Modul "vtcapp"

Mit der Vertec Installation wird eine Vertec Python Library mitgeliefert. Diese ist nach der Installation automatisch verfügbar und heisst vtcapp. Zu dieser Tabelle gibt es die Hilfe-Funktion help(vtcapp), welche alle Informationen dazu auflistet:

Methoden und Funktionen

Das Modul vtcapp hat folgende wichtige Methoden und Funktionen (es sind nur die wichtigsten aufgeführt, die vollständige Liste findet sich im Artikel Vertec Python Interfaces):

Methode/FunktionBeschreibungBeispielcode
createobject(klasse: string) Erstellt neues Objekt der angegebenen Klasse.

leistung=vtcapp.createobject("OffeneLeistung")

currentlogin(): Projektbearbeiter Aktuell angemeldeter User

bearbeiter=vtcapp.currentlogin()

print bearbeiter.name

>>> Christoph Keller

evalocl(expression: string): expressiontype Globale OCL Expression auswerten.

projektListe = \
vtcapp.evalocl("Projekt.allinstances\ ->orderby(code)")

Funktionen ohne Parameter aufrufen

Beim Aufruf einer Funktion, welche keine Parameter erwartet, ist es sehr wichtig, dass die Klammern nicht vergessen gehen. Beispiel:

vtcapp.currentlogin #Falsch, Funktion wird nicht aufgerufen, es wird keine Fehlermeldung ausgegeben
vtcapp.currentlogin() #Richtig

"eval" (eine OCL-Expression auswerten)

Mit eval wird auf einem Objekt bzw. auf einer Liste von Objekten (ab Vertec 5.4) eine OCL-Expression ausgewertet.

Beispiel:

# Rechnung
obj = argobject
Leistungen = obj.eval("leistungen")

# Summe von Leistungen
SummeLeistungen = Leistungen.eval("if self->first.rechnung.verrechnet then\
 oclastype(VerrechneteLeistung).wertext else oclastype(OffeneLeistung).wertext endif->sum")

Globale OCL-Variablen (also solche, die sich auf das gesamte Vertec und nicht auf ein einzelnes Objekt oder eine einzelne Liste beziehen) werden über vtcapp.evalocl ausgewertet (siehe Das Modul vtcapp weiter oben).

Funktionen definieren

Innerhalb des Scripts werden Funktionen mit def<funktion>: definiert:

def ChangeText(leist):
leist.text = ...

Danach kann im Code darauf zugegriffen werden:

ChangeText(argobject)

Funktionen aus einem anderen Script aufrufen

In Python ist es möglich, eine Funktion aus einem anderen Script aufzurufen. Funktionen, welche öfters bzw. in mehreren Scripts verwendet werden, sollten in einem eigenen Script (Modul) ausgelagert werden.

import <scriptname> #Scriptname des Moduls
<scriptname>.<funktion>

Beispiel

Ein Modul (Script) erneut laden (Reload)

Die Imports werden nur beim ersten Aufruf geladen. Vertec merkt sich nun, dass dieses Modul (Script) geladen ist, und lädt es nicht wieder, auch wenn es im Code erneut aufgerufen wird. Das bedeutet: Wird das Modul bzw. das Script im Hintergrund geändert, haben diese Änderungen keinen Effekt, wenn das geänderte Modul bereits geladen wurde.

Mit dem Befehl reload kann ein Modul neu geladen werden. Dies kann einmalig im Python Editor ausgeführt werden oder auch direkt im Script nach dem import-Befehl integriert werden:

import scriptclass
reload(scriptclass)

Globale Variablen definieren

Unterschied zwischen lokalen und globalen Variablen:

  • Lokale Variablen können nur innerhalb der Funktion verwendet werden und müssen für jede Verwendung in einer anderen Funktion als Parameter übergeben werden.
  • Globale Variablen werden einmal initialisiert und sind in jeder Funktion im gleichen Script verfügbar.

Globale Variablen deklariert man ausserhalb von Funktionen. Um eine globale Variable innerhalb einer Funktionen zu verwenden, muss sie mit global geladen werden:

Leistung = argobject # globale Variable deklarieren

def WertExtAendern(betrag):
 global Leistung # globale Variable verwenden
 Leistung.xWertExt = betrag

def BearbeiterSetzen(bearbeiter):
global Leistung
Leistung.bearbeiter = bearbeiter

22.02.2010 | 28.10.2016: An Vertec 6.0 angepasst.
Produktlinien: Expert
Module: Leistung & CRM