投稿者

インターシステムズジャパン
記事 Toshihiko Minamoto · 5月 4, 2021 2m read

ObjectScriptエラー処理のスニペット

ObjectScriptには、エラー(ステータスコード、例外、SQLCODEなど)を処理する方法が少なくとも3つあります。 ほとんどのシステムコードにはステータスが使用されていますが、例外は、いくつかの理由により、より簡単に処理することができます。 レガシーコードを使用している場合、さまざまな手法の変換にいくらか時間が掛かりますが、 参考として、次のスニペットをよく使用しています。 皆さんのお役にも立てればと思います。

///SQLCODEのステータス:set st = $$$ERROR($$$SQLError, SQLCODE, $g(%msg))  //埋め込みSQLset st = $$$ERROR($$$SQLError, rs.%SQLCODE, $g(rs.%Message)) //動的SQL///SQLCODEの例外:throw ##class(%Exception.SQL).CreateFromSQLCODE(SQLCODE,%msg) //埋め込みSQLthrow ##class(%Exception.SQL).CreateFromSQLCODE(rs.%SQLCODE,rs.%Message) //動的SQLthrow:(SQLCODE'=0)&&(SQLCODE'=100) ##class(%Exception.SQL).CreateFromSQLCODE(SQLCODE,%msg) //クエリに成功する場合、またはデータがない場合はスローしない///ステータスの例外:$$$ThrowOnError(st)///例外のステータス:set st = err.AsStatus()///カスタムエラーステータスの作成:set st = $$$ERROR($$$GeneralError,"Custom error message")///カスタム例外をスロー:$$$ThrowStatus($$$ERROR($$$GeneralError,"Custom error message"))///ステータス付きのSOAPエラーの処理:try {  //SOAPリクエストコード} Catch err {  If err.Name["ZSOAP" {    Set st = %objlasterror  } Else {    Set st = err.AsStatus()  }}return st///カスタム例外クラスを定義Class App.Exceptions.SomeException Extends %Exception.AbstractException{Method OnAsStatus() As %Status{  return $$$ERROR($$$GeneralError,"Custom error message")}}///カスタム例外のスローとキャッチtry {  throw ##class(App.Exceptions.SomeException).%New()} catch err {  if err.%ClassName(1) = ##class(App.Exceptions.SomeException).%ClassName(1) {    //この種の例外に特有の処理  }}</pre></body></html>