Script: Ordnerperformance testen

Script zum Testen der Performance von einzelnen Spalten eines Ordners

Product line

Standard

|

Expert

Operating mode

CLOUD ABO

|

ON-PREMISES

Modules

Services & CRM

Budget & Phases

Purchases

Resource Planning

Business Intelligence

Created: 01.03.2021
Updated: 01.03.2021

Dieses Python Script ermöglicht es, die Performance eines (über die ID angegebenen) Ordners zu ermitteln. Als Resultat wird eine Liste zurückgeliefert mit der Ladezeit der einzelnen Spalten.

Vorgehen

Kopieren Sie untenstehenden Scripttext in den Script Editor .

Eruieren Sie dann die Interne Id des Ordners, den Sie analysieren wollen: Klicken Sie mit der rechten Maustaste auf den Ordner und wählen Sie Eigenschaften. Darin finden Sie die Interne Id:

Nun wechseln Sie in den Script Editor und klicken auf den Pfeil Ausführen (Ctrl+E). Es erscheint eine Inputbox, wo Sie die oben ermittelte ID des Ordners angeben:

Klicken Sie auf OK.

Im Ausgabefenster erscheint die Liste der Spalten mit den jeweiligen Ladezeiten:

Für die zu ermittelnden Spalten müssen Listeneinstellungen vorhanden sein, sonst erscheint die Meldung

Der angegebene Ordner hat keine persistenten Spaltendefinitionen. Sie können erstellt werden durch eine minimale Änderung, z.B. einer Spaltenbreite.

Wenn diese Meldung erscheint, können Sie im entsprechenden Ordner einfach eine Spalte etwas breiter machen oder sonst etwas ändern, danach funktioniert das Script.

Version

  • Ab Vertec Version 5.8.
  • In Cloud Clients mit eingeschaltetem Restrict Scripting ab Vertec 6.3.0.16 (verwendet das Modul time ).

Script

EvalOrdnerperformance.py

Scripttext

#
import time
import vtcapp

# Zu evaluierenden Ordner per interne ID definieren
ordid = vtcapp.inputbox("Ordnerperformance", "ID des Ordners eingeben", "")
try:
    ord = vtcapp.getobjectbyid(ordid)
except:
    vtcapp.msgbox("Kein Ordner mit dieser ID gefunden.",0,"Ordnerperformance")
else:
    if not ord.evalocl("self->oclIsKindOf(AbstractOrdner)"):
        vtcapp.msgbox("Kein Ordner mit dieser ID gefunden.",0,"Ordnerperformance")
    else:
        # Objekte des Ordners laden.
        start = time.time()
        lstobj = ord.evalocl("eintraege.list")
        end = time.time()
        print("{} Ordnerobjekte laden: {}".format(len(lstobj), str(end-start)))
        # Spaltendefinitionen des Ordners(boldId) als Liste erzeugen
        lstcols = ord.evalocl("gridDefs.gridcols->orderby(orderidx)")
        # Falls keine Spaltendefinitionen vorhanden sind, dann gibt
        # es vermutlich keine persistenten. Den User darauf hinweisen.
        if not lstcols:
            vtcapp.msgbox("Der angegebene Ordner hat keine persistenten Spaltendefinitionen. Sie können erstellt werden durch eine minimale Änderung, z.B. einer Spaltenbreite.",0,"Ordnerperformance")
        else:
            # zur Messung der Laufzeit durch Liste der Spalten iterieren
            for col in lstcols:
                start = time.time()
                #zusätzlich durch die Ordnerelemente iterieren, um das
                #Berechnen der OCL-Expression für jede Zeile/Zelle zu simulieren
                for obj in lstobj:
                 temp = obj.evalocl(col.expression)
                end = time.time()
                if col.titel:
                    titel = col.titel
                else:
                    titel = "(kein Spaltentitel)"
                print(titel.encode() + ':', str(end-start))
Bitte wählen Sie Ihren Standort