Hallo zusammen,
ich bräuchte wieder mal eure Hilfe...
Ich habe vor einigen Jahren eine Datenbank für Reiseanträge erstellt, Diese beinhaltet drei private Ansichten. Diese sind als gemeinsam, privat bei Erstbenutzung erstellt worden.
Diese sollen dem angemeldeten User seine Reiseanträge darstellen,
Einmal "my requests", my approved requests, my denied requests
Ich weiß das diese Lösung nicht das gelbe vom Ei ist... ich habe einiges an Beiträgen hier in den letzten Tagen gelesen.
Es war damals mein erstes Programmier Objekt..
Das ganze hat aber reibungslos funktioniert, die Kollegen haben immer Ihre Anträge gesehen und gut war.
Vor 1 1/2 Jahren haben wir einen Cluster in Betrieb genommen haben. Auf dem Server, auf dem die Datenbank ursprünglich mal erstellt wurde wurden die Ansichten korrekt dargestellt, auf dem zweiten Cluster wurde die Ansicht des Users gespeichert, der die DB dort das erste Mal geöffnet hatte.
Es wurden keine privaten Ansichten für die einzelnen User erstellt.
Unsere User haben alle Autoren Rechte auf der Datenbank, die Option ist gesetzt das private Ansichten erstellt werden dürfen.
Vor zwei Wochen hatten wir einen Server Crash des "Hauptservers", nach Wiederherstellung des Servers waren dann die ganzen Ansichten für User nicht mehr sichtbar, auf dem Server selber war eine Ansicht gespeichert, es wurde keine private erstellt...
Ich habe diese auch schon gelöscht, bzw. neu erstellt auf dem Server, per Script versucht die Ansichten zu löschen, aber der effekt bleibt der gleiche. Der User, der die DB als erstes öffnet, dessen Einträge sind für alle sichtbar.
Ich hab versucht das Script irgendwie anzupassen was ich in dem Beitrag zu dem Thema gefunden habe, bin da aber irgendwie überfordert..
https://atnotes.de/index.php/topic,33685.0.htmlLt. dem Beitrag kann es in Postopen eingefügt werden, ich habe das versucht anzupassen, bin aber mangels Know-How gescheitert, da ich einfach zuwenig programmiere..
Sub Postopen(Source As Notesuidocument)
%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
Dim db As NotesDatabase
Heute = Today()
If Heute = Eintrag Then
Exit Sub
End If
Set db = current.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 isPrivate(v) Then
Set masterView = getMasterView(v) '...get the shared view on which this personal view is based ====> bekomme hier die Meldung Type Mismatch on: V
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
Function isPrivate(v As NotesView) As Integer
isPrivate = 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
isPrivate = 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(isPrivate(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
Das ist der Code den ich geändert hatte...
es sieht für mich aber so aus als ob die Ansichten gar nicht angelegt werden.
Bin um den ein oder anderen Tipp dankbar, hänge da echt fest und die Ansichten sollten so langsam wieder für die User sichtbar sein.
Wenn noch etwas unklar sein sollte, einfach fragen.
Ich mache ganz selten was in Script, muss mich da immer wieder neu reinlesen, wenn ich mal Luft habe stelle ich das auch mal um, aber jetzt akut bräuchte ich irgendwie eine Lösung.
Vielen Dank euch.