VBScriptを使用してエラーをキャッチし、ログに記録して(つまり、エラー "何かを記録する")、スクリプトの次の行を再開します。
例えば、
エラーが発生したら、次へ 'ステップ1 を実行'ステップ2 を実行 'ステップ3 を実行
ステップ1でエラーが発生した場合、そのエラーをログに記録して(または、他のカスタム機能を実行して)、ステップ2から再開します。これは可能ですか?そして、どのように実装できますか?
編集:このようなことはできますか?
エラー発生時にmyErrCatchを再開します____。] 'ログエラー 次へ再開
VBScriptには、例外をスローまたはキャッチするという概念はありませんが、ランタイムは、最後に実行された操作の結果を含むグローバルなErrオブジェクトを提供します。各操作の後に、Err.Numberプロパティがゼロ以外であるかどうかを明示的に確認する必要があります。
On Error Resume Next
DoStep1
If Err.Number <> 0 Then
WScript.Echo "Error in DoStep1: " & Err.Description
Err.Clear
End If
DoStep2
If Err.Number <> 0 Then
WScript.Echo "Error in DoStop2:" & Err.Description
Err.Clear
End If
'If you no longer want to continue following an error after that block's completed,
'call this.
On Error Goto 0
「On Error Goto [label]」構文はVisual BasicおよびVisual Basic for Applications(VBA)でサポートされていますが、VBScriptはこの言語機能をサポートしていないため、上記のようにOn Error Resume Nextを使用する必要があります。
On Error Resume Next
はグローバルに設定されないことに注意してください。コードの安全でない部分を関数に入れて、エラーが発生するとすぐに中断し、前のOERN
ステートメントを含むsubからこの関数を呼び出すことができます。
ErrCatch()
Sub ErrCatch()
Dim Res, CurrentStep
On Error Resume Next
Res = UnSafeCode(20, CurrentStep)
MsgBox "ErrStep " & CurrentStep & vbCrLf & Err.Description
End Sub
Function UnSafeCode(Arg, ErrStep)
ErrStep = 1
UnSafeCode = 1 / (Arg - 10)
ErrStep = 2
UnSafeCode = 1 / (Arg - 20)
ErrStep = 3
UnSafeCode = 1 / (Arg - 30)
ErrStep = 0
End Function
ファサード関数でステップ関数呼び出しを再グループ化できます。
sub facade()
call step1()
call step2()
call step3()
call step4()
call step5()
end sub
次に、facadeを呼び出す上位関数でエラー処理を行います。
sub main()
On error resume next
call facade()
If Err.Number <> 0 Then
' MsgBox or whatever. You may want to display or log your error there
msgbox Err.Description
Err.Clear
End If
On Error Goto 0
end sub
ここで、step3()
がエラーを発生させたとしましょう。 facade()
はエラーを処理しないため(facade()
にnoOn error resume next
があります)、エラーはmain()
に返され、step4()
とstep5()
は実行されません。
エラー処理は1コードブロックにリファクタリングされました
私はVBScriptを初めて使用するので、これはベストプラクティスとは見なされないか、この方法でこれを行うべきではない理由があるかもしれませんが、これは私が思いついた解決策ですメインコードブロックのエラーログコードの量を減らします。
Dim oConn, connStr
Set oConn = Server.CreateObject("ADODB.Connection")
connStr = "Provider=SQLOLEDB;Server=XX;UID=XX;PWD=XX;Databse=XX"
ON ERROR RESUME NEXT
oConn.Open connStr
If err.Number <> 0 Then : showError() : End If
Sub ShowError()
'You could write the error details to the console...
errDetail = "<script>" & _
"console.log('Description: " & err.Description & "');" & _
"console.log('Error number: " & err.Number & "');" & _
"console.log('Error source: " & err.Source & "');" & _
"</script>"
Response.Write(errDetail)
'...you could display the error info directly in the page...
Response.Write("Error Description: " & err.Description)
Response.Write("Error Source: " & err.Source)
Response.Write("Error Number: " & err.Number)
'...or you could execute additional code when an error is thrown...
'Insert error handling code here
err.clear
End Sub