Script: Listeneinstellungen kopieren

Produktlinien: Expert
Module: Leistung & CRM
Erstellt: 28.11.2005, Änderung:
Versionen vereinheitlicht. Es gibt nur noch ein Script.
Mehr ansehen

Kopiert die Listeneinstellung eines anderen Ordners in den aktuellen Ordner.

Ausführen

Muss auf dem Ordner ausgeführt werden, der die Listeneinstellungen erhalten soll. Für das Kopieren von Listeneinstellungen gibt es auch die Excel-Datei Listeneinstellungen kopieren (via Excel). Diese kann auch auf Containern ausgeführt werden.

Der Ordner, der die Listeneinstellungen enthält, muss über die ID angegeben werden. Sie können die ID einsehen, indem Sie auf dem Ordner mit rechter Maustaste Eigenschaften anwählen.

Versionen

Vertec-Version Besonderheiten Version Script
Ab Vertec 6.0 Berücksichtigt das Attribut ControlDefinition.
Folgende Attribute der Classic App werden nicht berücksichtigt: FontName, FontSize, FontStyle, Representation, TitelColor, TitelFontColor, TitelFontName, TitelFontSize.
CopyListeneinstellungen.py

Scripttext

# coding: windows-1252
#
#---Bezeichnung: Listeneinstellungen kopieren
#   Klassen: Eintrag
#   CondExpression:
#   ObjectScript: No
#   ContainerScript: Yes
#   EventType: Kein
#   EventClass:
#   EventMembers:
#   ExtendedRights: N
#---Kopiert die Listeneinstellung eines anderen
#   Ordners in den aktuellen Ordner. Muss auf dem Ordner
#   ausgeführt werden, der die Listeneinstellungen erhalten soll.
#   Der Ordner, von dem die Listeneinstellungen übernommen werden sollen,
#   muss über die ID angegeben werden.
#   Die ID finden Sie auf dem Ordner mit rechter Maustaste > Eigenschaften.
#---Ab Vertec Version 5.0.6. Berücksichtigt das GridDef Objekt.
#---28.11.2005, Vertec AG: erstellt
#---15.10.2013, mw: Angepasst auf 5.8: xTranslation gelöscht, Abbruchbedingungen implementiert.
#---10.03.2017, sr: Script in Python erstellt
#---21.03.2017, tk: Script ist auch auf LinkContainern ausführbar 
#---                Kopieren der Attribute editing, ghostrow und controlDefinition
#---20.03.18,  tik: Angepasst auf 6.2: Verweis auf alte Attribute entfernt (fontSize, fontName etc.)
#---                Exceptionhandling geändert, sodass Fehlermeldungen an den Anwender durchgereicht werden

def copymember(sourcegridcol, destinationgridcol, name):
    setattr(destinationgridcol, name, getattr(sourcegridcol, name))

def getsource(sourceid):
    result = None
    if sourceid:
        if not unicode(sourceid, 'utf-8').isnumeric():
            vtcapp.msgbox("Es sind nur Ganzzahlen als Eingabe zulässig.")
        else:
            source = None
            try:
                source = vtcapp.getobjectbyid(sourceid)
            except: 
                pass
            if not source:
                vtcapp.msgbox("Id ist ungültig.")
            elif not (source.eval("oclIsKindOf(LinkContainer) or oclIsKindOf(LinkRolle) or oclisKindOf(AbstractOrdner)")):
                vtcapp.msgbox("Objekt mit der Id [%s] ist von \nder Klasse [%s] und hat keine Listeneinstellungen." % (sourceid,source.eval("oclType.asString")))
            else:
                result = source
    return result


def main(destination):
    #Ist das aktuelle Objekt ein Ordner
    
    if not destination.eval('oclisKindOf(AbstractOrdner)'):
        if destination.eval("oclIsKindOf(LinkContainer)"):
            destination = destination.rolle
        else:
            destination = Nothing
            vtcapp.msgbox('Sie können dieses Skript nur auf einem Ordner und LinkContainern ausführen')
    
    if destination:
        sourceid = vtcapp.inputbox('Vertec','Geben Sie die ID des Ordners an, dessen Listeneinstellungen Sie übernehmen möchten','')
        source = getsource(sourceid)
        if source:
            #Analog zur destination
            if source.eval("oclIsKindOf(LinkContainer)"):
                source = source.rolle
            #Erst werden die bestehenden GridDef's gelöscht.
            for griddef in list(destination.griddefs):
                destination.griddefs.remove(griddef)
            #Hole nun die GridDefs des Source-Ordners
            for griddefs in source.griddefs:
                griddefd = vtcapp.createobject('GridDef')
                destination.griddefs.append(griddefd)
                #Kopiere die GridDefs
                copymember(griddefs, griddefd, 'klasse')
                copymember(griddefs, griddefd, 'zeilenhoehe')
                copymember(griddefs, griddefd, 'editing')
                copymember(griddefs, griddefd, 'ghostrow')
                #---Kann nun die gridcoldefs kopieren.
                for gridcols in griddefs.gridcols:
                    gridcold = vtcapp.createobject('GridColDef')
                    griddefd.gridcols.append(gridcold)
                    copymember(gridcols, gridcold, 'alignment')
                    copymember(gridcols, gridcold, 'breite')
                    copymember(gridcols, gridcold, 'color')
                    copymember(gridcols, gridcold, 'controlName')
                    copymember(gridcols, gridcold, 'expression')
                    copymember(gridcols, gridcold, 'writeableExpression')
                    copymember(gridcols, gridcold, 'fontColor')
                    copymember(gridcols, gridcold, 'nurLesen')
                    copymember(gridcols, gridcold, 'orderIdx')
                    copymember(gridcols, gridcold, 'rendererName')
                    copymember(gridcols, gridcold, 'sortOrder')
                    copymember(gridcols, gridcold, 'summiert')
                    copymember(gridcols, gridcold, 'tabStop')
                    copymember(gridcols, gridcold, 'titel')
                    copymember(gridcols, gridcold, 'controlDefinition')
            # Nur für Ordner:
            if source.eval('oclisKindOf(AbstractOrdner)') and destination.eval('oclisKindOf(AbstractOrdner)'): 
                destination.tabsproklasse = source.tabsproklasse

main(argobject)