Esempio n. 1
0
        /// <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);
            // -------------------------------------------------------------
        }
Esempio n. 3
0
 /// <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");
     }
 }
Esempio n. 4
0
        /// <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);
            }

            // -------------------------------------------------------------
        }
Esempio n. 5
0
        /// <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);
        }
Esempio n. 6
0
 /// <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)
 {
 }