Domino 9 und frühere Versionen > ND6: Entwicklung

Private view eines Users löschen - Deklarationsprobleme

(1/5) > >>

theBastian:
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.


--- Code: ---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

--- Ende Code ---

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

Gandhi:
vusername.canonical gibt den ensprechenden String (CN=.../OU=.../O=..../C=...) aus.

Gandhi:
Ach ja, vusername muss dazu natürlich noch ein Notesname sein:
set vusername=new notesname(session.username)

theBastian:
Ja klar, Readers ist doch Names. Danke.
Mein Code sieht jetzt so aus:


--- Code: ---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

--- Ende Code ---

Leider tritt der Type Mismatch noch immer auf.  :(

cu
der B@sti

Gandhi:
Nun, da v.readers ein Array von Strings sein sollte musst Du den String vusername.canonical gegen die einzelnen Elemente prüfen:

equality=false
for i=0 to Ubound(v.readers)
  if v.readers(i)=vusername.canonical then
    equality=true
    exit for
  end if
next

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln