Autor Thema: Private view eines Users löschen - Deklarationsprobleme  (Gelesen 3287 mal)

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
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

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
« Letzte Änderung: 30.10.05 - 17:27:49 von SKL74 »
Domino, Notes, Sametime

Offline Gandhi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 918
  • Geschlecht: Männlich
  • Domino for the masses
Re: Private view eines Users löschen - Deklarationsprobleme
« Antwort #1 am: 25.10.05 - 09:21:17 »
vusername.canonical gibt den ensprechenden String (CN=.../OU=.../O=..../C=...) aus.
Der "Wenn ich" und der "Hätt' ich" das sind zwei arme Leut'
oder für den Süden:
Hatti Tatti Wari - san drei Larifari

Offline Gandhi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 918
  • Geschlecht: Männlich
  • Domino for the masses
Re: Private view eines Users löschen - Deklarationsprobleme
« Antwort #2 am: 25.10.05 - 09:23:14 »
Ach ja, vusername muss dazu natürlich noch ein Notesname sein:
set vusername=new notesname(session.username)
Der "Wenn ich" und der "Hätt' ich" das sind zwei arme Leut'
oder für den Süden:
Hatti Tatti Wari - san drei Larifari

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
Re: Private view eines Users löschen - Deklarationsprobleme
« Antwort #3 am: 25.10.05 - 11:00:30 »
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

Leider tritt der Type Mismatch noch immer auf.  :(

cu
der B@sti
Domino, Notes, Sametime

Offline Gandhi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 918
  • Geschlecht: Männlich
  • Domino for the masses
Re: Private view eines Users löschen - Deklarationsprobleme
« Antwort #4 am: 25.10.05 - 11:27:42 »
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
Der "Wenn ich" und der "Hätt' ich" das sind zwei arme Leut'
oder für den Süden:
Hatti Tatti Wari - san drei Larifari

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
Re: Private view eines Users löschen - Deklarationsprobleme
« Antwort #5 am: 25.10.05 - 12:39:56 »
Dank dir,

aktueller Stand:

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
			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
Domino, Notes, Sametime

Offline Gandhi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 918
  • Geschlecht: Männlich
  • Domino for the masses
Re: Private view eines Users löschen - Deklarationsprobleme
« Antwort #6 am: 25.10.05 - 14:11:03 »
Das Script läuft durch?
Falls nein: Was ist die letzte vom Debugger angezeigte Zeile, wenn Du schrittweise durchgehst?

Die Fehlermeldung hört sich so an, als sei das Dokument nicht mehr vorhanden - bzw. schon gelöscht.
Ach ja: Ist das eine View auf dem Server oder auf dem Desktop?
Der "Wenn ich" und der "Hätt' ich" das sind zwei arme Leut'
oder für den Süden:
Hatti Tatti Wari - san drei Larifari

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
Re: Private view eines Users löschen - Deklarationsprobleme
« Antwort #7 am: 25.10.05 - 14:36:08 »
Also View ist natürlich in der DB, an die in der desktop.ndk komme ich ja so nicht ran.

Wenn ich versuche per Debugger rauszukriegen, wo der Fehler auftritt, schmiert Notes komplett ab (NSD).
 <--- darum weiß ich nicht, in welcher Zeile der Fehler auftritt.
Domino, Notes, Sametime

Offline Gandhi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 918
  • Geschlecht: Männlich
  • Domino for the masses
Re: Private view eines Users löschen - Deklarationsprobleme
« Antwort #8 am: 25.10.05 - 14:38:02 »
Bereits beim Starten des Debuggers ???
Der "Wenn ich" und der "Hätt' ich" das sind zwei arme Leut'
oder für den Süden:
Hatti Tatti Wari - san drei Larifari

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
Re: Private view eines Users löschen - Deklarationsprobleme
« Antwort #9 am: 25.10.05 - 14:59:20 »
Bereits beim Starten des Debuggers ???

Sobald der Debugger anspringen sollte, schmiert Notes ab.
Domino, Notes, Sametime

Offline Gandhi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 918
  • Geschlecht: Männlich
  • Domino for the masses
Re: Private view eines Users löschen - Deklarationsprobleme
« Antwort #10 am: 25.10.05 - 15:09:52 »
OK, dann musst Du wohl per Print debuggen - was das generelle Absturzproblem - dass doch sehr eigenartig ist (sieht so aus, als ob was beim Interpretieren direkt am Anfang schief läuft).

Prüfe doch mal, ob v nothing ist (lass es Dir ausdrucken)
Evtl. ist es dann schon mit dieser Prüfung getan - wenn das Dokument tatsächlich schon gelöscht ist. Ist das der Fall?
Der "Wenn ich" und der "Hätt' ich" das sind zwei arme Leut'
oder für den Süden:
Hatti Tatti Wari - san drei Larifari

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
Re: Private view eines Users löschen - Deklarationsprobleme
« Antwort #11 am: 25.10.05 - 15:59:35 »
So, habe jetzt mal fast alle views gelöscht (manuell) und debuggt.

Nach der 4. oder 5. Ansicht schmiert Notes bei

--> End Forall

ab.

Scheint also so, als ob das Ende der Views nicht erkannt wird, oder so...

Im Fault Recovery Report steht "Access Violation" als Grund für den Absturz. Fehlt mir da ev. ein Recht, obwohl ich Admin bin)?
« Letzte Änderung: 25.10.05 - 17:08:42 von SKL74 »
Domino, Notes, Sametime

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
Re: Private view eines Users löschen - Deklarationsprobleme
« Antwort #12 am: 26.10.05 - 11:42:31 »
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:

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
		'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
