記事
· 2021年3月9日 3m read

アプリケーションエラー(^ERRORS)をコマンドで取得する方法

これは InterSystems FAQ サイトの記事です。

SYS.ApplicationError クラスの ErrorList クエリを使用します。

注意1:%SYS ネームスペースで実行します。

注意2:ストアド化していないユーティリティのため %SQL.Statement ではなく %ResultSet クラスを利用します。

コマンド実行例は以下の通りです。

USER>set $namespace="%SYS"   //または zn "%SYS"

%SYS>set rset=##class(%ResultSet).%New()

%SYS>set rset.ClassName="SYS.ApplicationError"

%SYS>set rset.QueryName="ErrorList"

// クエリの第1引数はネームスペース名、第2引数は日付を指定します(形式:MM/DD/YYYY)
%SYS>do rset.Execute("USER","08/17/2020")

// 画面に結果を表示させる場合は %Display()メソッドを実行します。
%SYS>do rset.%Display()
Error # Error message   Time    Process DisplayPID      Username        Code line
1 <DIVIDE> 02:43:10 2536 2536 irisowner

1 Rows(s) Affected

%SYS>do rset.Close()

 

行移動しながら、SELECT の 列の値を取得する方法は以下の通りです。

行移動には Next() メソッドを使用します(行が存在すると 1 を返します)。

列の取得には Get("列名") を使用します。列名詳細については、クラスドキュメントから ErrorList クエリの説明文をご参照ください。
ErrorListクエリの列名について

 

%SYS>do rset.Execute("USER","08/17/2020")

%SYS>while rset.Next() { write rset.Get("Error #"),"-",rset.Get("Error message"),"-",rset.Get("Time"),"-",rset.Get("Code line"),!}
1-<DIVIDE>-02:43:10-

 

ターミナルで表示する場合は、^%ER ルーチンも利用できます。

参照したいネームスペースに移動した状態で以下実行します(例は USER ネームスペースで実行しています)。
下線付き緑色の太字は入力箇所です。

 

USER>do ^%ER
 
For Date: ?L
Thu 09/17/2020  (T)   2 Errors
Mon 09/07/2020  (T-10) 3 Errors
Mon 08/31/2020  (T-17) 1 Error
Mon 08/24/2020  (T-24) 1 Error

For Date: 09/17/2020  17 Sep 2020   2 Errors

Error: ?L
 1. " *a"  at  9:05 am.   $I=|TRM|:|13484   ($X=0  $Y=15)
     $J=13484  $ZA=0   $ZB=$c(13)   $ZS=262144 ($S=268271680) 
 2. "^%ETN"  at  9:05 am.   $I=|TRM|:|13484   ($X=0  $Y=17)
     $J=13484  $ZA=0   $ZB=$c(13)   $ZS=262144 ($S=268263368)
     %ETN     ;%STACK-related error log

 Error: 1
 1. " *a"  at  9:05 am.   $I=|TRM|:|13484   ($X=0  $Y=15)
     $J=13484  $ZA=0   $ZB=$c(13)   $ZS=262144 ($S=268271680)
Variable:

Error:
 
For Date:
USER>

 

For Date: には発生したエラー日を mm/dd/yyyy の形式で指定します。

Error: には、エラー番号を指定します。

表示を終了したい場合は、Enter を押して終了します。 

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください