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?»
Aktualisiert: 12.09.2024
|
Rückgabewert von Zusatzfeldtyp Text ist NULL, nicht Leerstring.
Die Liste der vorhandenen Felder in Vertec wird durch das Modell vorgegeben und kann nicht geändert werden. Da es jedoch vorkommt, dass Sie auf Daten noch zusätzliche Informationen ablegen wollen (z.B. Auftragswahrscheinlichkeit auf Projekt), gibt es Zusatzfelder.
Zusatzfelder definieren
Zusatzfelder werden unter Einstellungen > Customizing > Zusatzfelder verwaltet. Jedes Zusatzfeld basiert auf einer Zusatzfeldklasse. Wenn Sie ein neues Zusatzfeld erzeugen müssen, klicken Sie via Neu-Menü oder Rechtsklick auf den Ordner und wählen Sie Zusatzfeld.
Name
Über diesen Namen kann auf das Zusatzfeld zugegriffen werden. Siehe dazu den Abschnitt Zugriff auf Zusatzfelder weiter unten. Der Name darf keine Umlaute enthalten, da sonst das Berechtigungssystem fehlschlagen kann, und er darf nicht mit einer Zahl beginnen.
Aufgrund einer Umstellung mit Version 6.5.0.21 dürfen keine Namen mehr für Zusatzfelder benutzt werden, welche einer eingebauten Python Methode entsprechen. Es handelt sich um folgende Begriffe:
istypeof
eval
evalocl
delete
unload
setmemberoutofdate
setmlvalue
getmlvalue
checkright
linkto
unlink
getmemfootprint
subscribetomember
Zusatzfelder, welche einen solchen Namen haben, werden als ungültig angezeigt und müssen bereinigt werden, um den Betrieb zu gewährleisten.
Bezeichnung
Geben Sie hier an, unter welcher Bezeichnung das Zusatzfeld auf der Oberfläche erscheinen soll. Wenn Sie hier nichts angeben, wird auf der Oberfläche der Name angezeigt. Bei der Bezeichnung handelt es sich um ein MLString -Feld, das heisst, sie ist sprachspezifisch.
Feldtyp, Auswahltyp, Expression
Zusatzfelder können typisierte Werte mit entsprechenden Auswahlmöglichkeiten und Eingabekontrollen enthalten. Neben den Feldtypen können ein Auswahltyp und eine optionale Expression angegeben werden.
Die folgende Tabelle beschreibt die verfügbaren Feldtypen mit den passenden Auswahltypen (& Expressions).
Feldtyp
Auswahltyp
Expression
Zeichen
Normale Zeichenkette mit einer maximalen Länge von 255 Zeichen.
Pfad
Zeigt einen Filesystem Ordner-Auswahldialog und speichert den Pfad zum ausgewählten Ordner.
/
Datei
Zeigt einen Filesystem Datei-Auswahldialog und speichert den Pfad zum ausgewählten File.
Bild-Dateien, z.B. Gif, Jpeg, Bitmap können via rechte Maustaste ins Zusatzfeld geladen werden.
Bild
Zeigt den Ordnerbrowser von Windows an, im Feld wird das Bild gespeichert.
/
Objekt
Zuordnung eines Vertec Objekts via Drag and Drop oder mittels eines geeigneten Auswahltyps.
Objekt
Auswahldialog zum Auswählen eines Objekts in Vertec. Die Liste der Objekte im Auswahldialog wird mittels der Expression berechnet.
Zur Verfügung stehen die Objekte, die mit der Basis-Klasse verbunden sind.
Beispiel: Ein Zusatzfeld mit dem Namen Hauptprojekt , der Klasse Projektbearbeiter und der Expression eigProjekte zeigt eine Liste aller eigenen Projekte des Bearbeiters an.
Adresse
Zeigt einen Adressen-Suchdialog an und ordnet die ausgewählte Adresse zu.
/
Ordner
Zeigt einen Baum-Dialog mit Vertec Ordnern an und ordnet den ausgewählten Ordner zu.
Die Expression gibt den Inhaltstyp der anzuzeigenden Ordner an.
Auswahl
Ermöglicht die Auswahl einer vordefinierter Liste. Die Werte werden durch Kommas abgetrennt als Expression angegeben.
Kein
Für einfache Listenauswahlen gedacht.
Als Expression wird die Liste von Hand definiert, nach folgendem Muster: "Möglichkeit 1", "Möglichkeit 2", "Variante 3" .
Text
Textdaten beliebiger Länge (länger als 256). Wird in Memofeld dargestellt.
(ANSI Text)
Sollte nicht mehr verwendet werden, da keine Unicode Texte gespeichert werden können.
Reihenfolge
Hier können Sie angeben, in welcher Reihenfolge die Zusatzfelder auf der Oberfläche erscheinen sollen.
Klassen
Gibt an, wo und für welchen Datentyp das Zusatzfeld erscheinen soll. Wählen Sie den entsprechenden Typen aus dem Dialog aus, indem Sie auf die drei Punkte klicken.
Sichtbarkeit
Zusatzfelder, welche intern für Berechnungen verwendet werden, können auf der Oberfläche ausgeblendet werden.
Bedingung
Die Sichtbarkeit kann durch eine OCL Expression gesteuert werden. Das Resultat dieser OCL Expression muss ein Wahr/Falsch-Wert (Boolean) sein. Ist das Resultat wahr, wird das Zusatzfeld angezeigt.
Die Zusatzfelder erscheinen in der Einzelansicht der entsprechenden Einträge auf der Seite Weitere Info:
Ausserdem können sie auch via Customizing an einem anderen Ort platziert werden.
Übersetzung von Auswahlzusatzfeldern
Ab Vertec 6.5.0.15 werden die Strings in Auswahlzusatzfeldern übersetzt, wenn die Zusatzfeld-Definition (ZusatzfeldKlasse) über eine Eintrag Id verfügt.
Bei einem Auswahl-Zusatzfeld in einer Liste:
Expression: zusatzfeldint(<name>)
Steuerelement: cmbZusatzfeld
Renderer: rndZusatzfeld
sind die Auswahloptionen übersetzt, falls die Zusatzfeld-Definition eine Eintrag Id gesetzt hat.
Auch in nicht selektierten Zellen in der Liste erscheint der übersetzte Text.
Wenn ein übersetztes Auswahlzusatzfeld als erstes Feld einer Zusatzklasse verwendet wird, dann zeigt die Stringrepresentation einer Zusatzklassen-Instanz auf den übersetzten Wert. Die Zusatzklassen Instanz muss dazu keine Eintrag Id haben (es reicht die Eintrag Id auf der Zusatzklassen Definition).
Im Code können zum Setzen des Auswahlzusatzfeldes alle 3 folgenden Varianten verwendet werden:
Setzen des Auswahl Index (integer Wert)
Setzen des übersetzten Textes in der ausgewählten Sprache
Setzen des unübersetzten Textes (native Sprache)
Falls Sie Auswahlzusatzfelder definiert haben und diese übersetzen möchten, setzen Sie auf der entsprechenden Zusatzfeld-Definition eine Eintrag Id. Wie das geht, finden Sie im Artikel Sprachen/Begrifflichkeit im Abschnitt mit den Übersetzungen ab Version 6.4.0.9.
Zugriff auf Zusatzfelder
Sie können diese Zusatzfelder auch in Listen anzeigen, in Scripts und Berichten verwenden oder in einem Expression-Ordner danach filtern, indem Sie via OCL darauf zugreifen. Auch die Abfrage via SQL-Ordner ist möglich.
Wichtig ist dabei, zu beachten, dass die Zusatzfelder auf schon bestehenden Vertec-Objekten erst erzeugt werden, wenn darauf entsprechend zugegriffen wird. Vorher sind sie in der Datenbank nicht vorhanden, was beim Zugriff via SQL aber essenziell ist.
Wann werden Zusatzfelder angelegt?
Neues Objekt wird erzeugt
Wird ein neues Objekt erzeugt, werden alle zugehörigen Zusatzfelder angelegt.
Neues Zusatzfeld wird auf einem bestehenden Objekt angelegt
Bei bereits bestehenden Objekten werden die Zusatzfelder bei folgenden Vorgängen angelegt:
Per Script wird das Feld angelegt, wenn es beschrieben wird: projekt.jahr = 2022 (Beispiel: Ganzzahl-Zusatzfeld jahr auf Projekt). Es kann auch einfach entsprechend initialisiert werden: projekt.jahr = 0
Per Script wird das Feld auch angelegt, wenn es gelesen wird, aber nur via OCL. Das heisst: der Lese-Zugriff via Python (z.B. myyear = projekt.jahr) legt das Feld nicht an, aber der Lesezugriff via OCL schon: myyear = projekt.evalocl("zusatzfeldint('jahr')")
Via Listeneinstellungen, wenn in einer Spalte auf das Feld "schreibend" zugegriffen wird. Das muss nicht wirklich schreibend sein, aber es muss so sein, dass Vertec das Gefühl hat, dass geschrieben werden könnte: zusatzfeldasstring(...) beispielsweise geht nicht, da dies ein reiner Lesezugriff ist; zusatzfeldint(...) hingegen legt das Feld an, da über diese Expression auch geschrieben werden kann. (Hinweis: Diese Einschränkung gilt nur bei Listeneinstellungen. Beim Lesezugriff via OCL in Scripts, wie in Punkt 3 beschrieben, gilt das nicht, dort wird das Feld auch beim reinen Lesezugriff angelegt)
Der Grund für das etwas komplexe Verhalten bei Variante 3 und 4 ist die Optimierung, welches bei einem nicht vorhandenen Zusatzfeld den Standardwert zurückgibt, da ein Schreibzugriff nur aufgrund einer Anzeige möglichst verhindert werden, aber keine Fehlermeldung erscheinen soll.
Via SQL (z.B. via SQL-Ordner) ist das Feld erst zugänglich, wenn es angelegt wurde. Deshalb sollten die Zusatzfelder auf Klassen, von denen bereits Objekte bestehen, immer direkt angelegt werden.
Zusatzfelder für bestehende Objekte anlegen
Nach Anlegen eines Zusatzfeldes kann man ein Script laufen lassen, welches das Feld auf allen bereits bestehenden Objekten anlegt, in der Art:
projekte = vtcapp.evalocl("projekt")
for projekt in projekte:
projekt.jahr = 0
vtcapp.updatedatabase()
Wie die verschiedenen Zusatzfeldtypen initialisiert werden, finden Sie im Abschnitt Python weiter unten.
OCL
Über OCL kann auf die verschiedenen Zusatzfelder folgendermassen zugegriffen werden:
zusatzfeldAsString(name): liefert den Wert eines Zusatzfeldes unabhängig von dessen Typ als Stringwert.
Abhängig vom Typ wird das Feld folgendermassen abgefragt:
Zusatzfeldtyp
Operator
Default Rückgabewert (wenn noch nichts explizit gesetzt wurde)
Zeichen
zusatzfeld
Leerstring
Wahr, Falsch
zusatzfeldbool
Falsch
Ganzzahl
zusatzfeldint
0
Minuten
zusatzfeldint
0
Festkommazahl
zusatzfeldcurr
0.00
Datum
zusatzfelddate
NULL
Bild
zusatzfeldblob
NULL
Objekt
zusatzfeldobj (siehe Tipps weiter unten)
NULL
Auswahl
zusatzfeldint (gibt Position der Auswahl zurück) zusatzfeldasstring (gibt den Auswahltext zurück)
0
Erster Wert der Liste
Text
zusatzfeld
NULL
ANSI Text (Legacy)
zusatzfeldblob
NULL
Beispiel: Alle Adressen, die als ABC-Adressen gekennzeichnet sind (Wahr,Falsch-Zusatzfeld "ABC-Adresse" auf Adresseintrag):
Der Zugriff auf Zusatzfelder erfolgt in Python ganz einfach über den Zusatzfeldnamen, also z.B. projekt.jahr.
Der reine Lesezugriff ( myyear = projekt.jahr) legt das Feld nicht an (siehe Abschnitt Wann werden Zusatzfelder angelegt weiter oben), der Schreibzugriff hingegen schon ( projekt.jahr = 2022). Möchte man das Feld anlegen, ohne einen Wert zu setzen, kann es wie folgt initialisiert werden:
Zusatzfeldtyp
Initialisierung
Zeichen
= "" (Leerstring)
Wahr, Falsch
= 0 (False)
Ganzzahl
= 0
Minuten
= 0
Festkommazahl
= 0
Datum
= None
ANSI Text
= None
Bild
= None
Objekt
= None
Auswahl
= 0
Text
= None
SQL
Über SQL kann auf die verschiedenen Zusatzfelder folgendermassen zugegriffen werden:
Zusatzfeldtyp
Ausdruck SQL (Datenbankfeld)
Where-Ausdruck
Zeichen
Wert
Wert like "Aha%"
Wahr, Falsch
WertBoolean
WertBoolean=1 (wahr) WertBoolean=0 (falsch)
Ganzzahl
WertInteger
WertInteger >= 1000
Minuten
WertInteger
WertInteger >= 1000
Festkommazahl
WertCurrency
WertCurrency = 1350
Datum
WertDatum
WertDatum = "15.03.2017"
ANSI Text
WertBlob
WertBlob containing 'Newsletter' (Firebird) WertBlob like "%Newsletter%" (MS SQL)
Bild
WertBlob
WertBlob <> "" (für: es ist ein Bild zugeordnet)
Objekt
WertObject
WertObject in (SELECT bold_id from Tabelle where wert like "%AHA%")
Auswahl
WertInteger
WertInteger=0 (Reihenfolge gleich wie bei der Auswahl auf der Oberfläche: 0=erster Eintrag, 1=zweiter Eintrag, ...)
Unterschied zwischen typenabhängiger und typenunabhängiger Abfrage
In den meisten Fällen kommt das auf der Oberfläche auf dasselbe heraus, da schlussendlich meist ein String dargestellt wird.
Unterschied gibt vor allem bei Auswahl-Zusatzfeldern. Diese sind intern als Integer Zusatzfelder implementiert. Das bedeutet, dass die Expression zusatzfeldint(name) eine Zahl liefert. Wenn der Text der Auswahl angezeigt werden soll, dann sollte die expression zusatzfeldasstring(name) verwendet werden.
Ebenso liefern die typspezifischen OCL Operatoren NULL Werte, falls das Zusatzfeld den Wert NULL hat. Dies stellt aber in den meisten Fällen kein Problem dar, da NULL Werte als Leerstrings dargestellt werden. Falls ein NULL Wert Probleme macht, kann dies durch Verwendung von zusatzfeldAsString vermieden werden.
Tipps zum Umgang mit zusatzfeldobj
Der Operator zusatzfeldObj zum Abfragen von Objekt-Zusatzfeldern kann zu Fehlern führen, wenn er in einer OCL Expression auf einer Liste von Objekten angewendet wird. Die Fehlermeldung lautet:
TBoldObjectList.AddElement: Element not a TBoldObject
Beispiel: Objektzusatzfeld 'Niederlassung' auf Projektbearbeiter. Zeigt z.B. auf eine Adresse.
Die Anwendung von zusatzfeldObj auf eine Liste entspricht einer impliziten "collect" Operation. Diese schlägt fehl, weil zusatzfeldObj nicht direkt das verknüpfte Objekt, sondern das Verknüpfungsfeld liefert.
Eine Typumwandlung auf einen kompatiblen Objekttyp (den eigentlichen Typ des Objekts oder UserEintrag) behebt das Problem. Damit die Typumwandlung stattfinden kann, muss die collect Operation explizit formuliert werden.