任意のカスタムエラーを発生させる方法
これは 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】プログラミングを行う際のエラー処理方法を教えてください。