/// <summary>業務例外発生時の処理を実装</summary> /// <param name="baEx">BusinessApplicationException</param> /// <param name="rcFxEventArgs">イベントハンドラの共通引数</param> /// <remarks>画面コード親クラス1から利用される派生の末端</remarks> protected override void UOC_ABEND(BusinessApplicationException baEx, 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 + "," + baEx.messageID + "," + baEx.Message; // Log4Netへログ出力 LogIF.WarnLog("ACCESS", strLogMessage); } // ------------------------------------------------------------- }
public void WarnLog_Test(string loggerName, string message) { try { LogIF.WarnLog(loggerName, message); } catch (Exception ex) { // Print a stack trace when an exception occurs. Console.WriteLine(ex.StackTrace); throw; } }
/// <summary> /// B層の業務例外による異常終了の後処理を実装するUOCメソッド。 /// </summary> /// <param name="parameterValue">引数クラス</param> /// <param name="returnValue">戻り値クラス</param> /// <param name="baEx">BusinessApplicationException</param> /// <remarks>業務コード親クラス1から利用される派生の末端</remarks> protected override void UOC_ABEND(BaseParameterValue parameterValue, BaseReturnValue returnValue, BusinessApplicationException baEx) { // 業務例外発生時の処理を実装 // 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 + "," + baEx.messageID + "," + baEx.Message; // Log4Netへログ出力 LogIF.WarnLog("ACCESS", strLogMessage); } // ------------------------------------------------------------- }
/// <summary>例外処理</summary> protected override void UOC_ABEND(Exception ex) { // 性能測定終了 // イベント処理開始前にエラーが発生した場合は、 // this.perfRecがnullの場合があるので、null対策コードを挿入する。 if (this.perfRec == null) { // nullの場合、新しいインスタンスを生成し、性能測定開始。 this.perfRec = new PerformanceRecorder(); perfRec.StartsPerformanceRecord(); } this.perfRec.EndsPerformanceRecord(); // ACCESSログ出力----------------------------------------------- if (MyBaseAsyncFunc.CanOutPutLog) { // ------------ // メッセージ部 // ------------ // ユーザ名, レイヤ, 画面名, コントロール名, // 処理時間(実行時間), 処理時間(CPU時間) // エラーメッセージ等 // ------------ string strLogMessage = "," + "-" + "," + "*-----" + "," + this.UIElementName + "," + this.AsyncFunc.Method.Name + "," + this.perfRec.ExecTime + "," + this.perfRec.CpuTime + "," + ex.Message; // Log4Netへログ出力 LogIF.WarnLog("ACCESS", strLogMessage); } // ------------------------------------------------------------- }
/// <summary> /// B層の一般的な例外による異常終了の後処理を実装するUOCメソッド。 /// </summary> /// <param name="parameterValue">引数クラス</param> /// <param name="returnValue">戻り値クラス</param> /// <param name="ex">Exception</param> /// <remarks>業務コード親クラス1から利用される派生の末端</remarks> protected override void UOC_ABEND(BaseParameterValue parameterValue, ref BaseReturnValue returnValue, Exception ex) { // 一般的な例外発生時の処理を実装 // TODO: // nullチェック if (this.perfRec == null) { // なにもしない // リスロー throw ex; } else { // 性能測定終了 this.perfRec.EndsPerformanceRecord(); // キャスト MyParameterValue myPV = (MyParameterValue)parameterValue; // システム例外に振り替える用のワーク bool sysErrorFlag = false; string sysErrorMessageID = ""; string sysErrorMessage = ""; #region 例外の振替処理のIF文 if (ex.Message == "Other-Business") { // 業務例外へ変換 returnValue.ErrorFlag = true; returnValue.ErrorMessageID = "振替後"; returnValue.ErrorMessage = "振替後"; returnValue.ErrorInfo = "振り替える場合は、基本的にここを利用。"; } else if (ex.Message == "Other-System") { // システム例外へ振替 sysErrorFlag = true; sysErrorMessageID = "振替後"; sysErrorMessage = "振替後"; } #endregion #region ACCESSログ出力、リスローする・しない if (returnValue.ErrorFlag) { // 業務例外へ変換 // ------------ // メッセージ部 // ------------ // ユーザ名, 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 + "," + returnValue.ErrorMessageID + "," + returnValue.ErrorMessage; // Log4Netへログ出力 LogIF.WarnLog("ACCESS", strLogMessage); } else if (sysErrorFlag) { // システム例外へ振替 // ------------ // メッセージ部 // ------------ // ユーザ名, 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 + "," + sysErrorMessageID + "," + sysErrorMessage + "\r\n" + ex.StackTrace; // Log4Netへログ出力 LogIF.ErrorLog("ACCESS", strLogMessage); // 振替てスロー throw new BusinessSystemException(sysErrorMessageID, sysErrorMessage); } else { // そのまま // ------------ // メッセージ部 // ------------ // ユーザ名, 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 + "," + "other Exception" + "," + ex.Message + "\r\n" + ex.StackTrace; // Log4Netへログ出力 LogIF.ErrorLog("ACCESS", strLogMessage); // リスロー throw ex; } #endregion } }
/// <summary>業務例外発生時の処理を実装</summary> /// <param name="baEx">BusinessApplicationException</param> /// <param name="fxEventArgs">イベントハンドラの共通引数</param> /// <remarks>画面コード親クラス1から利用される派生の末端</remarks> protected override void UOC_ABEND(BusinessApplicationException baEx, FxEventArgs fxEventArgs) { // 業務例外発生時の処理を実装 // TODO: // ここに、メッセージの組み立てロジックを実装する。 // メッセージ編集処理 ------------------------------------------ string messageID = baEx.messageID; string messageDescription = ""; // メッセージIDから、対応するメッセージを取得する。 messageDescription = GetMessage.GetMessageDescription(messageID); if (messageDescription == "") { // メッセージが取得できなかった場合 messageDescription = baEx.Message; } else { // メッセージが取得できた場合、 // 必要なら、メッセージに、可変文字列を組み込む。 // 方式は、プロジェクト毎に検討のこと。 messageDescription = messageDescription.Replace("%1", baEx.Message); messageDescription = messageDescription.Replace("%2", baEx.Information); } // ------------------------------------------------------------- // メッセージ表示処理 ------------------------------------------ #region メッセージボックスを使用して表示する場合。 // 「OK」メッセージダイアログの表示処理 this.ShowOKMessageDialog( messageID, messageDescription, FxEnum.IconType.Exclamation, "BusinessApplicationExceptionを使用したダイアログ表示"); #endregion #region マスタ ページ上のラベルに表示する場合。 //// 結果表示するメッセージ エリア //Label label = (Label)this.GetMasterWebControl("Label1"); //label.Text = ""; //// 結果(業務続行可能なエラー) //label.Text = "ErrorMessageID:" + baEx.messageID + "\r\n"; //label.Text += "ErrorMessage:" + baEx.Message + "\r\n"; //label.Text += "ErrorInfo:" + baEx.Information + "\r\n"; #endregion // ------------------------------------------------------------- // 性能測定終了 // イベント処理開始前にエラーが発生した場合は、 // 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 + "," + baEx.messageID + "," + baEx.Message; // Log4Netへログ出力 LogIF.WarnLog("ACCESS", strLogMessage); // ------------------------------------------------------------- }