Beiträge von Amadeo Vergés (Zühlke Engineering AG)

    Ich habs schon angeschaut, aber dort nicht gesehen, dass man Daten (Auslagen) importieren kann.
    Von AirPlus bekommen wir (lange) Listen mit Tickets, Hotelübernachtungen, etc. inkl. Kosten, MWST und auch Projekt/Phasen.
    Diese Daten muss man dann noch Bereinigen (z.B. falsche Projekte/Phasen) und den Auslagentyp zuordnen, etc.
    Die aktuelle XLS/Makro-Lösung unterstützt teilweise dabei, aber eben: von Visual Basic Makros möchten wir weg.

    Ich habe eine Script erstellt, dass auf einer Liste von Projekten etwas ändert.
    Nun möchte ich, dass dieses Script nur auf (einem) definierten SQL-Ordner erscheint.


    Ich weiss, dass ich die Ausführung im Python-Code beschränken kann (über den "Container"), aber das erfüllt nicht meinen Wunsch dass das Script nur auf einem spezifischen Ordner erscheint.
    Wie löse ich das mit der Expression für die "Condition" in den Script-Einstellungen?

    Wir nutzen den Alias auf dem Adresseintrag als Pfad zur Dokumentablage. Das OCL sieht so aus:

    Code
    Adresses\%if oclistypeof(Kontakt) then oclastype(Kontakt).firma.name+'\x'.substring(1,1) + name +' '+oclAsType(Kontakt).vorname else name + if oclIsTypeOf(Person) then ' '+oclAsType(Person).vorname else '' endif endif%

    Nun habe wir aber (Firmen-)Namen mit Sonderzeichen (z.B. "O'Reilly Inc."), die dann zu problematischen Pfadnamen führen und die ich entfernen möchte. Ich plane dazu replaceRegex nutzen. Ist das der richtige Ansatz oder gibt es eine bessere Lösung? Was für eine Regex-expression empfiehlt sich?

    Mein Ansatz: "[^0-9a-zA-Z:,]+"

    Gerne teile ich eine hilfreiche Entdeckung, die mir Zeit und Aufwand gespart hat.
    Aufgabe war ein Vertec-Script, in welchem eine Phase aus einer Phasen-Liste (vtclistPhase) gewählt werden kann. Angezeigt zur Auswahl soll der jeweilige Phasen-Code (Text).
    Nun hat eine Phase ein "&" im Code, was einen Fehler produziert, da das "&" (wie auch "<", ">" etc.) eine spezielle Bedeutung haben. Hier das ursprünglich Script:

    Wie also das Problem lösen und den Text "Escapen" (Sonderzeichen anpassen), dass kein Fehler mehr auftritt? Betroffen war folgender Code-Teil.

    {% for vtcPhase in vtclistPhase %}
    <ComboBoxItem Value="{{vtcPhase.objid}}" Text="{{vtcPhase.code}}" />
    {% endfor %}

    Wie immer zuerst in der Vertec-Knowledgebase nachschauen :) Dort die überraschend über einen Link die einfache Lösung gefunden. Das Script/Dialogbox nutzt die Vertec python function rendertemplate dort wurde ich fündig: Die Lösung besteht aus 2 (!) Zeichen: |e : Dieser Parameter übernimmt das Escaping. Vielleicht ist dies auch für andere hilfreich.

    {% for vtcPhase in vtclistPhase %}
    <ComboBoxItem Value="{{vtcPhase.objid}}" Text="{{vtcPhase.code|e}}" />
    {% endfor %}

    Wir nutzen bei uns das Sperrdatum. (Mitarbeitende können keine Leistungen mehr im Vormonat erfassen).


    Was wir auch nutzen sind sogenannte "intern Projekte" die jeweils für ein Kalenderjahr definiert sind. Jetzt, beim Jahresabschluss stelle ich wiedereinmal fest, dass auf solchen Projekten (z.B. für 2023) Leistungen in der Zukunft (2024) erfasst wurden (Ob bewusst oder durch einen Tippfehler sei dahingestellt). Dies bedingt jeweils Umbuchungsaufwand.
    Frage: Gibt es eine elegante Variante, Leistungserfassungen z.B. nach dem "Enddatum" einer Phase zu verhindern? Ist der richtige Weg, dass über ein Constraint abzufangen?

    Auch wir nutzen Vertec auch "on-premise" und sind mit den gleichen Herausforderungen konfrontiert. Gerne teile ich hier wie wir das gelöst haben:
    Wir nutzen drei parallele, unabhängige Vertec-Instanzen:

    • VertecPROD -> Unser Produktiv-System mit aktuell 2000 Usern und Anbindungen an ein DMS, SAP und weitere Systeme
    • VertecENT -> für grössere Entwicklungsprojekte. Diese Instanz nutzt auch Vertec für Aufgaben, die wir an unseren Betreuer übergeben
    • VertecTEST -> Diese kann (wie ENT) per Knopfdruck von PROD kopiert werden. Dieses System ist auch an die Test-System anderer Systeme angebunden (SAP, DMS)

    In VertecTEST können wir komplexeren Supportfällen nachgehen oder wie sie es erwähnen, Erweiterungen und Scripts vorbereiten und testen bevor diese nach PROD übernommen werden. Für VertecTEST haben auch "PowerUser" Zugriff, die ich gerne für spezielle Test einspanne.

    Alle Scripts, Klasseneinstellungen (XML), Report-Vorlagen sind bei uns in Bitbucket/GIT verwaltet. Ich arbeite mit Visual Studio Code, wo eine direkte Anbindung an Git habe, das ist sehr komfortabel und gibt mir die Sicherheit für ein "Fallback". (Hier wäre es natürlich praktisch,wenn man Scripts in Vertec per Klick in ein vordefiniertes Verzeichnis speichern und von dort laden könnte. Dafür beherrsche ich inzwischen copy/paste von und nach Vertec praktisch blind ;)

    UnitTests sind praktisch und kenne ich vorn früher, aber in Vertec will ich ja meist direkt das "Endresultat" sehen. Darum kommt es nur sehr selten vor das ich in Vertec ein Testprogramm für eine Funktion schreibe. Wichtig ist mir vielmehr eine saubere, modulare Script-Programmierung, welche auch ein Review durch einen Kollegen/in oder den Vertec-Beteuer vereinfacht. (Zudem musste ich schon vor vielen Jahren durch die harte Schule von Claudio Pietra, als er noch unser Betreuer war, und er hat mir oft diesbezüglich auf die Finger geklopft.).

    Wir nutzen vermehrt die Python-library openpyxl um Daten aus Excel mittels Script direkt nach Vertec zu importieren.
    Dazu muss man selber die für die aktuelle Python-Version von Vertec gültige Version von openpyxl ins Vertec-Verzeichnis kopieren.

    Könnte Vertec diese (die jeweils gültige Version) openpyxl-lib in Vertec vorinstallieren?

    Für Interessierte hier ein sehr einfaches Script mit openpyxl das ich genutzt habe ein Feld (member) auf allen Mitarbeitern unserer Firma zu aktualisieren. In diesem Fall wusste, ich in welcher Excel-Spalte (nummer) sich die Daten befinden. Man kann aber auch über den Spaltennamen zugreifen und vieles mehr.

    Die Möglichkeit Zellen in Listen Expression-gesteuert einzufärben ist nützlich und hilfreich. Bei uns hilft dies Listenwerte die kontrolliert werden müssen, benutzerfreundlich zu gestalten (z.B. mit rot/grün-Hintergrundfarbe, etc.)

    Wenn die Zellenwerte an sich eine (komplexe) OCL-Expression sind, muss man jedoch diese 1:1 die die "Farbbedingung" übernehmen, wenn diese die Einfärbung steuern sollen.

    Gibt es es die Möglichkeit, über eine vordefinierte Variable einfacher auf den Wert der Zelle zuzugreifen, statt die OCL-Expression nochmals hier einzufügen?

    Wenn nein, wäre das eine Anregung für die Zukunft, hilft dies doch bei der "Wartung" von Listen, da nicht die gleiche Expression an mehreren Orten angepasst werden muss.
    Beispiel was ich meine (Expression an sich ist nicht von Bedeutung):

    OCL-Espression für die Liste sei:

    (planWertExt+planAuslagenWert+planSpesenWert).round

    Wenn ich nun die Hintergrundfarbe abängig von diesem Werte definiere, könnt das z.B.so aussehen:

    Was ich mir wünsche, wäre z.B. eine Variable "cellValue" mit der man dann die "Einfärbeexpression" so formulieren kann.
    cellValue enthält das Ergenis der Spalten expression.

    Ich habe ein Excel-Import-Script geschrieben, mit dem Vertec Objekte in einen jeweils neu angelegten "Importordner" (mit der entsprechenden OCL-Klasse) abgelegt werden.

    (im wesentlichen wird die boldID aus dem File gelesen und dann dass entsprechende Objekt in den Ordner gelegt. Über weitere im gleichen Excel mitgelieferte Werte kann ich dann die Objekte automatisiert in Vertec aktualisieren).

    Soweit so gut. Als Zugabe fürs Auge wollte ich das Icon der neu angelegten Ordner gleich mit dem entsprechenden Icon versehen. Der scheint nicht möglich zu sein. Ich kann den IconIndex eines Ordners wohl mit Python auslesen, nicht aber setzen.
    Habe ich was übersehen oder weshalb geht das nicht als einzige Ordnereigenschaft?