Scripts auf Events

Scripts können durch bestimmte Änderungen, sogenannte Events, gestartet werden. Sobald eine solche Änderung eintrifft, läuft das hinterlegte Script automatisch ab, ohne zusätzliche Interaktion des Users.

Ein Event-Script wird wie ein normales Script im Vertec erzeugt: Über Einstellungen > Skripts, rechte Maustaste > Neu > Scripteintrag.

Bezeichnung Hier kann eine beliebige Bezeichnung eingegeben werden. Eventscripts erscheinen nicht in einem Menü.
Klassen Hier darf bei Eventskripts nichts eingegeben werden, sonst würde das Event-Skript im entsprechenden Menü erscheinen, was nicht erwünscht ist.
Bedingung Dieses Feld hat für Eventscripts keine Bedeutung. Es steuert lediglich die Sichtbarkeit von normalen Scripts im Menü.
Auf einzelne Objekte anwendbar / Auf Listen (Container) anwendbar Wird bei Event-Scripts nicht benötigt.
Eventscript für Auf folgende Arten von Events können Scripts registriert werden:
  • Neu: Das Script wird gestartet, sobald ein Objekt der bezeichneten Klasse (siehe nachfolgende Tabelle) neu erzeugt wird.
  • Geändert: Das Script wird gestartet, sobald eine sich eine Änderung ergibt an einem Objekt der bezeichneten Klasse (siehe nachfolgende Tabelle) und einem bestimmten Feld (siehe weiter unten).
  • Login: Das Script wird gestartet, sobald sich ein Benutzer an Vertec anmeldet. Ab Vertec Version 5.8 auch bei Anmeldung via Web Oberfläche und via iPhone.
  • Löschen: Ab Version 5.8. Ein Unterschied zu den anderen Events ist, dass das Event-Script im Löschvorgang, aber direkt vor dem eigentlichen Löschen aufgerufen wird (damit der ursprüngliche Zustand mit allen Verbindungen noch besteht).

    Fehler aus Löschen-Scripts werden ins Log geschrieben, ansonsten aber ignoriert. Das Löschen wird dadurch nicht blockiert.
    Es ist nicht möglich, im Löschen Script das Löschen zu verhindern. Dies aus dem Grund, dass in einer Klassenhierarchie mehrere Löschscripts definiert werden können. In solchen Fällen könnte es passieren, dass ein Script Änderungen beim Löschen macht, und ein nachfolgendes Script das Löschen dann verhindert, was zu einem inkonsistenten Zustand führt.

  • Businesslogik: Ab Version 6.1. Diese Scripts laufen zu bestimmten aus der Businesslogik gegebenen Zeitpunkten ab. Als erste Möglichkeit wurde in Version 6.1 der Businesslogik Event CalculateRate eingeführt, später sollen weitere folgen. Damit kann kundenspezifische Logik zur Berechnung der Ansätze einer Leistung ausgeführt werden. Dieser Event, in diesem Fall das CalculateRate, wird als Feldname eingetragen.

    Das Script wird wie bei Eventscripts üblich erst aufgerufen, wenn alle andere Logik abgelaufen ist. Im Falle von CalculateRate bedeutet dies, dass die eingebaute Tariflogik mit Berücksichtigung von Tariftabelle etc. zuerst abläuft und den Satz wie bisher setzt. Erst nachher kommt das Eventscript und kann den von der eingebauten Businesslogik berechneten Wert überschreiben.

    Die betroffene Leistung ist im Event-Script wie üblich als argobject verfügbar.
Klassen Gibt an, auf welche Klassen das Script reagiert. Bei Event-Scripts der Art Login muss keine Klasse gesetzt werden.
Felder

Hier kann ein einzelnes Feld auf der Klasse angegeben werden, auf dessen Änderung reagiert werden soll. Die Angabe eines Feldes ist nur sinnvoll bei Event-Scripts der Art Geändert.

Falls auf mehrere Felder reagiert werden soll, können diese mit Komma getrennt nacheinander angegeben werden. Es können auch Zusatzfelder angegeben werden, indem einfach der Name des Zusatzfeldes angegeben wird.

EventKlasse bezeichnenFelder bezeichnen
Neu ja nein
Geändert ja ja
Login nein nein
Löschen ja nein

Auf derived Attributes (berechneten Feldern) dürfen keine Eventscripts registriert werden. Ab Version 6.0 ist die Event-Scripts Unterstützung für derived Members generell deaktiviert.

Erweiterte Berechtigungen

Einem Scripteintrag können erweiterte Rechte erlaubt werden. Dadurch wird erreicht, dass das Script gewisse erweiterte Möglichkeiten hat (Zum Beispiel, dass es auch bei Benutzern mit eingeschränkten Berechtigungen funktioniert). Das genaue Vorgehen ist im Artikel Erweiterte Berechtigungen beschrieben.

Argumente für Member und Event bei Eventscripts

Ein Eventscript sollte wissen, durch welchen Event auf welchem Member es ausgelöst wurde. Dies macht es einfacher, verschiedene Events mit demselben Script zu behandeln. Dafür wurde mit der Version 5.7 eine globale Variable namens args eingeführt:

  • args.eventmember enthält Name des auslösenden members
  • args.eventtype enthält Art des Events: ('change', 'create' oder 'login')

Wird in Python und VB-Script analog verwendet.

Beispiel VBScript:

Beispiel Python:

# coding: windows-1252
if args.eventmember == 'aktiv':
                argobject.bemerkung = 'Aktiv wurde geändert'
if args.eventmember == 'projektleiter':
                argobject.bemerkung = 'PL wurde geändert'

Scripts auf Events ausschalten

Beachten Sie bei der Verwendung von Scripts auf Events folgende Hinweise:

  • Komplizierte Berechnungen bei Datenänderungen können die Performance von Vertec verlangsamen.
  • Endlose Scripts, die sich immer wieder selbst aufrufen, können Vertec zum abstürzen bringen.
  • Scripts, welche in die Funktionalität von Vertec eingreifen (z.B. das Setzen eines Stundensatzes auf einer neu erzeugten Leistung), können zu einem undurchsichtigen Verhalten von Vertec führen.

Aus diesen Gründen gibt es die Möglichkeit, Vertec mit einem Parameter /noevents zu starten. Dadurch werden im Vertec werden keine Eventscripts mehr ausgeführt.

Um die Ausführung von EventScripts innerhalb von anderen Scripts temporär zu unterbinden, gibt es die Methoden

VBScript
vertec.enableEvents vertec.disableEvents

Python
vtcapp.enableevents()
vtcapp.disableevents()

Diese beiden Methoden werden verwendet, um die Ausführung von EventScripts temporär zu unterbinden. DisableEvents verhindert die Ausführung von Event-Scripts so lange, wie wiederum EnableEvents aufgerufen wird. Diese Methoden sind nötig, um den endlosen Aufruf eines Scripts zu verhindern. Beispielsweise soll das Ändern eines Stundensatzes einer Leistung auf einer Rechnung dazu führen, dass bei allen Leistungen auf dieser Rechnung ein anderer Stundensatz eingesetzt wird. Ohne Verwendung von DisableEvents würde jede geänderte Leistung das gleiche Script erneut aufrufen, was zu einer Endlos-Schleife führen würde. DisableEvents gilt so lange, bis entweder EnableEvents aufgerufen wird oder das Script beendet ist.

Für den Aufruf dieser Methoden muss das Script über erweiterte Berechtigungen verfügen.


03.12.2007 | 18.11.2016: Eventscript für: Businesslogik eingefügt.
Produktlinien: Expert
Module: Leistung & CRM