【GeneXus Tips】ErrorHandlerの動作


お久しぶりのKudoです。

今回はエラーハンドラーの実装で躓いたC#とJavaの違いについて投稿です。

先に「エラーハンドラー(Error_handler)」とはなんぞや?という人に説明を
エラーハンドラーはGeneXus内で使用することができるDB用のエラーハンドリング(エラー処理)ルールです。
イベントでエラー時に実行したい処理をSubルーチンとして記述し
ルールでError_handlerルールを利用して先ほどのSubルーチンを呼びます

これだけです。

他の言語に比べたらとても楽なんですがDBのエラーしか拾ってこないんですよね・・・

さて、本題ですがこのエラーハンドラーには様々なパラメータがあることをご存知でしょうか?
GeneXusWikiで調べたことがある人はこのページを見た事があると思います
基本的には、エラーの内容や原因を特定するための値ですが1つだけ、処理を制御する変数が存在します、それが

&gxErrOpt

です

この変数、Wikiの説明を見るだけだとC#とJavaで違いが発生するようには見えないのですが
実は、発生してしまうんです。

例として次のSubルーチンが存在します。

C#でこのルーチンが実行された場合、画面に「DBエラーが発生しました」と表示され、システム上は正常に処理が行われます。
しかし!
Javaではサーバー側のエラーとして処理され、HTTPレスポンスで500が帰ってきてしまい、システムが落ちてしまいます。

そして、この動作の差異の原因こそ&gxErrOptなのです。

ですので、ここで&gxErrOptを0にするように処理を直すと・・・

これだけでJavaでもC#と同じ動作を行うようになります。