| 

.NET C# Java Javascript Exception

1
Hallo,

ich habe eine Outlook 2003 Formularlösung zur Wartung übernommen, und bin etwas verwundert, dass beim Auftreten eines Fehlers das Script einfach die Ausführung abbricht, und keine Fehlermeldung kommt.

In der fraglichen Routine (Item_Write) ist kein On Error Resume Next, auch nicht in den aufgerufenen Sub-Routinen. In anderen schon, die spielen aber beim Speichern direkt keine Rolle.

Wie kann ich Item_Write soweit absichern, dass ich 1. eine Fehlermeldung bekomme, und 2. daraufhin den Speichervorgang abbrechen kann (natürlich mit Item_Write = false, aber ich muss zuerst wissen, dass ein Fehler aufgetreten ist und will nicht jede Zeile mit einer If Err.Number <> 0 versehen.

vielen Dank vorab
maria
08.02.2011
Maria Simlinger 1,1k 1 9
3 Antworten
2
Mir fällt keine Lösung ein die deine Anforderungen umsetzt da VBScript leider die "on error goto label" Funktion nicht unterstützt.
08.02.2011
Floyd 14,6k 3 9
0
Das folgende Skript demonstriert meinen Vorschlag für die Fehlerbehandlung unter C|WScript. Ich kenne mich mit Outlook nicht aus, hoffe aber, dass die Technik übertragbar ist.

' VbsError.vbs - VBScript Fehlerbehandlung
' Reklame:
' (1) Kein 'Absturz' beim Kunden
' (2) Vollständige Fehlermeldung (Zeilennummer) beim Entwickeln
' (3) Wechsel zwischen (1) und (2) duch /dbg Argument
' (4) Durch Wrapper können grosse Codemengen *ohne* OERN gekapselt werden
' (All or Nothing)
' Grundregeln:
' (1) Küchendienst für ein globales OERN
' (2) Je 10,00 Euro in die Kaffeekasse ab der dritten Zeile zwischen OERN und OEG0

' Nicht ohne mein "Option Explicit"
Option Explicit

' Globals
Dim goFS : Set goFS = CreateObject( "Scripting.FileSystemObject" )
Dim goWAN : Set goWAN = WScript.Arguments.Named
Dim gaErr : gaErr = Array( 0, "" )

' Dispatch
Dim nRet
If goWAN.Exists( "dbg" ) Then ' Mit Abbruch/Fehlermeldung/Zeilennummer beim Entwickeln
nRet = doMain()
Else ' Mit Entschuldigung und ohne Abbruch beim Kunden
On Error Resume Next
nRet = doMain()
gaErr = Array( Err.Number, Err.Description )
On Error GoTo 0
If 0 <> gaErr( 0 ) Then
WScript.Echo "Entschuldigung! Aber kein Absturz!"
End If
End If
WScript.Quit nRet

' Hauptprogramm
Function doMain()
doMain = 1 ' wird schon schiefgehen
WScript.Echo "Main Start"
lesen
If goWAN.Exists( "main" ) Then Err.Raise 4711, "doMain", "verzambelt"
Dim bOk : bOk = schreiben()
If Not bOk Then
WScript.Echo "Schreiben hat nicht geklappt, aber rechnen werden wir doch können!"
End If
rechnen
WScript.Echo "Main Ende"
doMain = 0 ' hat doch funktioniert
End Function

Sub lesen()
WScript.Echo " Lesen Start"
If goWAN.Exists( "lesen" ) Then Err.Raise 4711, "lesen", "verzembelt"
WScript.Echo " Lesen Ende"
End Sub

Function schreiben()
schreiben = False
WScript.Echo " Schreiben Wrapper Start"
On Error Resume Next
schreibenA
gaErr = Array( Err.Number, Err.Description )
On Error GoTo 0
If 0 = gaErr( 0 ) Then
schreiben = True
Else
WScript.Echo " Probleme bei Schreiben:", Join( gaErr )
End If
WScript.Echo " Schreiben Wrapper Ende"
End Function

Sub rechnen()
WScript.Echo " Rechnen Start"
If goWAN.Exists( "rechnen" ) Then Err.Raise 4711, "rechnen", "verzimbelt"
WScript.Echo " Rechnen Ende"
End Sub

Sub schreibenA()
WScript.Echo " Schreiben A Start"
' 200 gefährliche Zeilen, 100 Aufrufe gefährlicher Routinen
If goWAN.Exists( "bingo" ) Then Err.Raise 4711, "bingo", "verzombelt"
' 200 gefährliche Zeilen, 100 Aufrufe gefährlicher Routinen
WScript.Echo " Schreiben A Ende"
End Sub


Demos zur Verdeutlichung:
(1) Kein 'Absturz' beim Kunden
cscript VbsError.vbs /lesen
Main Start
Lesen Start
Entschuldigung! Aber kein Absturz!


(2) Vollständige Fehlermeldung (Zeilennummer) beim Entwickeln
cscript VbsError.vbs /lesen /dbg
Main Start
Lesen Start
M:\trials\23forum\ErrorHandling\VbsError.vbs(51, 35) lesen: verzembelt


(4) Durch Wrapper können grosse Codemengen *ohne* OERN gekapselt werden
cscript VbsError.vbs /bingo
Main Start
Lesen Start
Lesen Ende
Schreiben Wrapper Start
Schreiben A Start
Probleme bei Schreiben: 4711 verzombelt
Schreiben Wrapper Ende
Schreiben hat nicht geklappt, aber rechnen werden wir doch können!
Rechnen Start
Rechnen Ende
Main Ende


Wenn alles glatt geht:
cscript VbsError.vbs
Main Start
Lesen Start
Lesen Ende
Schreiben Wrapper Start
Schreiben A Start
Schreiben A Ende
Schreiben Wrapper Ende
Rechnen Start
Rechnen Ende
Main Ende
08.02.2011
Ekkehard.Horner 147 1
-2
Aber du kannst ja in Item_Write gleich als erste Zeile "On Error Goto onErrorLabel" platzieren.

Private Sub Item_Write()
On Error GoTo onErrorLabel

'... your code goes here'

exitLabel:
Exit Sub

onErrorLabel:
MsgBox Err.Description
Resume exitLabel
End Sub

und an der Sprungmarke onErrorLabel machst du die Fehlerbehandlung.
08.02.2011
tack 294 1 8
tack 294 1 8
Funktioniert nicht. Siehe meine Antwort.
Floyd 08.02.2011
Ist leider VBScript, da geht das nicht.
Maria Simlinger 08.02.2011

Stelle deine Outlook-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH