Autor Thema: Private Ansichten löschen  (Gelesen 2120 mal)

Offline Wiesel

  • Aktives Mitglied
  • ***
  • Beiträge: 188
  • Geschlecht: Weiblich
Private Ansichten löschen
« 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!!!

Offline robertpp

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 940
  • Geschlecht: Männlich
Re: Private Ansichten löschen
« Antwort #1 am: 24.11.06 - 09:47:30 »
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.....
------------------------------------------------------------
1250 Notes User Client von 5.0.5 bis 6.5.4     WIN2000, XP
14 Notes Server von 6.5 bis 6.5.4 WIN2000, XP

32   Notes Server von 5.0.1 bis 6.5.4 in unserer Domain
323 Notes Server weltweit mit 38000 User in einem Adressbuch

Offline robertpp

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 940
  • Geschlecht: Männlich
Re: Private Ansichten löschen
« Antwort #2 am: 24.11.06 - 09:49:53 »
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
------------------------------------------------------------
1250 Notes User Client von 5.0.5 bis 6.5.4     WIN2000, XP
14 Notes Server von 6.5 bis 6.5.4 WIN2000, XP

32   Notes Server von 5.0.1 bis 6.5.4 in unserer Domain
323 Notes Server weltweit mit 38000 User in einem Adressbuch

Offline Wiesel

  • Aktives Mitglied
  • ***
  • Beiträge: 188
  • Geschlecht: Weiblich
Re: Private Ansichten löschen
« Antwort #3 am: 24.11.06 - 10:11:26 »
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.

Offline robertpp

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 940
  • Geschlecht: Männlich
Re: Private Ansichten löschen
« Antwort #4 am: 24.11.06 - 10:36:23 »
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


------------------------------------------------------------
1250 Notes User Client von 5.0.5 bis 6.5.4     WIN2000, XP
14 Notes Server von 6.5 bis 6.5.4 WIN2000, XP

32   Notes Server von 5.0.1 bis 6.5.4 in unserer Domain
323 Notes Server weltweit mit 38000 User in einem Adressbuch

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz