記事
· 2023年7月11日 3m read

エラーのステータス値を表示する方法

クラスメソッドの多くは、%Status データ型を使用して、成功 または 失敗 の情報を返します。
成功の場合は 1 が返り、失敗の場合はエラーステータス および 1 つ以上のエラーコードとテキストメッセージを含むエンコードされた文字列が返ります。
このようなメソッドでは、戻り値を必ず取得して確認するようにしてください。

こちらの記事では、失敗の場合の具体的なエラー情報を確認する方法をご紹介します。

USER>set file=##class(%File).%New("C:\test\text.txt")
 
USER>set st=file.Open("R")
 
USER>write st
・・C:\test\text.txt.USER%e^Open+5^%Library.File.1^4e^^^0    // 何のエラーかわからない


エンコードされたエラーの文字列より、具体的なメッセージを表示したい場合、%SYSTEM.Status クラスのメソッドを使用します。

// 以下のようなステータスコードが返る場合
USER>write st
・・C:\test\text.txt.USER%e^Open+5^%Library.File.1^4e^^^0
// 次のようにして具体的なエラーの詳細メッセージを表示できます
USER>do $SYSTEM.Status.DisplayError(st)
エラー #5005: ファイル 'C:\test\text.txt' を開けません

// もしくは、エラーの詳細を含む文字列を取得する場合は次のようにします。
USER>set errstr = $SYSTEM.Status.GetErrorText(st)
 
USER>write errstr
エラー #5005: ファイル 'C:\test\text.txt' を開けません

// 直前のエラーは $SYSTEM.OBJ.DisplayError() でもOK
USER>do $SYSTEM.OBJ.DisplayError()
 
エラー #5005: ファイル 'c:\temp\file.txt' を開けません

 

Do $SYSTEM.Status.DisplayError(st)

でエンコードされたエラーの内容を知ることができるようになりました。
見ることはできましたが、毎回このコマンドを実行するのは面倒だ、という方に良い方法をご紹介します。

こちらの記事 で紹介しているように、覚えにくいコマンドに対して alias を設定し、ObjectScript コマンドのショートカットを作成することが可能です。
※コマンド行インタフェースでのみ使用できます。これらは ObjectScript の拡張機能ではないため、ルーチンやメソッドで使用することはできません。

// 第一引数にステータス(st)を渡すよう設定します
USER>:alias errd write $SYSTEM.Status.GetErrorText($1)
 
USER>:errd st       // 例:st = $SYSTEM.Status.Error(20)
write $SYSTEM.Status.GetErrorText(st)
エラー #5005: ファイル 'C:\test\text.txt' を開けません
USER>:e st       // 他に e から始まる alias が設定されていなければ :e でもOK
write $SYSTEM.Status.GetErrorText(st)
エラー #5005: ファイル 'C:\test\text.txt' を開けません
USER>:alias
  errd          write $SYSTEM.Status.GetErrorText($1)

// alias をクリアする
USER>:unalias errd
 
USER>:alias

USER>
 

 

各エラーコードのメッセージ一覧は、以下のドキュメントをご覧ください

ObjectScript で出しているエラーコード
一般的なエラー・メッセージ

SQLで出しているエラーコード
SQL エラー・メッセージ

OSで出しているエラーコード
例:システム エラー コード

 

ご参考
ObjectScript でプログラミングを行うときのエラー処理方法について
任意のカスタムエラーを発生させる方法
ObjectScriptエラー処理のスニペット

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