Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: yes2002 am 31.01.03 - 22:03:50
-
Hi,
folgendes Problem - ich möchte auf einem Server auf bestimmte Datenbanken zugreifen. Wenn ich mindestens Entwicklerrechte auf eine Datenbank habe (das weiß ich leider vorher nicht) möchte ich Änderungen in der Datenbank vornehmen.
Frage:
Wie kann man am besten seine Rechte auf eine DB testen.
Workaround:
Zur Zeit versuche ich die DBzu referenzieren und fange mögliche Zugriffsfehler mit on error ab. Ich bin damit aber nicht zufrieden. Wer hat eine bessere Idee???
On Error Goto Fehlerbehandlung
Dim db As New NotesDatabase(persdoc.MailServer(0), persdoc.MailFile(0))
Fehlerbehandlung:
If Err() = 4060 Then
Call notesLog.LogError( 0, "FEHLER, kein Zugriff - " & Error() & " (" & Cstr( Err() ) & ") Line:" & Erl() )
zugriff = 0
Resume Next
End If
-
... um deine Rechte auf einer Datenbank zu überprüfen kannst du mit den Notes-Klassen arbeiten. Es gibt speziell dafür die NotesACL- und NotesACLEntry- Klassen... mehr dazu findest du in der Notes-Hilfe...
ata
-
Hallo, das hilft leider nicht. Wenn ich auf eine Datenbank keinen Zugriff habe - bekomme ich schon bei Dim db as new ... (siehe Script unten) diese Fehlermeldung:
user XY cannot open Databse no.nsf
... und der Agent bleibt stehen. Einziger Workaroud ist on error - das möchte ich aber anders lösen.
Hat jemand noch ein Tipp????
Sub Initialize
Dim session As New NotesSession
Dim db As New NotesDatabase("","no.nsf")
Dim acl As NotesACL
Dim entry As NotesACLEntry
Set db = session.CurrentDatabase
Set acl = db.ACL
Set entry = acl.GetEntry( "Dyetra Jones" )
End Sub
-
einen anderen Workaround habe ich nicht, aber dein Ansatz ist nicht schlecht. Wenn du auf eine db kein Zugriff hast kommt der error 4060 den fängst du mit on error ab, ist doch ok.
da gibt es nicht mehr viel ausser einem flag = db.open()
wieso bleibt der Agent stehen? du hast doch ein resume next drin ?
cu
-
Hi,
doch, in der Fehlerbehandlung ist ein Resume next aufgeführt. Ich hatte gehofft - mir wäre ein Denkfehler unterlaufen und man könnte auf on error an der Stelle verzichten ...
Danke!
-
... ob du überhaupt Zugriff hast fragst du wie folgt ab...
Dim session As New NotesSession
Dim db As NotesDatabase
Dim server As String
Dim dbName As String
Dim Level As Integer
server = ""
dbName = "DBName.nsf"
Set db = session.GetDatabase( server, dbName )
If db.isOpen Then
Level = db.CurrentAccessLevel
If Level = 0 Then
Msgbox "Kein Zugriff",0,server +" - " + dbName
Elseif Level = 1 Then
Msgbox "Archivar - Einlieferer",0,server +" - " + dbName
Elseif Level = 2 Then
Msgbox "Leser",0,server +" - " + dbName
Elseif Level = 2 Then
Msgbox "Autor",0,server +" - " + dbName
Elseif Level = 2 Then
Msgbox "Editor",0,server +" - " + dbName
Elseif Level = 2 Then
Msgbox "Entwickler",0,server +" - " + dbName
Elseif Level = 2 Then
Msgbox "Manager",0,server +" - " + dbName
End If
Else
Msgbox "Sauerei - die Datenbank existert nicht...",0,server +" - " + dbName
End If
ata
-
hi ata,
erstmal Danke für die Mühe - aber der Fehler "user XY cannot open Databse no.nsf" tritt beim isopen bereits auf, und der Agent bleibt stehen.
Hilft leider nicht weiter - ich glaube um die on error Lösung komme ich nicht herum.
Danke
-
... ich habe mir eine Datenbank gebastelt - und bin noch dabei - in der ich alle Möglichen Jobs sammle und auch von dort aus laufen lasse. Ich verwende den Code in einer Aktion, und da arbeitet er einwandfrei - scheint also Probleme im Agent zu machen...
ata
-
hi,
... funktioniert leider nicht.
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim server As String
Dim dbName As String
Dim Level As Integer
server = ""
dbName = "no.nsf"
Set db = session.GetDatabase( server, dbName )
If db.isOpen Then
Genau hier kommt vom System eine Messagebox mit der Meldung "user XY cannot open Databse no.nsf".
Wie habe ich getestet:
Eine lokale DB angelegt - no.nsf. Dann konsistente ACL eingestellt und mir alle Rechte entzogen (No Access).
Dann Script Agenten erstellt - Dein Quellcode reinkopiert und no.nsf als DB angeben.
Danke und Gruß
-
... wie gesagt, ich habe den Code in einer Aktion, bzw. Button, und da funktioniert er...
... ich habe eine Datenbank, in der ich "No Access" habe, und bekomme das Level 0 - Kein Zugriff zurück...
... ich arbeite mit Lotus Notes 5.05 und 5.08...
ata
-
@ata
du hast kein access aber du hast bestimmt noch read oder write public docs angeklickt, dann funktioniert das mit dem öffnen, ansonsten nicht
cu
-
du hast kein access aber du hast bestimmt noch read oder write public docs angeklickt, dann funktioniert das mit dem öffnen, ansonsten nicht
... ich denke nicht, kann ich aber zu Hause prüfen...
ata
-
Hi,
ja - ist leider. Kein Zugriff läßt sich nur mit on error abfangen.
Danke!
-
... zur Kompletierung, deine Vermutung stimmt. Ich hatte Public Access aktiviert. Nach dem Deaktivieren kann nur mit onError abgefangen werden - damit wäre dies eine zusätzliche Fallunterscheidung...
ata