Domino 9 und frühere Versionen > ND8: Entwicklung

Fehlermeldung werfen mit Error Statement

(1/1)

Johnson:
Guten Morgen allerseits,

ich schreibe an einem Agenten, der verschiedene Datenbanken auf einem Server öffnet und dort Dokumente ausliest.

Natürlich wird versucht, die Datenbank über die Funktion NotesDatabase.Open([ServerName], [FilePath], False) zu öffnen.
Zum Abfangen von Fehlern füge ich zuvor ein "On Error lsERR_NOTES_DBNOACCESS Resume Next" ein und prüfe nachträglich auf diesen Fehler. Dabei ist mir aufgefallen, dass der User in einigen Datenbanken auf "No Access" steht, aber dennoch die Datenbank öffnen kann, da eben die Eigenschaften "Read public documents" und/oder "Write public documents" gesetzt ist. Somit wird der Fehler lsERR_NOTES_DBNOACCESS folgerichtig nicht geworfen:


--- Code: ---%INCLUDE "lsxbeerr.lss"
Sub Initialize

Dim db As NotesDatabase
Dim s As NotesSession
Dim str_filepath As String
Dim str_server As String

' initialize
Set s = New NotesSession
str_filepath = "db.nsf"
str_server = "CN/OU/O"

' try to get database
On Error lsERR_NOTES_DBNOACCESS Resume Next
Set db = s.GetDatabase(str_server, str_filepath, False)

' check database
If db Is Nothing Then
MessageBox "Could not get database!"
Exit Sub
End If

' check access level
If db.IsOpen Then
If db.CurrentAccessLevel = ACLLEVEL_NOACCESS Then
Error lsERR_NOTES_DBNOACCESS
End If
End If

' check error
If Err = lsERR_NOTES_DBNOACCESS Then
MessageBox "Zonk!" & Chr(10) & Error
Err = 0
End If

End Sub

--- Ende Code ---

Die Funktion Error gibt mir ein "User-defined error" zurück!

--- Zitat ---If errNumber is a LotusScript-defined error number, this Error statement simulates a LotusScript error. If it is not, this statement creates a user-defined error. When the Error statement is executed, LotusScript behaves as if a run-time error has occurred. If no error handling is in effect (set up by an On Error statement) for the specified error, execution ends and an error message is generated.

The error message generated is msgExpr if it is specified. If msgExpr is omitted, the error message is the LotusScript error message for the specified error number, if that number designates a LotusScript error. Otherwise the message "User-defined error" is generated.

User-defined errors must be in the range 1000-1999. Errors less than 1000 are reserved for the LotusScript language; the constant ErrLast is the highest error number implemented. Errors greater than 1999 are reserved for Lotus products that use LotusScript.


--- Ende Zitat ---

Ein kleiner Code zum testen:


--- Code: ---%INCLUDE "lsxbeerr.lss"
Sub Initialize
Error lsERR_NOTES_DBNOACCESS
End Sub

--- Ende Code ---

Wieso bringt Notes mir hier ein "User-defined error"  ???

Johnson:
 ::)

Mann muss einfach nur mal ein bisschen nachdenken. Ein paar Kaffees später kommt man schon von selbst drauf...

Die richtige Meldung für den Fehler lsERR_NOTES_DBNOACCESS respektive 4060 über das Error-Statement zu werfen macht natürlich wenig Sinn, da Notes zum Generieren der Meldung anhand der Nummer die Datenbank gar nicht kennt.

Woher soll schließlich "Error lsERR_NOTES_DBNOACCESS" die Datenbank "db.nsf" kennen, um die Meldung
"User XY cannot open database CN/OU/O!!db.nsf" zu bringen.  ;D

Wäre jetzt so meine Erklärung  ::)

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln