/// <summary>システム例外発生時の処理を実装</summary> /// <param name="bsEx">BusinessSystemException</param> /// <param name="rcFxEventArgs">イベントハンドラの共通引数</param> /// <remarks>画面コード親クラス1から利用される派生の末端</remarks> protected override void UOC_ABEND(BusinessSystemException bsEx, RcFxEventArgs rcFxEventArgs) { // システム例外発生時の処理を実装 // TODO: // 性能測定終了 // イベント処理開始前にエラーが発生した場合は、 // this.perfRecがnullの場合があるので、null対策コードを挿入する。 if (this.perfRec == null) { // nullの場合、新しいインスタンスを生成し、性能測定開始。 this.perfRec = new PerformanceRecorder(); perfRec.StartsPerformanceRecord(); } this.perfRec.EndsPerformanceRecord(); // ACCESSログ出力----------------------------------------------- if (MyBaseControllerWin.CanOutPutLog) { // ------------ // メッセージ部 // ------------ // ユーザ名, レイヤ, 画面名, コントロール名, // 処理時間(実行時間), 処理時間(CPU時間) // エラーメッセージID, エラーメッセージ等 // ------------ string strLogMessage = "," + UserInfo.UserName + "," + "<-----" + "," + this.Name + "," + rcFxEventArgs.ControlName + "," + this.perfRec.ExecTime + "," + this.perfRec.CpuTime + "," + bsEx.messageID + "," + bsEx.Message + "\r\n" + this.OriginalStackTrace; // OriginalStackTrace(ログ出力)の品質向上 if (this.OriginalStackTrace == "") { strLogMessage += bsEx.StackTrace; } else { strLogMessage += this.OriginalStackTrace; } // Log4Netへログ出力 LogIF.ErrorLog("ACCESS", strLogMessage); } // ------------------------------------------------------------- }
/// <summary>システム例外発生時の処理を実装</summary> /// <param name="bsEx">BusinessSystemException</param> /// <param name="fxEventArgs">イベントハンドラの共通引数</param> /// <remarks>画面コード親クラス1から利用される派生の末端</remarks> protected override void UOC_ABEND(BusinessSystemException bsEx, FxEventArgs fxEventArgs) { // システム例外発生時の処理を実装 // TODO: // 性能測定終了 // イベント処理開始前にエラーが発生した場合は、 // this.perfRecがnullの場合があるので、null対策コードを挿入する。 if (this.perfRec == null) { // nullの場合、新しいインスタンスを生成し、性能測定開始。 this.perfRec = new PerformanceRecorder(); perfRec.StartsPerformanceRecord(); } this.perfRec.EndsPerformanceRecord(); // 認証ユーザ情報を取得する ------------------------------------ this.GetUserInfo(); // ACCESSログ出力----------------------------------------------- // ------------ // メッセージ部 // ------------ // ユーザ名, IPアドレス, // レイヤ, 画面名, コントロール名, 処理名 // 処理時間(実行時間), 処理時間(CPU時間) // エラーメッセージID, エラーメッセージ等 // ------------ string strLogMessage = "," + UserInfo.UserName + "," + Request.UserHostAddress + "," + "<-----" + "," + this.ContentPageFileNoEx + "," + fxEventArgs.ButtonID + "," + "" + "," + this.perfRec.ExecTime + "," + this.perfRec.CpuTime + "," + bsEx.messageID + "," + bsEx.Message + "\r\n" + "," + bsEx.StackTrace; // bsEX // Log4Netへログ出力 LogIF.ErrorLog("ACCESS", strLogMessage); // ------------------------------------------------------------- // エラー画面に画面遷移する ------------------------------------ this.TransferErrorScreen(bsEx); // ------------------------------------------------------------- }
/// <summary>ExceptionのMessageIDを返す。</summary> /// <param name="ex">Exception</param> /// <returns>ExceptionのMessageID</returns> private string GetExceptionMessageID(Exception ex) { // Check exception type if (ex is BusinessSystemException) { // システム例外 BusinessSystemException bsEx = (BusinessSystemException)ex; return(bsEx.messageID); } else if (ex is FrameworkException) { // フレームワーク例外 FrameworkException fxEx = (FrameworkException)ex; return(fxEx.messageID); } else { // それ以外の例外 return("other Exception"); } }
/// <summary> /// B層のシステム例外による異常終了の後処理を実装するUOCメソッド。 /// </summary> /// <param name="parameterValue">引数クラス</param> /// <param name="returnValue">戻り値クラス</param> /// <param name="bsEx">BusinessSystemException</param> /// <remarks>業務コード親クラス1から利用される派生の末端</remarks> protected override void UOC_ABEND(BaseParameterValue parameterValue, BaseReturnValue returnValue, BusinessSystemException bsEx) { // システム例外発生時の処理を実装 // TODO: // nullチェック if (this.perfRec == null) { // なにもしない } else { // 性能測定終了 this.perfRec.EndsPerformanceRecord(); // ACCESSログ出力----------------------------------------------- MyParameterValue myPV = (MyParameterValue)parameterValue; // ------------ // メッセージ部 // ------------ // ユーザ名, IPアドレス, レイヤ, // 画面名, コントロール名, メソッド名, 処理名 // 処理時間(実行時間), 処理時間(CPU時間) // エラーメッセージID, エラーメッセージ等 // ------------ string strLogMessage = "," + myPV.User.UserName + "," + myPV.User.IPAddress + "," + "<<-----" + "," + myPV.ScreenId + "," + myPV.ControlId + "," + myPV.MethodName + "," + myPV.ActionType + "," + this.perfRec.ExecTime + "," + this.perfRec.CpuTime + "," + bsEx.messageID + "," + bsEx.Message + "\r\n" + bsEx.StackTrace; // Log4Netへログ出力 LogIF.ErrorLog("ACCESS", strLogMessage); } // ------------------------------------------------------------- }
/// <summary>例外発生時に、エラー画面に画面遷移</summary> /// <param name="ex">例外オブジェクト</param> /// <remarks>他から呼び出し可能に変更(static)</remarks> public static void TransferErrorScreen2(Exception ex) { #region 例外型を判別しエラーメッセージIDを取得 // エラーメッセージ string err_msg; // エラー情報をセッションから取得 string err_info; // エラーのタイプ string[] arrErrType = ex.GetType().ToString().Split('.'); string errType = arrErrType[arrErrType.Length - 1]; // エラーメッセージID string errMsgId = ""; // #21-start if (errType == "BusinessSystemException") { // システム例外 BusinessSystemException bsEx = (BusinessSystemException)ex; errMsgId = bsEx.messageID; } else if (errType == "FrameworkException") { // フレームワーク例外 FrameworkException fxEx = (FrameworkException)ex; errMsgId = fxEx.messageID; } else { // それ以外の例外 errMsgId = "-"; } // #21-end #endregion // 2009/07/31-start #region エラー時に、セッションを開放しないで、業務を続行可能にする処理を追加。 // 不正操作エラー or 画面遷移制御チェック エラー if (errMsgId == "IllegalOperationCheckError" || errMsgId == "ScreenControlCheckError") { // セッションをクリアしない HttpContext.Current.Items.Add(FxHttpContextIndex.SESSION_ABANDON_FLAG, false); } else { // セッションをクリアする HttpContext.Current.Items.Add(FxHttpContextIndex.SESSION_ABANDON_FLAG, true); } #endregion // 2009/07/31-end #region エラー画面に表示するエラー情報を作成 err_msg = System.Environment.NewLine + "エラーメッセージID: " + errMsgId + System.Environment.NewLine + "エラーメッセージ: " + ex.Message.ToString(); // #19-start err_info = System.Environment.NewLine + "対象URL: " + HttpContext.Current.Request.Url.ToString() + System.Environment.NewLine + "スタックトレース:" + ex.StackTrace.ToString() + System.Environment.NewLine + "Exception.ToString():" + ex.ToString(); // #19-end // Form情報を出力するために、遷移方法をServer.Transferに変更。 // また、情報受け渡しを、HttpContextに変更。 HttpContext.Current.Items.Add(FxHttpContextIndex.SYSTEM_EXCEPTION_MESSAGE, err_msg); HttpContext.Current.Items.Add(FxHttpContextIndex.SYSTEM_EXCEPTION_INFORMATION, err_info); #endregion // エラー画面へのパスを取得 --- チェック不要(ベースクラスでチェック済み) string errorScreenPath = GetConfigParameter.GetConfigValue(FxLiteral.ERROR_SCREEN_PATH); // エラー画面へ画面遷移 HttpContext.Current.Server.Transfer(errorScreenPath); }
/// <summary> /// B層のシステム例外による異常終了の後処理を実装するUOCメソッド。 /// </summary> /// <param name="parameterValue">引数クラス</param> /// <param name="returnValue">戻り値クラス</param> /// <param name="bsEx">BusinessSystemException</param> /// <remarks>派生の業務コード親クラス2でオーバーライドする。</remarks> protected virtual void UOC_ABEND(BaseParameterValue parameterValue, BaseReturnValue returnValue, BusinessSystemException bsEx) { }