Hi,
ich versuche mich gerade mal an Formulas.
Habe eine DB-Bibliothek, die alle DB auflistet und das Öffnen der dieser DB's per Button ermöglichen soll.
Buttoncode:
@PostedCommand([FileOpenDBRepID];DB;Server)
Da ja FileOpenDBRepID unter Script die DB nur im Backend öffnet und die User damit nichts anfangen können, muss ich also auf Formulas gehen. :(
Wenn der User Zugriff auf die ausgewählte DB hat, wird diese auch korrekt geöffnet. Ansonsten erscheint ein Dialogfeld in dem der User zusätzliche Server zur DB-Suche auswählen kann. >:(
Natürlich begreift keiner, dass das mit den Rechten zusammenhängen könnte. Daher wollte ich dieses Dialogfeld abfangen und statt dessen ein Prompt bringen.
Leider schlagen meine Versuche mit @ifError usw. fehl. Habt Ihr vielleicht eine Idee, wie man das anstellen könnte?
cu
der B@sti
Danke erst mal für Eure schnelle Hilfe.
Mein Code nach einem harten Arbeitstag ...
On Error Goto ErrorHandler
On Error 4060 Goto ErrorAccess
Dim workspace As New NotesUIWorkspace
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.document
Dim strServer As String
Dim vReplicaID As Variant
Dim strReplicaID As String
Dim strPathname As String
strServer = doc.Server(0)
vReplicaID = doc.ReplicaID
Dim oldvalue(0) As String
Dim newvalue(0) As String
oldvalue(0) = ":"
newvalue(0) = ""
newvReplicaID = Replace (vReplicaID, oldvalue, newvalue)
strReplicaID = newvReplicaID(0)
Dim db As New NotesDatabase( "", "" )
Call db.OpenByReplicaID( strServer, strReplicaID )
If Not db.Isopen Then
Print "Fehler bei Öffnen","Error"
Else
strPathname = doc.Pathname(0)
Call workspace.OpenDatabase( strServer, strPathname )
End If
GoOut:
Exit Sub
ErrorHandler:
Msgbox "Error #" & Err & " — " & Error$ & " (line: " & Erl & ")"
Resume GoOut
ErrorAccess:
Msgbox "Zugriffsverletzung"'
Resume GoOut
Was sagen die Fachleute dazu? ;)
cu
der B@sti
PS:
@koehlerbv: Wo kriegst Du eigentlich immer die ErrorCode her? Gabs da nicht eine Datei, in der sowas steht?
cu
Wieso die Erroraufrufe über den Code zerstreuen?
On Error Goto ErrorHandler
Dim workspace As New NotesUIWorkspace
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.document
Dim strServer As String
Dim vReplicaID As Variant
Dim strReplicaID As String
Dim strPathname As String
strServer = doc.Server(0)
vReplicaID = doc.ReplicaID
Dim oldvalue(0) As String
Dim newvalue(0) As String
oldvalue(0) = ":"
newvalue(0) = ""
newvReplicaID = Replace (vReplicaID, oldvalue, newvalue)
strReplicaID = newvReplicaID(0)
Dim db As New NotesDatabase( "", "" )
Call db.OpenByReplicaID( strServer, strReplicaID )
If Not db.Isopen Then
Print "Fehler bei Öffnen","Error"
Else
strPathname = doc.Pathname(0)
Call workspace.OpenDatabase( strServer, strPathname )
End If
GoOut:
Exit Sub
ErrorHandler:
if err = 4060 then
msgbox "Zugriffsverletzung"
else
Msgbox "Error #" & Err & " — " & Error$ & " (line: " & Erl & ")"
end if
Resume GoOut
und zwar aus dem einfachen Grund, dass die einzige Stelle an der 4060 auftreten kann, eben die Stelle ist, wo versucht wird auf die andere Datenbank zuzugreifen.
Für meinen Geschmack lenken diese vielen Erroraufrufe vom eigentlichen funktionalen Code ab und das ist so übersichtlicher.
Hi,
hier gab es ja noch echt Resonanz heute nacht. Müßt Ihr nicht auch mal schlafen? ;)
So, jetzt aber:
Sub Click(Source As Button)
On Error Goto ErrorHandler
Dim workspace As New NotesUIWorkspace
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.document
Dim strServer As String
Dim vReplicaID As Variant
Dim strReplicaID As String
Dim strPathname As String
strServer = doc.Server(0)
vReplicaID = doc.ReplicaID
Dim oldvalue(0) As String
Dim newvalue(0) As String
oldvalue(0) = ":"
newvalue(0) = ""
newvReplicaID = Replace (vReplicaID, oldvalue, newvalue)
strReplicaID = newvReplicaID(0)
Dim db As New NotesDatabase( "", "" )
Call db.OpenByReplicaID( strServer, strReplicaID )
If Not db.Isopen Then
Msgbox "Es ist ein Fehler aufgetreten." ,64,"Error"
Else
strPathname = doc.Pathname(0)
Call workspace.OpenDatabase( strServer, strPathname )
End If
exitScript:
Exit Sub
ErrorHandler:
If Err = 4060 Then
Msgbox "Es ist ein Fehler aufgetreten." & Chr(10) & Chr(10) _
& "Sie sind zum Zugriff auf diese Datenbank nicht berechtigt." & Chr(10) _
& "Bitte wenden Sie sich an Ihren Administrator." ,64,"Error"
Resume exitScript
Else
Msgbox "Es ist ein Fehler aufgetreten." & Chr(10) & Chr(10) _
& "Fehlermeldung: " & Error$ & Chr(10) _
& "Fehlernummer: " & Err & Chr(10) _
& "Codezeile: " & Erl & Chr(10) _
,64,"Error"
Resume exitScript
End If
End Sub
Wenn ich jetzt "If Not db.Isopen Then" noch dazu kriegen könnte, einen richtigen Fehler auszuwerfen, und dann zum ErrorHandler zu springen, damit auch die Codezeile angegeben wird, wäre ich total glücklich.
cu
der B@sti