In Python ist es möglich, Funktionen und Klassen aus anderen Scripts aufzurufen. Funktionen und Klassen, welche öfters bzw. in mehreren Scripts verwendet werden, können in ein eigenes Script (Modul) ausgelagert werden.
Auch für Custom Renderer und List Controller, sowie für kundenspezifische Anpassungen der Ressourcenplanung und von Schnittstellen (Extensions)werden Scripts als Module verwendet.
Ein Modul wird wie ein normales Script via Einstellungen > Berichte & Scripts > Scripts erzeugt: Wählen Sie mit der rechten Maustaste Neu > Scripteintrag.
Folgende Felder sind bei Modulen relevant:
Bezeichnung
|
Modulnamen dürfen keine Leerzeichen im Namen haben. Auch Umlaute sind nicht zu empfehlen.
Das Modul wird später mit diesem Namen importiert bzw. aufgerufen. Am besten wählen Sie eine Bezeichnung, die einen Hinweis auf den Inhalt gibt, sodass Sie auch in der Liste leicht erkennen können, um welches Modul es sich handelt.
Beachten Sie, dass Python case-sensitiv ist. Der Aufruf des Moduls muss also mit der gleichen Gross-/Kleinschreibung erfolgen, wie die Bezeichnung hier definiert wird.
|
Plattform
|
Bei Modulen muss hier Python ausgewählt sein.
In Vertec Versionen vor 6.6 gibt es dieses Feld noch nicht. In diesem Fall muss der Script Text mit einem # beginnen.
|
Erweiterte Berechtigungen
|
Sollen registrierte Scripts später auch von Usern mit eingeschränkten Benutzerrechten ausgeführt werden können, kann für die entsprechenden Codestellen eine erweiterte Berechtigung erteilt werden. Siehe dazu den Artikel Erweiterte Berechtigungen in Scripts.
Beachten Sie, dass das Erteilen von erweiterten Berechtigungen während der Ausführung des erweiterten Codes systemweit greift, also auch, wenn man in einem Script etwas aus einem anderen Modul aufruft.
|
Script Text
|
Hier wird der Python Code eingefügt. Siehe dazu den Abschnitt Code in Scripts als Module weiter unten.
|
Script Editor...
|
Öffnet das Script im.Script Editor. Der Script Editor ist dann mit dem Scripteintrag direkt verbunden. Das heisst: wird im Script Editor Code angepasst, ändert sich der Script Text im Scripteintrag ebenfalls.
|
Code in Scripts als Module
In Modulen können Klassen und Funktionen definiert werden.
Funktionen
def funktionsname():
...
In Klammern können der Funktion Parameter übergeben werden. Funktionen ohne Parameter werden mit leeren Klammern erzeugt.
Um eine Funktion aus einem anderen Script (Modul) aufzurufen, muss dieses zuerst importiert werden:
import modulname
Der Modulname entspricht der Bezeichnung des Scripts (siehe oben). Der Aufruf der Funktion erfolgt via
modulname.funktionsname
import modulname
modulname.funktionsname
Klassen
class classname:
...
Falls die Klasse von einer anderen Klasse erbt, kann diese in Klammern übergeben werden:
class baseclassname:
...
class classname(baseclassname):
...
Innerhalb der Klasse können auch wieder Funktionen definiert werden.
Bei Custom Renderern, List Controllern und Erweiterungen der Ressourcenplanung ist vorgegeben, welche Funktionen Sie definieren können bzw. müssen. Der Zugriff erfolgt via modulname.classname.
Bei eigenen Sammlungen können Sie die Funktionen selbst definieren. Um eine Klasse von einem anderen Modul zu verwenden, muss dieses zuerst importiert werden:
import modulname
Sollen von dieser Klasse Funktionen verwendet werden, muss sowohl das Modul als auch die Klasse importiert werden:
from modulname import classname
Module bei Änderungen neu laden
Wird ein Modul geändert, wird es innerhalb der gleichen Session beim nächsten Aufruf erneut geladen (ab Vertec 6.4).
Andere Sessions erkennen den geänderten Scriptcode zwar via Notif Server, laden das Modul aber nicht erneut. In diesem Fall muss entweder Vertec neu gestartet oder das Modul mit dem Befehl reload(modulname)
neu geladen werden. Entweder einmalig im Script Editor oder auch direkt im Script:
import modulname
reload(modulname)