Das Notes Forum
Lotus Notes / Domino Sonstiges => Tipps und Tricks => Thema gestartet von: Fedaykin am 16.05.07 - 11:50:09
-
Hallo zusammen
Habe mir eine Klasse gebaut, die mit Hilfe der Standardansicht dabei helfen kann das Aussehen der übrigen Ansichten anzupassen. Wer es brauchen kann viel Spass damit (wenn gute Verbesserungen hast Post den doch hier), ;D wer nur schlechte Kritik für meine Arbeit hat kann Sie ja einfach verbessern oder ignorieren. :P Hier der Code:
Klasse:
Class ViewRedesigner
'Diese Klasse dient zum übernehmen von Farben,
'Schriften und Aktionen von einer anderen Ansicht.
Private mDB As NotesDatabase
Sub New(db As NotesDatabase)
Set mDB=db
End Sub
'Durchläuft alle Ansichten und sammelt Informationen wie die Standardansicht,
'die Ansichtsnamen und die Aliases um dann RedesignView mit den Infos zu füttern.
Sub RedesignViewsFromDefault()
Dim strMasterView As String
Dim vwTemp As NotesView
Dim strViewNames() As String
Dim strViewAliases() As String
Dim i As Long
Forall objView In mdb.Views
Set vwTemp=objView
If vwTemp.IsDefaultView Then
strMasterView=vwTemp.Name
Else
Redim Preserve strViewNames(i) As String
Redim Preserve strViewAliases(i) As String
strViewNames(i)=vwTemp.Name
If Isarray(vwTemp.Aliases) Then
strViewAliases(i)=Join(vwTemp.Aliases,";")
End If
i=i+1
End If
End Forall
For i=Lbound(strViewNames) To Ubound(strViewNames)
RedesignView strMasterView,strViewNames(i),strViewAliases(i)
Next
End Sub
'Erstellt neue Ansicht basierend auf der Ansicht die bei MasterView
'mitgegeben wird, aber mit der Selektions Formel von der Ansicht
'die mit ViewName mitgegeben wird. Bei dieser neuen Ansicht
'werden dann die Spalten gelöscht und die von der Ansicht ViewName
'hinzugefügt. Danach werden noch die Formatierungen der ersten Spalte
'von MasterView in diese neue Ansicht übernommen.
Sub RedesignView(MasterView As String, ViewName As String, ViewAliases As String)
Dim vwMaster As NotesView
Dim vwRedesign As NotesView
Dim vwTemp As NotesView
Dim vcTemp As NotesViewColumn
Dim vcMaster As NotesViewColumn
Dim vcNew As NotesViewColumn
Dim i As Long
Set vwRedesign=mdb.GetView(ViewName)
Set vwMaster=mdb.GetView(MasterView)
If Not vwRedesign Is Nothing And Not vwMaster Is Nothing Then
Set vcMaster=vwMaster.Columns(1)
Set vwTemp=mdb.CreateView(ViewName & " redesigned",vwRedesign.SelectionFormula ,vwMaster ,False)
If Not ViewAliases="" Then
vwTemp.Aliases=Split(ViewAliases,";")
End If
If Not vwTemp Is Nothing Then
For i=vwTemp.ColumnCount To 1 Step -1
vwTemp.RemoveColumn(i)
Next
End If
i=1
Forall objColumn In vwRedesign.Columns
Set vcTemp=objColumn
Set vcNew=vwTemp.CopyColumn(vcTemp,i)
vcNew.HeaderFontColor=vcMaster.HeaderFontColor
vcNew.HeaderFontFace=vcMaster.HeaderFontFace
vcNew.HeaderFontPointSize=vcMaster.HeaderFontPointSize
vcNew.HeaderFontStyle=vcMaster.HeaderFontStyle
vcNew.FontColor=vcMaster.FontColor
vcNew.FontFace=vcMaster.FontFace
vcNew.FontPointSize=vcMaster.FontPointSize
vcNew.FontStyle=vcMaster.FontStyle
i=i+1
End Forall
End If
End Sub
End Class
Aufruf:
Sub Initialize
Dim session As NotesSession
Dim db As NotesDatabase
Dim objRedesigner As ViewRedesigner
Set session=New NotesSession
Set db=session.CurrentDatabase
Set objRedesigner=New ViewRedesigner(db)
objRedesigner.RedesignViewsFromDefault
End Sub
Gruss
Remo
-
Schöne Sache, aber ich bekomme bei
strViewAliases(i)=Join(vwTemp.Aliases,";")
einen "Type mismatch".
Alle Ansichten haben einen Alias (das sollte aber nicht Voraussetzung sein).
Andreas
-
Hallo Andreas
Da hast Du recht. Verdammt vermiss ich einen Ort wo mein ganzer Code Zentral ist. ::) Die Zeile hab ich in einem anderen durch so was ersetzt.
If Isarray(vwTemp.Aliases) Then
strViewAliases(i)=Join(vwTemp.Aliases,";")
End If
Gruss
Remo
-
Ok, das geht. Ich habe mir erlaubt, es in Deinem Code oben direkt auszuwechseln.
Danke für das Script!
Andreas
-
Hallo Andreas
Gern geschehen, freut mich wenn jemand mein Code gefällt. Ist sicher noch weit weg von perfekt :). Aber wer weiss vielleicht finden sich ja noch einige die Verbesserungen einbringen.
Gruss
Remo
-
Es spart mir bspw. das mühsame und wenig aufregende Design vorhandener Ansichten auf eine neue GUI. :D
Das "redesign" haue ich dann mit dem Configurator raus und gut ist.
Andreas
-
Das hört sich ja mal genial an :o
Vielen Dank für die tolle Idee, könnte mir in Zukunft viel Zeit ersparen 8)
Könnt ihr einem Script-Newbee vielleicht noch kurz erklären, wie ich das ganze benutze ???
Ich denke mal, ich bastel mir daraus eine Script-Bibliothek...!?
Wie kann ich denn das ganze dann aufrufen?
Liebe Grüße,
Gregor
-
Hi Gregor
Freut mich, soweit ich mich noch erinnere werden die Farben von der Standardschablone übernommen. Also wird praktisch die Standardansicht kopiert. Da mal alles rausgeworfen und neu zusammengebaut. Aber ist schon Weilchen her. Habe vorher schon mal etwas ähnliches versucht mit DXL, aber mit zweifelhaften Erfolg. Hab mich auch kurz mal überlegt ob man das vielleicht kombinieren kann. Würde mich sehr freuen wenn was hübsches daraus machst und stehe gerne zur Verfügung wenn ich wo helfen kann. Am besten versuchst das ganze erst mal als Test in einer leeren Datenbank. Den Code kannst in eine Scriptlibary rein schmeissen. Agent dann so was.
(Declaration)
use "ScriptlibName"
Sub Initialize()
dim session as new notessession
dim db as notesdatabase
Dim objViewDesign as ViewRedesigner
set db=session.currentdatabase
set objViewDesign=new ViewRedesigner(db)
objViewDesign.RedesignViewsFromDefault
End Sub
PS: Hoffe hab mich nicht vertippt da ich das jetzt schnell mal direkt hier getippt habe. ;D Auf diesem PC im Moment kein Lotus Notes drauf. Hoffe hilft.
Gruss
Remo
-
Hallo Remo!
Super, das ging ja fix ;D Werde es mal testen...
Würde mich sehr freuen wenn was hübsches daraus machst
Bei meinem jetzigen Kenntnisstand würde mir schon reichen, wenn ich es zum Laufen bekomme 8)
Aber dank deiner Anleitung sollte das klappen!
Vielen Dank!!!
-
Hallo
habe den Code mal überflogen. damit werden nur Spalten und nicht Ansichtseigenschaften ersetzt oder?
bubble
kurze Antwort reicht
-
Die Vorgabeansicht wird kopiert. Daraus entsteht die neue. Da werden dann Selektionsformel und die einzelnen Spalten reinkopiert.
-
OKey und was passiert mit den Ansichtsaktionen, fallen die raus?
bubble
-
Hi Bubble
Da kommen die von der Vorgabeansicht mit, nicht schön wird aber so sein. Habe den Code eigentlich mal für mich gemacht um nicht x Ansichten zu ändern (Aktionen sind da oft bei vielen Ansichten die selben). Bei den Aktionen hat man ja leider auch praktisch "fast" keine Möglichkeiten was zu erstellen oder modifizieren. Würde da nur die Möglichkeit über DXL sehen. Habe auch so etwas mal versucht. Leider waren Ansichten danach irgendwie zerschossen. Vielleicht würde eine Kombination von beidem zum Erfolg führen oder eventuell ist ja irgend etwas in der Hinsicht besser mit Lotus Notes 8 (DXL Import und Export oder LotusScript Klassen).
Gruss
Remo