Domino, Notes, Sametime

Offline Gandhi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 918
  • Geschlecht: Männlich
  • Domino for the masses
Re: Private view eines Users löschen - Deklarationsprobleme
« Antwort #13 am: 26.10.05 - 11:45:01 »
Also vor dem v.remove würde ich auf jedenfall prüfen, ob v initialisiert ist:
if not (v is nothing) then
   call v.remove
end if
Der "Wenn ich" und der "Hätt' ich" das sind zwei arme Leut'
oder für den Süden:
Hatti Tatti Wari - san drei Larifari

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
Re: Private view eines Users löschen - Deklarationsprobleme
« Antwort #14 am: 26.10.05 - 12:34:01 »
Das hilft mir, wenn v leer ist aber nicht in diesem Fall.

1. Variante:
Views:
1. shared
2. shared private on first use
3. private aus view 2 erstellt

alle 3 views werden geprüft, die 3 gelöscht und die DB korrekt geschlossen.

2. Variante:
Views
1. shared
2. shared private on first use
alle 2 views werden geprüft, bei der 2. kommt der Debugger bis End Forall und Notes stürzt ab.

Das ist doch nicht normal.
Domino, Notes, Sametime

Offline Gandhi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 918
  • Geschlecht: Männlich
  • Domino for the masses
Re: Private view eines Users löschen - Deklarationsprobleme
« Antwort #15 am: 26.10.05 - 14:55:36 »
Es stellt sich mir ohnehin die Frage:

Warum prüfst Du nicht, ob der View private ist mit v.isprivate?
Der "Wenn ich" und der "Hätt' ich" das sind zwei arme Leut'
oder für den Süden:
Hatti Tatti Wari - san drei Larifari

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
Re: Private view eines Users löschen - Deklarationsprobleme
« Antwort #16 am: 27.10.05 - 13:38:15 »
Hi,

also es scheint irgendwie an der DB oder den views zu liegen. Bei einer neuen DB mit nur 2 views geht das ohne Probs.

Weiß halt nur nicht, welches Designelement verantwortlich ist dafür.

cu
der B@sti
Domino, Notes, Sametime

Offline Gandhi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 918
  • Geschlecht: Männlich
  • Domino for the masses
Re: Private view eines Users löschen - Deklarationsprobleme
« Antwort #17 am: 27.10.05 - 14:07:39 »
Dann würde ich mal versuchen eine Kopie der DB anzulegen (evtl hilft auch eine Replik).
Der "Wenn ich" und der "Hätt' ich" das sind zwei arme Leut'
oder für den Süden:
Hatti Tatti Wari - san drei Larifari

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
Re: Private view eines Users löschen - Deklarationsprobleme
« Antwort #18 am: 27.10.05 - 15:14:28 »
Hab ich natürlich schon versucht.

Habe sogar eine leere DB angelegt und manuell alle Designelemente reinkopiert. Gleiches Ergebnis.

M.E. ist das buggy.
Domino, Notes, Sametime

Offline Gandhi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 918
  • Geschlecht: Männlich
  • Domino for the masses
Re: Private view eines Users löschen - Deklarationsprobleme
« Antwort #19 am: 27.10.05 - 16:01:28 »
Aus der Ferne habe ich da leider wohl keine Chance - kann sein, dass da irgendeine ungünstige Konstellation dabei ist.
Der "Wenn ich" und der "Hätt' ich" das sind zwei arme Leut'
oder für den Süden:
Hatti Tatti Wari - san drei Larifari

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz