記事
· 2022年7月31日 2m read

任意のカスタムエラーを発生させる方法

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

TRYブロック内で任意のカスタムエラーを発生させたい場合、以下のように throw で例外を渡すことが可能です。

以下のサンプルでは、Stcount が 1 より小さい場合にカスタムエラーを発生させています。

Class User.Test
{

ClassMethod ExceptionTest()
 {
    try
    {
      // : some codes
      if (Stcount<1) {
          throw ##class(%Exception.General).%New(" ユーザ定義エラー","5001","ロケーション","エラー時のデータ")  
          // ユーザ作成エラーは5001以降
      }
    }
    catch ex
    {
      write "エラー #", ex.Code, ": ", ex.Name, " : ", ex.Location, " ", ex.Data
      return
    }
 }
}


上の例では、Stcount が 1 より小さい場合、以下のようなエラーが出力されます。

USER>do ##class(User.Test).ExceptionTest()
エラー #5001: ユーザ定義エラー : ロケーション エラー時のデータ


詳細は以下のドキュメントをご覧ください。
ObjectScriptコマンド_THROW
 

また、任意のステータスコードを作成したい場合は以下のように行います。

USER>set st = ##class(%SYSTEM.Status).Error(5001,"これはユーザ定義エラーです")
 
USER>zwrite st
st="0 "_$lb($lb(5001,"これはユーザ定義エラーです",,,,,,,,$lb(,"USER",$lb("e^zError+1^%SYSTEM.Status.1^1","e^^^0"))))/* エラー #5001: これはユーザ定義エラーです                 */
USER>do $SYSTEM.Status.DisplayError(st)
 
エラー #5001: これはユーザ定義エラーです


以下の関連トピックもあわせてご覧ください。

【FAQ】ユーザ定義のエラーを定義したいのですが、どのようにすればいいですか?
【FAQ】プログラミングを行う際のエラー処理方法を教えてください。

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