Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Wiesel am 24.11.06 - 09:41:49
-
Hallo!
Das Thema ist zwar schon alt und durchgekaut, aber bei mir will das einfach nicht laufen.
Ich habe in einer Datenbank eine private Ansicht, auf der ein Update gemacht werden soll. Nun ist das ja so eine Sache. Updates werden nicht einfach über private Ansichten gezogen, es sei denn man löscht sie und baut sie dann mittels der geänderten Vorlage wieder auf.
Nun habe ich hier im Forum nochmal geschaut und 2 Varianten ausprobiert, die leider beide nicht liefen.
Ich habe im QueryClose der Datenbank folgendes ausprobiert:
Variante 1
Sub Queryclose(Source As Notesuidatabase, Continue As Variant)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim strView As Boolean
Set db = session.CurrentDatabase
Set view = db.GetView("Schreibtisch")
strView = view.IsPrivate
If strView = True Then
'löschen
Call view.Remove()
End If
End Sub
Diese Variante funktioniert erst wunderbar. Dann habe ich das mit einem Testuser getestet und es ging nicht mehr. Und bei mir dann auch nicht mehr.
In der Zeile strView = view.IsPrivate kam die Fehlermeldung "Object variable not set".
Variante 2
Sub Queryclose(Source As Notesuidatabase, Continue As Variant)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim docView As NotesDocument
Dim itmFlags As NotesItem
Set db = session.CurrentDatabase
Forall v In db.Views
Set view = v
Set docView = db.GetDocumentByUNID( view.UniversalID )
If Not docView Is Nothing Then
Set itmFlags = docView.GetFirstItem( "$Flags" )
If Instr( itmFlags.Values( 0 ), "V" ) Then
Call view.Remove
End If
End If
End Forall
End Sub
Diese Variante läuft einfach durch ohne etwas zu unternehmen. Habe mir das dann mal genauer angeschaut und festgestellt, dass meine private Ansicht (Vorlage und private A.) nicht den Wert "V" sondern "pY" haben. Habe das V also dadurch ersetzt, aber trotzdem passierte rein gar nichts. Und wenn beide Ansichten den Wert haben, woher unterscheidet Notes dann überhaupt die Vorlage und die private Ansicht?
Hilfe!!!
-
Es gibt einen Beitrag wo die private Ansicht nur dann gelöscht wird wenn ein update notwenig ist. Ich weiß nicht genau wo sich dieser Eintrag befindet.
Ich mach mich schnell mal auf die suche.....
-
Hab es gefunden. Zwar nicht im Forum aber ich hab mir das mal aufgehoben:
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
gruss robert
-
Danke für den Script. War ich auf meiner Suche im Forum auch mal drauf gestossen. Hab ich eingesetzt und ausprobiert.
Aber es passiert nach vor nichts. Keine Fehlermeldung, keine Aktualisierung. Es rennt einfach durch.
-
Ja dann geh mal mit dem Script Debugger durch und schau was er ausführt.
Bekommt er die Masterview schauen ob er die PrivateView erkennt usw.
Einfach ausprobieren was das Script macht. Das musst schon selber ausprobieren
Also irgendwas muss er ja machen!
robert