In Vertec werden Objekte (z.B. Projekte, Leistungen) vielfach über Boolean Zusatzfelder kategorisiert. Die daraus resultierenden OCL-Abfragen der Art
leistungen->select(zusatzfeldbool('istmarkiert'))
sind nicht performant, da für jedes Element in der Liste die Zusatzfelder geladen werden müssen.
Um diese Anforderung performant abbilden zu können, wurde mit Vertec Version 6.1.0.10 die Möglichkeit geschaffen, User-Einträge mit Tags zu versehen, nach denen gefiltert werden kann.
Dafür gibt es ein Tags
Feld auf jedem UserEintrag (UserEinträge sind alle Objekte in Vertec, welche in Ordnern abgelegt werden können, wie Adressen, Projekte, Bearbeiter, Leistungen, etc.), welches via Python oder COM mit beliebigen Stichworten (Tags) befüllt werden kann.
Via Custom Renderer gibt es die Möglichkeit, Tags direkt in der Liste bzw. per Checkbox zu setzen. Die Anleitung dafür finden Sie im Abschnitt Anwendungsfälle - Einen Tag setzen.
Gesetzt werden die Tags mit der COM- oder Python Methode addtag(tagname), z.B.
argobject.addtag('mytag')
Abstände in den Tagnamen sind erlaubt. Anführungszeichen und Kommas sollten nicht verwendet werden, da es sonst Probleme mit der Abfrage geben kann aufgrund des Escapings.
Ist ein Tag bereits vorhanden, wird er nicht erneut hinzugefügt.
Die maximale Länge aller auf einem User-Eintrag gesetzten Tags ist gesamthaft 1000 Zeichen. Wird diese Länge überschritten, erscheint eine Fehlermeldung.
Abgefragt werden können die Tags via COM, Python oder OCL per hasTag:
hastag(tagname): boolean/integer
Der Rückgabewert ist
- OCL/COM: True, wenn der Tag gesetzt ist, und False, wenn es ihn nicht gibt.
- Python: 1, wenn der Tag gesetzt ist, und 0, wenn es ihn nicht gibt.
So können Listen mit Abfragen der Art leistungen->select(hasTag('istmarkiert'))
schnell und performant gefiltert werden.
Abfragen von Tags via SQL
Tags können auch via SQL abgefragt werden, zum Beispiel in SQL-Ordnern. Die entsprechende Abfrage geschieht mit einem Vergleich, z.B.
tags like '%tagname%'
Um Tags zu löschen, steht die COM- oder Python Methode removetag(tagname) zur Verfügung, z.B.
argobject.removetag('mytag')
Wird ein Tag gelöscht, den es nicht gibt, dann geschieht nichts, es gibt keinen Fehler.