Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Gruenkohl am 15.07.05 - 13:14:43
-
Hallo zusammen,
so weit mir bekannt ist, muss man persönliche Ansichten im Designer löschen, wenn sich an der Gestaltung etwas geändert hat.
Wenn ich dies versuche, bekomme ich oft die Fehlermeldung, "Aktuelle Ansicht kann nicht gelöscht werde".
Da ich einen Agenten schreiben wollte, per Button alle persönlichen Ansichten löscht, ist jetzt die Frage, was er macht, wenn der Fehler auftritt.
Gibt es eine Möglichkeit, die Ansichten auf jeden Fall zu löschen, auch wenn es die Aktuelle Ansicht ist?
Oder reicht es, wenn ich eine Maske aufrufe und dann die Ansichten löschen, d.h. es dürften keine aktuell sein.
Kann es sein, dass sich Notes die letzte Ansicht merkt und es dadurch zu dem Fehler kommt?
Danke und Gruss
Andreas
-
Vielleicht hilft dir das weiter:
Es aktualisiert die Private View wenn sich in der Template View etwas geändert hat:
Sub Postopen(Source As Notesuidatabase)
%REM ====================================================
This code removes out-of-date private views stored on the server.
Each time the database is opened, it searches for private views. For each private view, it compares
the Created date to the LastModified date of the corresponding shared view. If the shared view design
was updated after the private view was created, then we know that the private view's design is out of date.
The private view is then removed and the user is issued a message box advising that they close and reopen
the database.
For R5.0 and later, use the isPrivate property of NotesView rather than isPrivateView(v)
%END REM =================================================
Dim session As New notessession
Dim Eintrag As String
Eintrag = session.getenvironmentstring("Privviewdel")
Dim Heute As String
Dim masterView As NotesView
Heute = Today()
If Heute = Eintrag Then
Exit Sub
End If
Set db = Source.Database '...works in Database PostOpen event, modify for other contexts
count=0
privateviewtext=""
tot = Ubound(db.Views) + 1
Forall v In db.Views
count=count+1
Print "Suche veraltete, private Ansichten " & count & " von " & tot & "..."
If isPrivateView(v) Then
Set masterView = getMasterView(v) '...get the shared view on which this personal view is based
If Not(masterView Is Nothing) Then
If v.Created < masterView.LastModified Then '...if the shared view design was updated after the private view was
'...then remove the private view
privateviewtext=privateviewtext & Chr(10) & v.name
v.remove
End If
End If
End If
End Forall
If privateviewtext="" Then
Print "Keine veralteten Ansichten gefunden."
Else
Print ""
Messagebox "folgende private ""Meine"" Ansichten mußten entfernt werden:" & privateviewtext & Chr(10) & "Schließen Sie die Datenbank und gehen wieder hinein."
End If
Call session.setenvironmentvar("Privviewdel",Heute)
End Sub
Function isPrivateView(v As NotesView) As Integer
isPrivateView = False
Set vdoc = v.parent.GetDocumentByUnid( v.UniversalID )
If Not (vdoc Is Nothing) Then
If vdoc.HasItem("$Flags") Then
If Instr(vdoc.GetItemValue("$Flags")(0), "V") Then
isPrivateView = True
Exit Function
End If
End If
End If
End Function
Function getMasterView(pView As NotesView) As NotesView
Set db = pView.parent
viewList = db.views
Dim view As NotesView
Forall v In viewList
If v.Name = pView.Name Then
Set view = v
If Not(isPrivateView(view)) Then
Set getmasterView = v '...get the shared view on which this personal view is based
Exit Function
End If
End If
End Forall
Set getMasterView = Nothing
Print "Die ursprüngliche Vorlage der privaten Ansicht '" & pView.name & "' konnte nicht gefunden werden."
End Function
-
Hallo Andreas,
oder das hier:
http://www-10.lotus.com/ldd/sandbox.nsf/ecc552f1ab6e46e4852568a90055c4cd/67a6e3158e101e7488256ac70065bced?OpenDocument
Gruß
Spalter :)
-
@robertpp:
Super, danke. Genau so was habe ich gesucht. Klappt auch wunderbar.
@Spalter:
Das von robertpp hat schon geklappt. Aber danke.
Gruss Andreas
-
... Wenn ich dies versuche, bekomme ich oft die Fehlermeldung, "Aktuelle Ansicht kann nicht gelöscht werde".
Oder reicht es, wenn ich eine Maske aufrufe und dann die Ansichten löschen, d.h. es dürften keine aktuell sein.
Kann es sein, dass sich Notes die letzte Ansicht merkt und es dadurch zu dem Fehler kommt?
Hallo Andreas,
hierzu noch eine Erläuterung: Ja, der Client merkt sich, welche Ansicht zuletzt geöffnet war (es könnte ja sein, dass die DB damit wieder standardmässig geöffnet werden soll). Dadurch kannst Du diese "aktuelle Ansicht" nicht ohne weiteres löschen - Du musst vor dem Schliessen der DB zunächst irgendeine andere Ansicht öffnen.
Mit Masken hat das aber gar nichts zu tun - die Info kommt aus dem Client, nicht aus dem Designer.
HTH,
Bernhard