Vertec Python Modul "vtcmodel"

Mit dem eingebauten Python Modul "vtcmodel" Informationen über das Datenmodell hinter den Businessobjekten von Vertec abfragen.

Das Vertec Python Modul vtcmodel ermöglicht es, Informationen über das Datenmodell hinter den Businessobjekten abzufragen. Es ist auch im Resctict Scripting Modus verfügbar und enthält die Methode:

vtcmodel.gettypeinfo(object): Typeinfo

  • object: Ein einzelnes Vertec Objekt oder ab Vertec 6.8.0.12 auch ein Klassenname als String
    • Gross/Kleinschreibung wird nicht berücksichtig
    • Es kann, unabhängig von der aktuellen Modellsprache, der englische oder der deutsche Klassenname verwendet werden 

Holt die Informationen des übergebenen Vertec Objekts bzw. der angegebenen Klasse und gibt ein Typeinfo Python Objekt zurück.

Das Typeinfo Objekt hat folgende Eigenschaften:

Member / Funktion Beschreibung
name
Gibt den Klassennamen in der aktuellen Vertec Modellsprache zurück
defaultname
Gibt den Standard Klassennamen im Modell zurück
persistent
Gibt an, ob Objekte dieser Klasse in der Datenbank gespeichert werden.
members
Liste aller Members dieser Klasse
memberbyname(name: String): member
  • name: Name des Members als String
    • Gross/Kleinschreibung wird nicht berücksichtig
    • Es kann, unabhängig von der aktuellen Modellsprache, der englische oder der deutsche Membername verwendet werden. 

Gibt das angegebene Member als Member Python Objekt zurück. 

Das Member Objekt hat folgende Eigenschaften:

Members können sowohl Attribute (normale Felder) als auch Associations (Links zu anderen Objekten) sein. Je nachdem, ob es sich um ein Attribut oder eine Association handelt, hat das Member Objekt leicht abweichende Eigenschaften. Das ist in der jeweiligen Zeile vermerkt. 

Eigenschaft Beschreibung Attribut Association
allownull
Gibt an, ob das Member leer (NULL) sein darf x x
classinfo
Die Klasse, zu der das Member gehört (Typeinfo wie oben) x x
columnname
Spaltenname des Members in der Datenbank (nur persistente Members) x x
defaultname
Standard Membername im Modell x x
derived
Gibt an, ob es sich um ein berechnetes (derived) Attribut handelt. x  
isattribute
Gibt an, ob es sich bei dem Member um ein Attribut handelt. x x
isindirect
Gibt an, ob es sich bei der Rolle um einen Teil eines Multilinks (m:n) handelt. In diesem Fall gibt es ein Linkobjekt (linkclass).   x
ismultirole
Gibt an, ob es sich bei dem Member um das Multi-Ende eines Links handelt, der darum auch als Liste verwendet werden kann. x x
isrole
Gibt an, ob es sich bei dem Member um eine Linkrolle handelt, das Member also eine Association ist. x x
issinglerole
Gibt an, ob es sich bei dem Member um das Single-Ende eines Links handelt. x x
length
Gibt die maximal erlaubte Länge des Attributs an. Das ist bei Strings relevant. x  
linkclass
Der Name der Linkklasse, falls es sich um einen Multilink handelt (isindirect).   x
name
Name des Members in der aktuellen Modellsprache x x
ordered
Gibt an, ob es sich um eine sortierte Association handelt.   x
otherend
Die andere Seite der Association, gibt ebenfalls ein Member Objekt zurück.    x
persistent
Gibt an, ob das Member in der Datenbank gespeichert wird.  x x
valuetype

Datentyp des Attributs. Mögliche Werte sind:

  • VtcString (String)
  • Boolean (Wahr/Falsch)
  • Date (Datum)
  • DateTime (Datum mit Zeitteil)
  • integer (Ganzzahl)
  • float (Zahl mit Kommastellen)
  • VtcCurrency (Dezimalzahl)
  • Blob (Binäre Daten, z.B. Bilder)
  • TBALanguage (Sprache)
x  

Einige dieser Eigenschaften sehen Sie auch im Vertec Model Browser auf der rechten Seite, wenn Sie ein Member in der Liste markieren. 

Beispielscript

Das Beispielscript kann im Vertec Script Editor auf einem Projekt ausgeführt werden. 

import vtcmodel

typeinfo = vtcmodel.gettypeinfo(argobject) # argobject is a project
print("Klassenname (aktuelle Modellsprache): {}".format(typeinfo.name)) # Projekt/Project
print("Klassenname (Modell): {}".format(typeinfo.defaultname)) # Project
print("In DB gespeichert: {}".format(typeinfo.persistent)) # True

members = typeinfo.members # Liste von allen "Member" Objekten

member = typeinfo.memberbyname("Active") # Info über Member "aktiv"
print("Membername (aktuelle Modellsprache): {}".format(member.name)) # aktiv/active
print("Membername (Modell): {}".format(member.defaultname)) # active
print("Datentyp: {}".format(member.valuetype)) # Boolean (string)
print("In DB gespeichert: {}".format(member.persistent)) # True
print("Derived: {}".format(member.derived)) # False
print("Null/Leer erlaubt: {}".format(member.allownull)) # False
print("Ist Attribute: {}".format(member.isattribute)) # True
print("Ist Linkrolle / Association: {}".format(member.isrole)) # False
print("Ist Single Rolle: {}".format(member.issinglerole)) # False
print("Ist Multi Rolle: {}".format(member.ismultirole)) # False
print("Spaltenname: {}".format(member.columnname)) # Active
print("Length: {}".format(member.length)) # 255, nur relevant bei Strings
print("Backlink auf 'Project' ClassInfo: {}".format(member.classinfo.name)) # Projekt/Project

role_member = typeinfo.memberbyname("Customer") # Info über die Association zum Kunden
# Attribute wie oben, ausser "valuetype" und "derived", dafür:
print("Linkklasse: {}".format(role_member.linkclass)) # None
print("Sortierung: {}".format(role_member.ordered)) # True
print("Attributsname auf der anderen Seite: {}".format(role_member.otherend.name)) # projekte/projects

Netherlands

United Kingdom