クラスメソッドの多くは、%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 // 何のエラーかわからない
ObjectScriptObjectScript
エンコードされたエラーの文字列より、具体的なメッセージを表示したい場合、%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' を開けません
ObjectScriptObjectScript
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>
ObjectScriptObjectScript
各エラーコードのメッセージ一覧は、以下のドキュメントをご覧ください
ObjectScript で出しているエラーコード
一般的なエラー・メッセージ
SQLで出しているエラーコード
SQL エラー・メッセージ
OSで出しているエラーコード
例:システム エラー コード
ご参考
ObjectScript でプログラミングを行うときのエラー処理方法について
任意のカスタムエラーを発生させる方法
ObjectScriptエラー処理のスニペット