投稿者

Product Support at InterSystems Japan
記事 Megumi Kakechi · 7月 31, 2022 2m read

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

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

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

Class User.Test
{

ClassMethod ExceptionTest()
 {
    try
    {
      // : some codesif (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】プログラミングを行う際のエラー処理方法を教えてください。