Autor Thema: private Ansichten zeigen die falschen Inhalte an  (Gelesen 1425 mal)

Offline Sommersprosse

  • Senior Mitglied
  • ****
  • Beiträge: 296
  • Geschlecht: Weiblich
private Ansichten zeigen die falschen Inhalte an
« am: 02.03.20 - 14:37:07 »
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.html

Lt. 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.
Gruß Ulli

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz