Script: test folder performance

Script to test the performance of individual columns of a folder

Product line

Standard

|

Expert

Operating mode

CLOUD ABO

|

ON-PREMISES

Modules

Services & CRM

Budget & Phases

Purchases

Resource Planning

Business Intelligence

Created: 01.03.2021
Machine translated
Updated: 01.03.2021

This Python script allows to determine the performance of a folder (specified by the ID). As a result, a list is returned with the load time of each column.

Approach

Copy the below Script Text in the Script Editor .

Then find out the internal ID of the folder you want to analyze, right-click on the folder and select Properties. There you will find the Interne Id:

Now switch to the Script Editor and click on the Run arrow ( Ctrl+E). An input box will appear, where you specify the above-determined folder ID:

Click OK.

In the output window, the list of columns with the respective loading times appears:

List settings must be available for the columns to be determined, otherwise the message appears

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

If this message appears, you can simply make a column a little wider in the corresponding folder or change something else, then the script will work.

Version

  • From Vertec version 5.8.
  • In Cloud Clients with Restrict Scripting enabled from Vertec 6.3.0.16 (using the module time ).

Script

Evalfolderperformance.py

Script text

#
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))