以前の記事で、『エラー情報収集.ums5』でエラー情報収集しようねって書きました。
ただ、さらっとログ出力しとくだけでも・・・って書いたけども、ログ出力って言われてもわからないよーって人の為の記事です。
エラー発生原因を理解するために必要な機能を詰め込んだスクリプトを用意しました。
今回のテーマは、エラーが発生した時どんな状況だったか?どこでエラーになったか?を知るってところで。
参考にした素材
ベースにしたのは、この辺のライブラリです。

下から2番目の『エラー情報収集』は、前回記事で紹介したライブラリに含まれている部品です。
やりたいことを整理
今回やりたいことはというと、こゆこと。
- シナリオ名からエラー出力用フォルダ名を生成
- エラー出力用のフォルダを作る
- WinActorのウィンドウを最小化する
- 画面キャプチャを取得してエラー出力用フォルダに保存
- エラー情報収集
- エラー情報をエラー出力用フォルダにテキスト保存
スクリプトに起こしてみる
それでは、どうぞ。
' エラー情報出力(デスクトップ画像とエラー発生ノード情報)
Set objFS = CreateObject("Scripting.FileSystemObject")
' シナリオファイル名からエラー情報出力フォルダ名を作る -----
var_scenario_file = GetUmsVariable ( "$SCENARIO-FILE" )
scenario_name = objFS.GetBaseName(var_scenario_file)
YMDHM = Year(Now) & Right("0" & Month(Now), 2) & Right("0" & Day(Now), 2) & "_" & Right("0" & Hour(Now), 2) & Right("0" & Minute(Now), 2)
' エラー出力用フォルダを作る -----
err_folder = !エラー出力フォルダ! & "\" & scenario_name & "_" & YMDHM
If objFS.FolderExists(err_folder) <> True Then
objFS.CreateFolder(err_folder)
End If
' WinActorウィンドウを最小化.usm5 -----
SetUmsVariable "$LOAD_JAR" , "spv_ScenarioGoto.jar"
if GetUmsVariable("$LOAD_JAR") <> "true" then
Err.Raise 1, "", "ライブラリファイル(spv_ScenarioGoto)が読み込めません。"
end if
SetUmsVariable "$RUN_CLASS" , "ScenarioGoto closewindow"
if GetUmsVariable("$RUN_CLASS") <> "true" then
Err.Raise 1, "", "ライブラリ実行(spv_ScenarioGoto)に失敗しました。"
end if
' 画面キャプチャ(デスクトップ).ums5 -----
desktop_image = err_folder & "\Desktop_image.jpg"
WScript.Sleep 1000
SetUmsVariable "$LOAD_JAR" , "spv_Capture.jar"
if GetUmsVariable("$LOAD_JAR") <> "true" then
Err.Raise 1, "", "ライブラリファイル(spv_Capture)が読み込めません。"
end if
SetUMSVariable "$CLEAR_ARGUMENT", ""
SetUMSVariable "$SET_ARGUMENT", "-from_desktop"
SetUMSVariable "$SET_ARGUMENT", "-to_file"
SetUMSVariable "$SET_ARGUMENT", desktop_image
SetUMSVariable "$RUN_CLASS2", "Capture"
if GetUmsVariable("$RUN_CLASS2") <> "true" then
Err.Raise 1, "", "ライブラリ実行(spv_Capture)に失敗しました。"
end if
' エラー発生元ノード情報収集 -----
var_error_name = GetUmsVariable ( "$ERROR_NODE_NAME" )
var_error_id = GetUmsVariable ( "$ERROR_NODE_ID" )
var_error_mesg = GetUmsVariable ( "$ERROR_MESSAGE" )
err_info = "エラー発出ノード名 : " & var_error_name & vbNewLine & _
"エラー発出ノードID : " & var_error_id & vbNewLine & _
"【エラーメッセージ】" & vbNewLine & var_error_mesg
' エラー情報出力 -----
err_path = err_folder & "\Error_Info.log"
Set objFile = objFS.OpenTextFile(err_path, 2, True)
objFile.Write(err_info)
objFile.Close
使い方
上記のスクリプトを、『スクリプト実行』ノードのスクリプト欄に張り付けると「エラー出力フォルダ」という入力欄ができるので、エラー情報を保存したいフォルダを指定して下さい。
(上のコードの部分、オンマウスするとにょきっとバーが出てきてコピーできる機能付いてますよ。)
ほんで、この作ったノードを『例外処理』の異常時の方に入れて下さい。
すると、エラーが発生した時に指定したフォルダの配下に、「シナリオ名_YYYYMMDDHHmm」というフォルダが作成されてエラー発生時のデスクトップのキャプチャ画像とエラー発生元のノード情報が保存されます。
これだけ残ってるだけでも、何となく業務わかってる人なら「あーっ。。。なるほど。」ってなるよね。
データ処理系のシナリオだと画面ってより変数の中身が重要だと思うので、それはまた別で考えよう。