これは 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 を押して終了します。