Autor Thema: Fehlermeldung werfen mit Error Statement  (Gelesen 1802 mal)

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Fehlermeldung werfen mit Error Statement
« am: 16.11.12 - 10:04:15 »
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

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.


Ein kleiner Code zum testen:

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

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

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Fehlermeldung werfen mit Error Statement
« Antwort #1 am: 16.11.12 - 11:50:58 »
 ::)

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  ::)
Gruß
Johnson

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz