Skip to main content

 

アプリケーションの開発

 

OutSystems

例外処理の仕組み

モジュールで発生した例外は、Exception Handler要素で開始するフローの中で処理されます。アクションでは、様々なタイプの例外を処理するため、Exception Handlerのフローを複数設定することが可能です。

例外は、OutSystemsによって、または、ロジック中のモジュールの任意のポイントで発生させることができます。一般的なUIリクエストでは、発生した例外を以下の方法で処理することができます。

  • Exception Handler要素とそのロジックをアクションフローに追加する。
  • On ExceptionアクションをUI Flowsに追加する。
  • モジュールのGlobal Exception Handlerに任せる。デフォルトでは、モジュールのGlobal Exception Handlerプロパティは、Common UI FlowsのOn Exceptionアクションに設定されています。

タイマーで開始するアクションフローで発生した例外を処理できるのは、Exception Handler要素をロジックに追加した場合に限られます。それ以外の場合では、実行フローが中断され、エラーがログに記録されます。

例外が発生すると、現在の実行フローが中断され、そのタイプの例外を処理する最初のException Handler要素でフローが再始動します。

例として、アクションBが「MyUserException」という名前のUser Exceptionを発生させた場合を考えます。アクションBは、アクションAにより呼び出された画面アクションです。アクションBでMyUserExceptionが発生すると、例外処理の仕組みが以下のように働きます。

エンドユーザーに通知し、操作を継続するために、アプリケーションフローにはException Handlerが少なくとも1つ必要です。

連携により発生した例外の処理

利用している連携(拡張機能のアクションやREST APIのメソッドなど)により発生した例外を処理するときは、例外のタイプを判断できません。このような状況では、All Exceptionsハンドラを使用して例外を処理する必要があります。そして、Exception Handler要素のExceptionMessageプロパティを使用して例外を特定します。

例外処理時のデータベーストランザクションの管理

サーバー側で実行されているアクションで発生した例外を処理するときは、Exception HandlerのAbort Transactionプロパティを以下のように設定することにより、データベーストランザクションの処理方法を選択できます。

  • コミットされていないすべてのデータベーストランザクションを中止し、データベースの変更をロールバックする場合は、Abort TransactionプロパティにYesを設定します。
  • 何の例外も発生していないかのようにデータベーストランザクションの処理を継続する場合は、Abort TransactionプロパティにNoを設定します。このトランザクションは、次のCommit Transactionアクションによりコミットされるか、通常であればリクエスト実行の最後にOutSystemsによって暗黙的にコミットされます。

モバイルアプリケーションでは、Abort Transactionプロパティは、サーバーアクションで例外処理を行うときにのみ利用可能です。