例外を処理する
例外とは、アプリケーションフローの正常な実行を妨げる、通常とは異なる状況のことです。たとえば、アプリケーションが外部システムからデータを取り出すときに、その外部システムが稼働停止しているような場合です。
例外を発生させるのは、通常とは異なる状況の場合に限定すべきであり、アプリケーションのロジック制御のために使用すべきではありません。
例外が発生すると、アプリケーションフローの実行が中断します。
OutSystemsでは、Exception Handlerアクションフロー要素を使用してアプリケーションの例外を処理できます。ロジックで例外を発生させるには、Raise Exceptionアクションフロー要素を使用します。
例外のタイプ
例外にはいくつかのタイプがあり、アプリケーションでの発生方法と処理方法が異なります。例外は、その処理方法を決める階層構造になっています。
この階層構造の中で、「親ノード」と呼ばれる例外は、その「子ノード」となっているタイプの例外を処理できます。たとえば、Security Exceptionハンドラは、Invalid Login例外ハンドラの前にフローで発生したInvalid Login例外を処理します。
OutSystemsで扱う例外には、以下のタイプがあります。
All Exception
All Exceptionは、最も汎用的な例外であり、他のすべてが含まれます。これは、All Exceptionに対する例外ハンドラは、その例外の処理に特化した例外ハンドラが他にない場合に、あらゆる種類の例外を処理することを意味しています。
All Exceptionは、その特定のスコープ内において、あらゆる例外を同一の方法で処理する場合に使用できます。
User Exception
独自のUser Exceptionを作成し、ロジックで特定の条件を満たしたときに発生させることができます。たとえば、「UnavailableExternalSystem」という名前のUser Exceptionを作成して、アプリケーションでデータの取り出しに使用する外部システムが稼働停止していることを検出したときに、ロジックでその例外を発生させることができます。
作成したUser Exceptionは、汎用的なUser Exceptionの「子ノード」となります。つまり、汎用的なUser Exceptionハンドラは、指定したUser Exceptionの前にフローで発生したあらゆる独自のUser Exceptionを処理します。
Database Exception
Database Exceptionは、データベース管理システムに関連した以下のようなエラーが発生したときにOutSystemsが発生させます。
- すでに存在しているレコードの作成、または一意なインデックス内の情報の重複によるデータベースの制約違反の場合。
- エンティティのデータを誤ったデータ型で作成または更新しようとした場合。
- Protectに設定されている削除規則の関係に対する違反を試行した場合。
OutSystemsは、Aggregate、SQLクエリ、またはエンティティアクションなどで、データベースエンジンとやりとりを行っている間は常にDatabase Exceptionを発生させることができます。
Security Exception
Security Exceptionは、アプリケーションモジュールに認証または他のセキュリティの仕組みがある場合に、常にOutSystemsが発生させることができます。Security Exceptionには、以下が含まれます。
- Invalid Login(無効なログイン)
- エンドユーザーによるログインが正しくありません。この例外は、LoginおよびLoginPasswordシステムアクションにより発生します。
- Not Registered(登録なし)
-
エンドユーザーが登録されていません。現在の画面にアクセスするには登録が必要です。モジュールに新しいカスタムロールを作成したとき、OutSystemsは特定のRole ExceptionをNot Registered例外に作成します。
- Not <Role> – エンドユーザーが、必要なロールが与えられていない画面にアクセスしようとしています。
OutSystemsでは、ロジックでNot Registered Exceptionまたは他の既存のRole Exceptionを発生させることができます。
Security Exceptionハンドラは、その例外に特化した例外ハンドラが他にない場合に、上記の例外すべてを処理します。UI FlowsのOnExceptionアクションでSecurity Exceptionを処理する必要があります。
Communication Exception
Communication Exceptionは、モバイルアプリケーションのみに適用されます。クライアントデバイスがサーバーに接続しようとしたときに、インターネットに接続されていないなどの通信上の問題が発生した場合は常に発生します。接続状態が良好でない場合にも、サーバーが指定されたタイムアウト値内に応答できず、Communication Exceptionが発生する可能性があります(デフォルトのタイムアウト値はモジュールのServer Request Timeoutプロパティに設定されています)。
Communication Exceptionを発生させるのは、OutSystemsだけです。ユーザーがロジックで発生させることはできません。
Abort Activity Change Exception
Abort Activity Change Exceptionの発生は、Process Activityコールバックアクションでアクティビティが次の状態に進むのを防ぐ仕組みとして使用されます。
例外メッセージ
OutSystemsが例外を発生させたときは、Exception Handler要素のExceptionMessageプロパティに問題の説明が自動的に入力されます。ロジックでUser Exceptionなどの例外を発生させるときは、Raise Exception要素のプロパティに例外メッセージを定義します。
例外ログ
モジュールで例外を処理するときは、Exception Handler要素のLog Errorプロパティを使用して、OutSystemsが例外をログに記録するかどうかを選択できます。ログに記録された例外には、OutSystems環境の管理コンソールからアクセスできます。
連携している場合、OutSystemsは、Exception HandlerのLog Errorプロパティに設定した値にかかわらずすべての例外をログに記録します。