最近のアクセス:
error_handler ルール

プログラムの実行時にデータベースに関連するエラーが発生した場合に、ユーザーが独自の処置を取れるようにします。

構文

Error_Handler(‘subname');

入力値の説明:

subname
このルールを使用するプログラムに含まれるサブルーチンの名前です。


適用範囲

オブジェクト: ProcedureTransactionWeb Panel
ジェネレーター: .NET.NET FrameworkJava


説明

このルールを使用することにより、トランザクションエラーや接続エラーが発生すると、ユーザー定義のルーチンが実行されます。

これは、アクティブな error_handler コマンドがなければ、プログラム全体のどこにでも適用できる宣言型ルールです。

ルール/コマンドの適用範囲は、これを使用するプログラムでのみ考慮されます。つまり、このルールを使用するプログラムで呼び出されるどのプログラムにも影響しません。このルールを使用するプログラムが別のプログラムを呼び出し、呼び出されたプログラムでも同じルールを使用する場合は、呼び出し元のプログラムに属するルールは、呼び出されたプログラムで無視されるため、プログラムごとにルールを定義する必要があります。つまり、このルールは、それを使用するプログラムのみに制限されます。

error_handler プログラムは、実行時にデータベースに関連するエラーが検知されるたびに呼び出されます。このプログラムは、パラメーターを受け取りませんが、GeneXus に発生したエラーを識別するために、次の &err 標準変数を使用できます:
 
名前
データタイプ
説明
&Err
Numeric(3)
GeneXus の標準エラーコードや、未定義のデータベース エラー コードを検知した場合の 999 を含みます。エラーを識別できるようにするには、この変数を使用することを強くお勧めします。GeneXus の別のプラットフォームにプログラムに移植しやすくなります。次のリストに、&Err の値およびそれらの意味 (&Errmsg 変数に割り当てることできる) を示します。
1                       レコードが重複しています。
101                   ファイルの最後です。
103                   オブジェクトがロックされています (レコードまたはファイル)。
105                   オブジェクトが見つかりません。
106                   データベースが既に存在します。
500                   親の主キーが見つかりません。
600                   参照整合性エラーが発生しました (Java ジェネレーターのみ)。
999                   予期しない DBMS エラーの発生です。

また、次の変数を定義して、データベースに由来するエラーコードと説明に関する詳細情報を受け取ることができます:
 
名前
データタイプ
説明
&gxDBErr
Numeric(5)  
ネイティブの DBMS エラーコードを含みます。&Err が 500 より大きい場合のみ値が設定されます。それ以外の場合は、未定義になります。
&GxDbSqlState Character(5)
ネイティブの SQLSate エラーコードを含みます。
&gxDBTxt
Character(255) 
ネイティブの DBMS エラーメッセージを含みます。&Err が 500 より大きい場合のみ値が設定されます。それ以外の場合は、未定義になります。
&gxOper
Character(30)  
エラーを検知した時点で実行中だった操作の説明を含みます。この変数の値は、次のいずれかです: Declare、Fetch、Insert、Update、Delete
&gxErrTbl
Character(30)  
エラーが発生したときにアクセスしていたテーブル (ある場合) の名前を含みます。データベースの操作 (データベースの作成やリモートプロシージャーの呼び出しなど) に関連するテーブルがない場合は、「N/A」という特別な値が含まれます。
&gxErrOpt
Numeric(1)  
error_handler によって返されるコード。error_handler で設定された値によって、プログラムで行われる動作が異なります。
0 = 処理を継続します: エラーが無視されます。
1 = 操作を再試行します: [ Lock retry count ] プロパティを使用して、指定された回数試行します。再試行してもエラーが継続する場合は、処理を続行します。
2 = アプリケーションの実行をキャンセルします:  SQL エラーが発生すると、アプリケーションをキャンセルします。
3 = GeneXus の既定の処理を実行します: これが既定値です。エラー処理のないプログラムと同じように動作します。つまり、一部のエラーはロックや重複などとして無視され、その他のエラーはアプリケーションの実行をキャンセルします。
考慮事項: 
  • &gxErrOpt が 0 または 1 に設定されている場合、GeneXus で生成されたコードで取得されているため、標準出力ではエラーは表示されません。
  • error_handler ルールによって呼び出されるサブルーチン内で Return コマンドが実行される場合、オブジェクトの実行を終了し、呼び出し元に戻ります。この場合、&gxErrOpt の値に従ってエラーを処理するコードは実行されません。 そのため、&gxErrOpt に割り当てられた値に関係なく、アプリケーションはキャンセルされません。つまり、&gxErrOpt = 2 または &gxErrOpt = 3 を割り当てても、error_handler ルールによって呼び出されるサブルーチン内で Return コマンドが実行された場合、アプリケーションはキャンセルされません。


注:

  • これらの変数は、error_handler ルールまたはコマンドを持つ各オブジェクトで使用できます。
  • すべての DBMS の例外は、error_handler ルールまたはコマンドによってキャッチされます。標準変数は次の場合にロードされます:
    • &gxDBErr および &gxDBTxt は、どのような場合でもロードされます。
    • &gxDBSqlState は、次でロードされます:
      • Java
        • すべての DBMS
      • .NET Framework:
        • PostgreSQL
        • Informix   
      • .NET:
        • MySQL
        • PostgreSQL


次のように定義されている Transaction オブジェクトがあるとします:
ルール:
error_handler('DBErrors');

イベント:
Sub 'DBErrors'
    If &Err = 1
        Msg('Duplicate record')
    Endif 
EndSub

参考情報

error_handler コマンド
 


サブページ
Created: 14/09/18 03:19 by Admin Last update: 23/01/26 23:36 by Admin
カテゴリ
Powered by GXwiki 3.0