Hallo,
ich möchte in einer DB, in der User Private views (shared, private on first use) erstellen dürfen, diese views beim Schließen der DB löschen (QueryClose).
Habe schon alle Beiträge zu diesem Thema gelesen, konnte jedoch keine Lösung finden.
Dim session As New NotesSession
Dim db As NotesDatabase
Dim vUserName As Variant
Dim view As NotesView
Dim docView As NotesDocument
Dim itmFlags As NotesItem
Set db = session.CurrentDatabase
'Get current user
vUserName = session.UserName
Forall v In db.Views
Set view = v
'Get flag for private view
Set docView = db.GetDocumentByUNID( view.UniversalID )
Set itmFlags = docView.GetFirstItem( "$Flags" )
'Check if view is private and readers is current user
If Instr( itmFlags.Values( 0 ), "V" ) And _
v.Readers = vUserName Then
Call v.Remove
End If
End Forall
Natürlich ergibt der Vergleich v.Readers = v.UserName ein Type Mismatch, da ja
vUserName Variant,
v.Readers Variant
v.Readers(0) String
Leider kriege ich v.UserName nicht so deklariert, dass der Vergleich durchläuft. ???
Habt Ihr vielleicht eine Idee?
cu
der B@sti
Ja klar, Readers ist doch Names. Danke.
Mein Code sieht jetzt so aus:
Dim session As New NotesSession
Dim db As NotesDatabase
Dim vUserName As Variant
Dim view As NotesView
Dim docView As NotesDocument
Dim itmFlags As NotesItem
Set db = session.CurrentDatabase
'Get current user
Set vUserName=New notesname(session.username)
Forall v In db.Views
Set view = v
'Get flag for private view
Set docView = db.GetDocumentByUNID( view.UniversalID )
Set itmFlags = docView.GetFirstItem( "$Flags" )
'Check if view is private
If Instr( itmFlags.Values( 0 ), "V" ) Then
'Check if readers is current user
If v.Readers = vUserName.canonical Then
Call v.Remove
End If
End If
End Forall
Leider tritt der Type Mismatch noch immer auf. :(
cu
der B@sti
Dank dir,
aktueller Stand:
Dim session As New NotesSession
Dim db As NotesDatabase
Dim vUserName As Variant
Dim view As NotesView
Dim docView As NotesDocument
Dim itmFlags As NotesItem
Set db = session.CurrentDatabase
'Get current user
Set vUserName=New notesname(session.username)
Forall v In db.Views
Set view = v
'Get flag for private view
Set docView = db.GetDocumentByUNID( view.UniversalID )
Set itmFlags = docView.GetFirstItem( "$Flags" )
'Check if view is private
If Instr( itmFlags.Values( 0 ), "V" ) Then
'Check if readers is current user
equality=False
For i=0 To Ubound(v.readers)
If v.readers(i)=vusername.canonical Then
equality=True
Exit For
End If
Next
If equality = True Then
Call v.Remove
End If
End If
End Forall
Beim Schließen der DB tritt folgender Fehler auf:
Notes Error: invalid or nonexistent document ()
Wenn ich versuche per Debugger rauszukriegen, wo der Fehler auftritt, schmiert Notes komplett ab (NSD).
Dachte weil ich eine View löschen will, die noch offen ist, habe aber keine Private view offen.
???
der B@sti
Hi,
nachdem ich jetzt weiter getestet habe, ist folgendes klar:
Existiert eine Private view für den User wird diese korrekt gelöscht. Existiert keine, stürzt Notes komplett ab (NSD running). :(
Aktuell sieht das so aus:
Dim session As New NotesSession
Dim db As NotesDatabase
Dim vUserName As Variant
Dim view As NotesView
Dim docView As NotesDocument
Dim itmFlags As NotesItem
Set db = session.CurrentDatabase
'Get current user
Set vUserName=New notesname(session.username)
Forall v In db.Views
Set view = v
'Check if readers is empty
If Not Isempty(v.readers) Then
'Get flag for private view
Set docView = db.GetDocumentByUNID( view.UniversalID )
Set itmFlags = docView.GetFirstItem( "$Flags" )
'Check if view is private
If Instr( itmFlags.Values( 0 ), "V" ) Then
'Check if readers is current user
equality=False
For i=0 To Ubound(v.readers)
If v.readers(0)=vusername.canonical Then
equality=True
Exit For
End If
Next
If equality = True Then
Call v.Remove
End If
End If
End If
End Forall
Hat jemand noch eine Idee, wie ich das verhindern kann?
Dank schonmal im voraus.
der B@sti