Exemplo n.º 1
0
        /// <summary>業務処理を実装</summary>
        /// <param name="parameterValue">引数クラス</param>
        private void UOC_Insert(BaseParameterValue parameterValue)
        {
            // 引数クラスをアップキャスト
            TestParameterValue testParameter = (TestParameterValue)parameterValue;

            // 戻り値クラスを生成
            TestReturnValue testReturn = new TestReturnValue();

            // ↓業務処理-----------------------------------------------------

            // データアクセス クラスを生成する
            DaoCategories daoCategories = new DaoCategories(this.GetDam());

            // 1件挿入
            //daoCategories.PK_CategoryID = testParameter.field1;
            daoCategories.CategoryName = testParameter.field2;
            daoCategories.Description = testParameter.field3;
            //daoCategories.Picture = testParameter.field4;

            // インサート
            testReturn.obj = daoCategories.D1_Insert();

            // ↑業務処理-----------------------------------------------------

            // 戻り値クラスをダウンキャストして戻す
            this.ReturnValue = (BaseReturnValue)testReturn;
        }
Exemplo n.º 2
0
        /// <summary>業務処理を実装</summary>
        /// <param name="parameterValue">引数クラス</param>
        private void UOC_Insert(BaseParameterValue parameterValue)
        {
            // 引数クラスをアップキャスト
            TestParameterValue testParameter = (TestParameterValue)parameterValue;

            // 戻り値クラスを生成
            TestReturnValue testReturn = new TestReturnValue();

            // ↓業務処理-----------------------------------------------------

            // データアクセス クラスを生成する
            DaoSuppliers daoSuppliers = new DaoSuppliers(this.GetDam());

            // 1件挿入
            //daoSuppliers.PK_SupplierID = testParameter.field1;
            daoSuppliers.CompanyName = testParameter.field2;
            daoSuppliers.ContactName = testParameter.field3;
            daoSuppliers.ContactTitle = testParameter.field4;
            daoSuppliers.Address = testParameter.field5;
            daoSuppliers.City = testParameter.field6;
            daoSuppliers.Region = testParameter.field7;
            daoSuppliers.PostalCode = testParameter.field8;
            daoSuppliers.Country = testParameter.field9;
            daoSuppliers.Phone = testParameter.field10;
            daoSuppliers.Fax = testParameter.field11;
            daoSuppliers.HomePage = testParameter.field12;

            testReturn.obj = daoSuppliers.S1_Insert();

            // ↑業務処理-----------------------------------------------------

            // 戻り値クラスをダウンキャストして戻す
            this.ReturnValue = (BaseReturnValue)testReturn;
        }
Exemplo n.º 3
0
        /// <summary>業務処理を実装</summary>
        /// <param name="parameterValue">引数クラス</param>
        private void UOC_Select(BaseParameterValue parameterValue)
        {
            // 引数クラスをアップキャスト
            TestParameterValue testParameter = (TestParameterValue)parameterValue;

            // 戻り値クラスを生成
            TestReturnValue testReturn = new TestReturnValue();

            // ↓業務処理-----------------------------------------------------

            // データアクセス クラスを生成する
            DaoCategories daoCategories = new DaoCategories(this.GetDam());

            // n件参照
            if (testParameter.field1_ForSearch.ToString().Trim() == "") { }
            else
            { daoCategories.PK_CategoryID = testParameter.field1_ForSearch; }

            if (testParameter.field2_ForSearch.ToString().Trim() == "") { }
            else
            { daoCategories.CategoryName = testParameter.field2_ForSearch; }

            DataTable dt = new DataTable();
            daoCategories.D2_Select(dt);

            testReturn.dt = dt;

            // ↑業務処理-----------------------------------------------------

            // 戻り値クラスをダウンキャストして戻す
            this.ReturnValue = (BaseReturnValue)testReturn;
        }
Exemplo n.º 4
0
        /// <summary>業務処理を実装</summary>
        /// <param name="parameterValue">引数クラス</param>
        private void UOC_Select(BaseParameterValue parameterValue)
        {
            // 引数クラスをアップキャスト
            TestParameterValue testParameter = (TestParameterValue)parameterValue;

            // 戻り値クラスを生成
            TestReturnValue testReturn = new TestReturnValue();

            // ↓業務処理-----------------------------------------------------

            // データアクセス クラスを生成する
            DaoSuppliers daoSuppliers = new DaoSuppliers(this.GetDam());

            // 1件参照
            daoSuppliers.PK_SupplierID = testParameter.field1;

            DataTable dt = new DataTable();
            daoSuppliers.S2_Select(dt);

            testReturn.field1 = dt.Rows[0][0];
            testReturn.field2 = dt.Rows[0][1];
            testReturn.field3 = dt.Rows[0][2];
            testReturn.field4 = dt.Rows[0][3];
            testReturn.field5 = dt.Rows[0][4];
            testReturn.field6 = dt.Rows[0][5];
            testReturn.field7 = dt.Rows[0][6];
            testReturn.field8 = dt.Rows[0][7];
            testReturn.field9 = dt.Rows[0][8];
            testReturn.field10 = dt.Rows[0][9];
            testReturn.field11 = dt.Rows[0][10];
            testReturn.field12 = dt.Rows[0][11];

            // ↑業務処理-----------------------------------------------------

            // 戻り値クラスをダウンキャストして戻す
            this.ReturnValue = (BaseReturnValue)testReturn;
        }
Exemplo n.º 5
0
        /// <summary>業務処理を実装</summary>
        /// <param name="parameterValue">引数クラス</param>
        private void UOC_Delete(BaseParameterValue parameterValue)
        {
            // 引数クラスをアップキャスト
            TestParameterValue testParameter = (TestParameterValue)parameterValue;

            // 戻り値クラスを生成
            TestReturnValue testReturn = new TestReturnValue();

            // ↓業務処理-----------------------------------------------------

            // データアクセス クラスを生成する
            DaoSuppliers daoSuppliers = new DaoSuppliers(this.GetDam());

            // 1件削除
            daoSuppliers.PK_SupplierID = testParameter.field1;

            testReturn.obj = daoSuppliers.S4_Delete();

            // ↑業務処理-----------------------------------------------------

            // 戻り値クラスをダウンキャストして戻す
            this.ReturnValue = (BaseReturnValue)testReturn;
        }
Exemplo n.º 6
0
        /// <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";
                    // OriginalStackTrace(ログ出力)の品質向上
                    if (this.OriginalStackTrace == "")
                    {
                        strLogMessage += ex.StackTrace;
                    }
                    else
                    {
                        strLogMessage += this.OriginalStackTrace;
                    }

                    // 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";
                    // OriginalStackTrace(ログ出力)の品質向上
                    if (this.OriginalStackTrace == "")
                    {
                        strLogMessage += ex.StackTrace;
                    }
                    else
                    {
                        strLogMessage += this.OriginalStackTrace;
                    }

                    // Log4Netへログ出力
                    LogIF.ErrorLog("ACCESS", strLogMessage);

                    // リスロー
                    throw ex;
                }

                #endregion
            }
        }
Exemplo n.º 7
0
 /// <summary>
 /// B層のトランザクションのコミット後の終了処理を実装
 /// </summary>
 /// <param name="parameterValue">引数クラス</param>
 /// <param name="returnValue">戻り値クラス</param>
 /// <remarks>業務コード親クラス1から利用される派生の末端</remarks>
 protected override void UOC_AfterTransaction(BaseParameterValue parameterValue, BaseReturnValue returnValue)
 {
     // TODO:
 }
Exemplo n.º 8
0
        /// <summary>
        /// B層の開始処理を実装
        /// </summary>
        /// <param name="parameterValue">引数クラス</param>
        /// <remarks>業務コード親クラス1から利用される派生の末端</remarks>
        protected override void UOC_PreAction(BaseParameterValue parameterValue)
        {
            // ACCESSログ出力-----------------------------------------------

            MyParameterValue myPV = (MyParameterValue)parameterValue;

            // ------------
            // メッセージ部
            // ------------
            // ユーザ名, IPアドレス, レイヤ, 
            // 画面名, コントロール名, メソッド名, 処理名
            // ------------
            string strLogMessage =
                "," + myPV.User.UserName +
                "," + myPV.User.IPAddress +
                "," + "----->>" +
                "," + myPV.ScreenId +
                "," + myPV.ControlId +
                "," + myPV.MethodName +
                "," + myPV.ActionType;

            // Log4Netへログ出力
            LogIF.InfoLog("ACCESS", strLogMessage);

            // -------------------------------------------------------------

            // 性能測定開始
            this.perfRec = new PerformanceRecorder();
            this.perfRec.StartsPerformanceRecord();

        }
Exemplo n.º 9
0
        /// <summary>業務処理を実装</summary>
        /// <param name="parameterValue">引数クラス</param>
        private void UOC_メソッド名(BaseParameterValue parameterValue)
        {
            // 戻り値クラスを生成して、事前に戻り地に設定しておく。
            _3TierReturnValue testReturn = new _3TierReturnValue();
            this.ReturnValue = testReturn;

            // ↓業務処理-----------------------------------------------------

            // 共通Dao
            CmnDao cmnDao = new CmnDao(this.GetDam());
            cmnDao.ExecSelectScalar();

            // ↑業務処理-----------------------------------------------------
        }
Exemplo n.º 10
0
    /// <summary>
    /// 業務処理を実装
    /// </summary>
    /// <param name="parameterValue">引数クラス</param>
    /// <param name="returnValue">戻り値クラス</param>
    protected override void UOC_DoAction(BaseParameterValue parameterValue, ref BaseReturnValue returnValue)
    {
        // 引数クラスをアップキャスト
        TestParameterValue testParameter = (TestParameterValue)parameterValue;

        // 戻り値クラスを生成
        TestReturnValue testReturn = new TestReturnValue();

        // 戻り値クラスをダウンキャストして戻す
        returnValue = (BaseReturnValue)testReturn;

        // ---

        // トランザクション パターンIDの領域
        string[] transactionPatternIDs;

        // トランザクション グループIDからトランザクション パターンIDを取得
        BaseLogic.GetTransactionPatterns(
            (string)testParameter.Obj, out transactionPatternIDs);

        // トランザクション パターンIDを設定
        testReturn.Obj = transactionPatternIDs;

        #region Damを初期化

        // トランザクション グループIDから取得した、
        // トランザクション パターンIDでDam初期化する。
        foreach (string transactionPatternID in transactionPatternIDs)
        {
            BaseDam tempDam = null;

            if (transactionPatternID.IndexOf("SQL") != -1)
            {
                // DamSqlSvrを初期化してセット
                tempDam = new DamSqlSvr();
                BaseLogic.InitDam(transactionPatternID, tempDam);
                this.SetDam(transactionPatternID, tempDam);
            }
            else if (transactionPatternID.IndexOf("ODP") != -1)
            {
                // DamOraOdpを初期化してセット
                tempDam = new DamOraOdp();
                BaseLogic.InitDam(transactionPatternID, tempDam);
                this.SetDam(transactionPatternID, tempDam);
            }
            else if (transactionPatternID.IndexOf("DB2") != -1)
            {
                // DamDB2を初期化してセット
                tempDam = new DamDB2();
                BaseLogic.InitDam(transactionPatternID, tempDam);
                this.SetDam(transactionPatternID, tempDam);
            }
            else if (transactionPatternID.IndexOf("MCN") != -1)
            {
                // DamMySQLを初期化してセット
                tempDam = new DamMySQL();
                BaseLogic.InitDam(transactionPatternID, tempDam);
                this.SetDam(transactionPatternID, tempDam);
            }
        }

        #endregion

        #region 終了時の状態選択

        #region Damの状態選択

        if ((parameterValue.ActionType.Split('%'))[2] == "UT")
        {
            // トランザクションあり
        }
        else if ((parameterValue.ActionType.Split('%'))[2] == "NT")
        {
            // トランザクションなし
            // → まえもってロールバックしておく

            // ロールバック
            foreach (string transactionPatternID in transactionPatternIDs)
            {
                this.GetDam(transactionPatternID).RollbackTransaction();
            }
        }
        else if ((parameterValue.ActionType.Split('%'))[2] == "NC")
        {
            // コネクションなし
            // → まえもってロールバック、コネクションクローズしておく
            //
            // ※ トランザクションを開始して
            //    コミットしないで閉じると、ロールバック扱い。

            // ロールバック
            foreach (string transactionPatternID in transactionPatternIDs)
            {
                this.GetDam(transactionPatternID).RollbackTransaction();
            }

            // コネクションクローズ
            foreach (string transactionPatternID in transactionPatternIDs)
            {
                this.GetDam(transactionPatternID).ConnectionClose();
            }
        }
        else if ((parameterValue.ActionType.Split('%'))[2] == "NULL")
        {
            // データアクセス制御クラス = Null
            // → まえもってロールバック、コネクションクローズ、Nullクリアしておく
            //
            // ※ トランザクションを開始して
            //    コミットしないで閉じると、ロールバック扱い。

            // ロールバック
            foreach (string transactionPatternID in transactionPatternIDs)
            {
                this.GetDam(transactionPatternID).RollbackTransaction();
            }

            // コネクションクローズ
            foreach (string transactionPatternID in transactionPatternIDs)
            {
                this.GetDam(transactionPatternID).ConnectionClose();
            }

            // Nullクリア
            foreach (string transactionPatternID in transactionPatternIDs)
            {
                this.SetDam(transactionPatternID, null);
            }
        }

        #endregion
    
        #region エラーのスロー

        if ((parameterValue.ActionType.Split('%'))[1] == "Business")
        {
            // 業務例外のスロー
            throw new BusinessApplicationException(
                "ロールバックのテスト",
                "ロールバックのテスト",
                "エラー情報");
        }
        else if ((parameterValue.ActionType.Split('%'))[1] == "System")
        {
            // システム例外のスロー
            throw new BusinessSystemException(
                "ロールバックのテスト",
                "ロールバックのテスト");
        }
        else if ((parameterValue.ActionType.Split('%'))[1] == "Other")
        {
            // その他、一般的な例外のスロー
            throw new Exception("ロールバックのテスト");
        }
        else if ((parameterValue.ActionType.Split('%'))[1] == "Other-Business")
        {
            // その他、一般的な例外(業務例外へ振り替え)のスロー
            throw new Exception("Other-Business");
        }
        else if ((parameterValue.ActionType.Split('%'))[1] == "Other-System")
        {
            // その他、一般的な例外(システム例外へ振り替え)のスロー
            throw new Exception("Other-System");
        }

        #endregion

        #endregion
    }
Exemplo n.º 11
0
        /// <summary>
        /// 業務コード呼び出しメソッド(業務ロジックの入り口)
        /// </summary>
        /// <param name="parameterValue">引数クラス</param>
        /// <param name="iso">分離レベル(DBMS毎の分離レベルの違いを理解して設定すること)</param>
        /// <returns>戻り値クラス</returns>
        /// <remarks>画面コード クラスから利用する。</remarks>
        public BaseReturnValue DoBusinessLogic(
            BaseParameterValue parameterValue, DbEnum.IsolationLevelEnum iso)
        {
            // 戻り値クラス
            BaseReturnValue returnValue = null;

            // オリジナルのスタックトレース値のクリア
            this.OriginalStackTrace = "";

            // ★データアクセス制御クラス(DAM)の生成し、コネクションを確立、
            // トランザクションを開始する処理(業務フレームワークに、UOCで実装する)
            // this._dam = this.UOC_ConnectionOpen(parameterValue, iso);
            this.UOC_ConnectionOpen(parameterValue, iso);

            try
            {
                // 自動振り分け対応
                this.WasCalledFromDoBusinessLogic = true;

                // ★前処理(業務フレームワークに、UOCで実装する)
                this.UOC_PreAction(parameterValue);

                // ★業務ロジックの実行(業務処理の派生クラスに、UOCで実装する)
                this.UOC_DoAction(parameterValue, ref returnValue);

                // ★後処理(業務フレームワークに、UOCで実装する)
                this.UOC_AfterAction(parameterValue, returnValue);

                #region トランザクションをコミット

                // 2009/03/13---B層内:トランザクション手動制御を可能に(ここから)
                
                if (this._dam == null)
                {
                    // nullの場合はコミットしない(何もしない)。
                }
                else
                {
                    // nullでない場合はコミットする。
                    this._dam.CommitTransaction();
                }    
            
                // 2009/03/13---B層内:トランザクション手動制御を可能に(ここまで)

                // 2009/03/28---データアクセス制御クラスを配列化(ここから)
                
                foreach (string key in this._dams.Keys)
                {
                    // ここはforeachで取るので「キーなし」にならない
                    if (this._dams[key] == null)
                    {
                        // nullの場合はコミットしない(何もしない)。
                    }
                    else
                    {
                        // nullでない場合はコミットする。
                        ((BaseDam)this._dams[key]).CommitTransaction();
                    }
                }
                
                // 2009/03/28---データアクセス制御クラスを配列化(ここまで)

                #endregion

                // ★トランザクション完了後の後処理(業務フレームワークに、UOCで実装する)
                this.UOC_AfterTransaction(parameterValue, returnValue);
            }
            catch (BusinessApplicationException baEx)// 業務例外
            {
                #region トランザクションをロールバック

                // 2009/03/13---B層内:トランザクション手動制御を可能に(ここから)

                if (this._dam == null)
                {
                    // nullの場合はロールバックしない(何もしない)。
                }
                else
                {
                    // nullでない場合はロールバックする。
                    this._dam.RollbackTransaction();
                }
                
                // 2009/03/13---B層内:トランザクション手動制御を可能に(ここまで)

                // 2009/03/28---データアクセス制御クラスを配列化(ここから)

                foreach (string key in this._dams.Keys)
                {
                    // ここはforeachで取るので「キーなし」にならない
                    if (this._dams[key] == null)
                    {
                        // nullの場合はロールバックしない(何もしない)。
                    }
                    else
                    {
                        // nullでない場合はロールバックする。
                        ((BaseDam)this._dams[key]).RollbackTransaction();
                    }
                }
                
                // 2009/03/28---データアクセス制御クラスを配列化(ここまで)

                #endregion

                // 業務例外の場合、エラーフラグをセットする。

                // 戻り値がnullの場合は、生成する。
                if (returnValue == null)
                {
                    returnValue = new BaseReturnValue();
                }

                returnValue.ErrorFlag = true;

                // メッセージを戻す(戻り値クラスに設定)。
                returnValue.ErrorMessageID = baEx.messageID;
                returnValue.ErrorMessage = baEx.Message;
                returnValue.ErrorInfo = baEx.Information;

                // ★異常系の後処理(業務フレームワークに、UOCで実装する)
                this.UOC_ABEND(parameterValue, returnValue, baEx);

                // 正常系の戻り値にして戻すため、リスローしない。
            }
            catch (BusinessSystemException bsEx)// システム例外
            {
                #region トランザクションをロールバック

                // 2009/03/13---B層内:トランザクション手動制御を可能に(ここから)

                if (this._dam == null)
                {
                    // nullの場合はロールバックしない(何もしない)。
                }
                else
                {
                    // nullでない場合はロールバックする。
                    this._dam.RollbackTransaction();
                }

                // 2009/03/13---B層内:トランザクション手動制御を可能に(ここまで)

                // 2009/03/28---データアクセス制御クラスを配列化(ここから)

                foreach (string key in this._dams.Keys)
                {
                    // ここはforeachで取るので「キーなし」にならない
                    if (this._dams[key] == null)
                    {
                        // nullの場合はロールバックしない(何もしない)。
                    }
                    else
                    {
                        // nullでない場合はロールバックする。
                        ((BaseDam)this._dams[key]).RollbackTransaction();
                    }
                }

                // 2009/03/28---データアクセス制御クラスを配列化(ここまで)

                #endregion

                // 戻り値がnullの場合は、生成する。
                if (returnValue == null)
                {
                    returnValue = new BaseReturnValue();
                }

                // ★異常系の後処理(業務フレームワークに、UOCで実装する)
                this.UOC_ABEND(parameterValue, returnValue, bsEx);

                // リスロー
                throw;
            }
            catch (Exception Ex)// その他、一般的な例外
            {
                #region トランザクションをロールバック

                // 2009/03/13---B層内:トランザクション手動制御を可能に(ここから)

                if (this._dam == null)
                {
                    // nullの場合はロールバックしない(何もしない)。
                }
                else
                {
                    // nullでない場合はロールバックする。
                    this._dam.RollbackTransaction();
                }

                // 2009/03/13---B層内:トランザクション手動制御を可能に(ここまで)

                // 2009/03/28---データアクセス制御クラスを配列化(ここから)

                foreach (string key in this._dams.Keys)
                {
                    // ここはforeachで取るので「キーなし」にならない
                    if (this._dams[key] == null)
                    {
                        // nullの場合はロールバックしない(何もしない)。
                    }
                    else
                    {
                        // nullでない場合はロールバックする。
                        ((BaseDam)this._dams[key]).RollbackTransaction();
                    }
                }

                // 2009/03/28---データアクセス制御クラスを配列化(ここまで)

                #endregion

                // 戻り値がnullの場合は、生成する。
                if (returnValue == null)
                {
                    returnValue = new BaseReturnValue();
                }

                // ★異常系の後処理(業務フレームワークに、UOCで実装する)
                this.UOC_ABEND(parameterValue, ref returnValue, Ex);

                // リスローしない(上記のUOC_ABENDで必要に応じてリスロー)
                // throw;
            }
            finally
            {
                // 自動振り分け対応
                this.WasCalledFromDoBusinessLogic = false;

                #region コネクションを閉じる

                // 2009/03/13---B層内:トランザクション手動制御を可能に(ここから)
                
                if (this._dam == null)
                {
                    // nullのためなにもしない。
                }
                else
                {
                    // コネクションを閉じる。
                    this._dam.ConnectionClose();
                }
                
                // 2009/03/13---B層内:トランザクション手動制御を可能に(ここまで)

                // 2009/03/28---データアクセス制御クラスを配列化(ここから)

                foreach (string key in this._dams.Keys)
                {
                    // ここはforeachで取るので「キーなし」にならない
                    if (this._dams[key] == null)
                    {
                        // nullのためなにもしない。
                    }
                    else
                    {
                        // コネクションを閉じる。
                        ((BaseDam)this._dams[key]).ConnectionClose();
                    }
                }

                // 2009/03/28---データアクセス制御クラスを配列化(ここまで)

                #endregion
            }

            // 戻り値を戻す。
            return returnValue;
        }
Exemplo n.º 12
0
 /// <summary>
 /// 業務コード呼び出しメソッド(業務ロジックの入り口)
 /// </summary>
 /// <param name="parameterValue">引数クラス</param>
 /// <returns>戻り値クラス</returns>
 /// <remarks>
 /// 画面コード クラスから利用する。
 /// ※ オーバーロードしないのは、
 ///    レイトバインドが面倒になるため。
 /// </remarks>
 public BaseReturnValue DoBusinessLogic(BaseParameterValue parameterValue)
 {
     // IsolationLevelEnum.Userで呼び出す
     return this.DoBusinessLogic(parameterValue, DbEnum.IsolationLevelEnum.User);
 }
Exemplo n.º 13
0
        /// <summary>業務処理を実装</summary>
        /// <param name="parameterValue">引数クラス</param>
        private void UOC_BatUpd(BaseParameterValue parameterValue)
        {
            // 引数クラスをアップキャスト
            TestParameterValue testParameter = (TestParameterValue)parameterValue;

            // 戻り値クラスを生成
            TestReturnValue testReturn = new TestReturnValue();

            // ↓業務処理-----------------------------------------------------

            // データアクセス クラスを生成する
            DaoProducts daoProducts = new DaoProducts(this.GetDam());

            // ROW毎に処理
            foreach (DataRow dr in testParameter.dt.Rows)
            {
                // パラメタをクリアする。
                daoProducts.ClearParametersFromHt();

                switch (dr.RowState)
                {
                    case DataRowState.Added:

                        #region 1件挿入

                        // 設定(インサート値)
                        daoProducts.PK_ProductID = dr["ProductID"].ToString();
                        daoProducts.ProductName = dr["ProductName"].ToString();
                        daoProducts.SupplierID = dr["SupplierID"].ToString();
                        daoProducts.CategoryID = dr["CategoryID"].ToString();
                        daoProducts.QuantityPerUnit = dr["QuantityPerUnit"].ToString();
                        daoProducts.UnitPrice = dr["UnitPrice"].ToString();
                        daoProducts.UnitsInStock = dr["UnitsInStock"].ToString();
                        daoProducts.UnitsOnOrder = dr["UnitsOnOrder"].ToString();
                        daoProducts.ReorderLevel = dr["ReorderLevel"].ToString();
                        daoProducts.Discontinued = dr["Discontinued"].ToString();

                        // インサート(S1でよい)
                        testReturn.obj = daoProducts.S1_Insert();

                        #endregion

                        break;

                    case DataRowState.Deleted:

                        #region 1件削除

                        // 設定(主キー)
                        daoProducts.PK_ProductID = dr["ProductID", DataRowVersion.Original].ToString();
                        // ★ 楽観排他をする場合は、ここにタイムスタンプを追加する。

                        // デリート(タイムスタンプを指定する場合は、D4_Delete)
                        testReturn.obj = daoProducts.D4_Delete();

                        #endregion

                        break;

                    case DataRowState.Modified:

                        #region 1件更新

                        // 設定(主キー)
                        daoProducts.PK_ProductID = dr["ProductID"].ToString();

                        // ★ 楽観排他をする場合は、ここにタイムスタンプを追加する。
                        // ↓は、DataRowVersion.Originalを使用した楽観排他の例
                        daoProducts.ProductName = dr["ProductName", DataRowVersion.Original].ToString();
                        daoProducts.SupplierID = dr["SupplierID", DataRowVersion.Original].ToString();
                        daoProducts.CategoryID = dr["CategoryID", DataRowVersion.Original].ToString();
                        daoProducts.QuantityPerUnit = dr["QuantityPerUnit", DataRowVersion.Original].ToString();
                        daoProducts.UnitPrice = dr["UnitPrice", DataRowVersion.Original].ToString();
                        daoProducts.UnitsInStock = dr["UnitsInStock", DataRowVersion.Original].ToString();
                        daoProducts.UnitsOnOrder = dr["UnitsOnOrder", DataRowVersion.Original].ToString();
                        daoProducts.ReorderLevel = dr["ReorderLevel", DataRowVersion.Original].ToString();
                        daoProducts.Discontinued = dr["Discontinued", DataRowVersion.Original].ToString();

                        // 更新値設定
                        daoProducts.Set_ProductName_forUPD = dr["ProductName"].ToString();
                        daoProducts.Set_SupplierID_forUPD = dr["SupplierID"].ToString();
                        daoProducts.Set_CategoryID_forUPD = dr["CategoryID"].ToString();
                        daoProducts.Set_QuantityPerUnit_forUPD = dr["QuantityPerUnit"].ToString();
                        daoProducts.Set_UnitPrice_forUPD = dr["UnitPrice"].ToString();
                        daoProducts.Set_UnitsInStock_forUPD = dr["UnitsInStock"].ToString();
                        daoProducts.Set_UnitsOnOrder_forUPD = dr["UnitsOnOrder"].ToString();
                        daoProducts.Set_ReorderLevel_forUPD = dr["ReorderLevel"].ToString();
                        daoProducts.Set_Discontinued_forUPD = dr["Discontinued"].ToString();

                        // アップデート(タイムスタンプを指定する場合は、D3_Update)
                        testReturn.obj = daoProducts.D3_Update();

                        #endregion

                        break;

                    default:
                        break;
                }
            }

            // ↑業務処理-----------------------------------------------------

            // 戻り値クラスをダウンキャストして戻す
            this.ReturnValue = (BaseReturnValue)testReturn;
        }
Exemplo n.º 14
0
        /// <summary>
        /// 業務コード呼び出しメソッド(業務ロジックの入り口)
        /// </summary>
        /// <param name="parameterValue">引数クラス</param>
        /// <param name="iso">分離レベル(DBMS毎の分離レベルの違いを理解して設定すること)</param>
        /// <returns>戻り値クラス</returns>
        /// <remarks>
        /// クライアント側(2層C/S)用
        /// 画面コード クラスから利用する。
        /// </remarks>
        public BaseReturnValue DoBusinessLogic(
            BaseParameterValue parameterValue, DbEnum.IsolationLevelEnum iso)
        {
            // 戻り値クラス
            BaseReturnValue returnValue = null;

            // オリジナルのスタックトレース値のクリア
            this.OriginalStackTrace = "";

            // データアクセス制御クラス(DAM)がグローバルなので、全てロックする。
            lock (BaseLogic2CS._lock)
            {

                if (BaseLogic2CS._dam == null)
                {
                    // データアクセス制御クラス(DAM)が無い場合

                    // ★データアクセス制御クラス(DAM)の生成し、コネクションを確立、
                    // トランザクションを開始する処理(業務フレームワークに、UOCで実装する)
                    this.UOC_ConnectionOpen(parameterValue, iso);
                }
                else
                {
                    // データアクセス制御クラス(DAM)が有る場合
                }

                try
                {
                    // 自動振り分け対応
                    this.WasCalledFromDoBusinessLogic = true;

                    // ★前処理(業務フレームワークに、UOCで実装する)
                    this.UOC_PreAction(parameterValue);

                    // ★業務ロジックの実行(業務処理の派生クラスに、UOCで実装する)
                    this.UOC_DoAction(parameterValue, ref returnValue);

                    // ★後処理(業務フレームワークに、UOCで実装する)
                    this.UOC_AfterAction(parameterValue, returnValue);

                    //// トランザクション終了
                    //BaseLogic2CS._dam.CommitTransaction();
                    
                    //// ★トランザクション完了後の後処理(業務フレームワークに、UOCで実装する)
                    //this.UOC_AfterTransaction(parameterValue, returnValue);
                }
                catch (BusinessApplicationException baEx)// 業務例外
                {
                    // ★★業務例外時のロールバックは自動にしない。

                    // 業務例外の場合、エラーフラグをセットする。

                    // 戻り値がnullの場合は、生成する。
                    if (returnValue == null)
                    {
                        returnValue = new BaseReturnValue();
                    }

                    returnValue.ErrorFlag = true;

                    // メッセージを戻す(戻り値クラスに設定)。
                    returnValue.ErrorMessageID = baEx.messageID;
                    returnValue.ErrorMessage = baEx.Message;
                    returnValue.ErrorInfo = baEx.Information;

                    // ★異常系の後処理(業務フレームワークに、UOCで実装する)
                    this.UOC_ABEND(parameterValue, returnValue, baEx);

                    // 正常系の戻り値にして戻すため、リスローしない。
                }
                catch (BusinessSystemException bsEx)// システム例外
                {
                    // ★システム例外時は、自動的にロールバック。

                    // 2009/03/13---B層内:トランザクション手動制御を可能に(ここから)
                    // トランザクションをロールバック
                    if (BaseLogic2CS._dam == null)
                    {
                        // nullの場合はロールバックしない(何もしない)。
                    }
                    else
                    {
                        // 例外対策(例外は潰さない)
                        try
                        {
                            // nullでない場合はロールバックする。
                            BaseLogic2CS._dam.RollbackTransaction();
                            // コネクション クローズ
                            BaseLogic2CS._dam.ConnectionClose();
                        }
                        finally
                        {
                            // nullクリア(次回、再接続される。)
                            BaseLogic2CS._dam = null;
                        }
                    }
                    // 2009/03/13---B層内:トランザクション手動制御を可能に(ここまで)

                    // 戻り値がnullの場合は、生成する。
                    if (returnValue == null)
                    {
                        returnValue = new BaseReturnValue();
                    }

                    // ★異常系の後処理(業務フレームワークに、UOCで実装する)
                    this.UOC_ABEND(parameterValue, returnValue, bsEx);

                    // リスロー
                    throw;
                }
                catch (Exception Ex)// その他、一般的な例外
                {
                    // ★その他、一般的な例外は、自動的にロールバック。

                    // 2009/03/13---B層内:トランザクション手動制御を可能に(ここから)
                    // トランザクションをロールバック
                    if (BaseLogic2CS._dam == null)
                    {
                        // nullの場合はロールバックしない(何もしない)。
                    }
                    else
                    {
                        // 例外対策(例外は潰さない)
                        try
                        {
                            // nullでない場合はロールバックする。
                            BaseLogic2CS._dam.RollbackTransaction();
                            // コネクション クローズ
                            BaseLogic2CS._dam.ConnectionClose();
                        }
                        finally
                        {
                            // nullクリア(次回、再接続される。)
                            BaseLogic2CS._dam = null;
                        }
                    }
                    // 2009/03/13---B層内:トランザクション手動制御を可能に(ここまで)

                    // 戻り値がnullの場合は、生成する。
                    if (returnValue == null)
                    {
                        returnValue = new BaseReturnValue();
                    }

                    // ★異常系の後処理(業務フレームワークに、UOCで実装する)
                    this.UOC_ABEND(parameterValue, ref returnValue, Ex);

                    // リスローしない(上記のUOC_ABENDで必要に応じてリスロー)
                    // throw;
                }
                finally
                {
                    // 自動振り分け対応
                    this.WasCalledFromDoBusinessLogic = false;

                    // クライアント側(2層C/S)用では、マニュアル操作だが、
                    // ノートランザクションの時は、都度コネクションを閉じる。

                    // Damオブジェクトの存在チェック
                    if (BaseLogic2CS._dam == null)
                    {
                        // nullのためなにもしない。
                    }
                    else
                    {
                        // ノートランザクションの時は、都度コネクションを閉じる。
                        if (iso == DbEnum.IsolationLevelEnum.NoTransaction)
                        {
                            // 例外対策(例外は潰さない)
                            try
                            {
                                // コネクション クローズ
                                BaseLogic2CS._dam.ConnectionClose();
                            }
                            finally
                            {
                                // nullクリア(次回の「DoBusinessLogic_2CS」で再接続される。)
                                BaseLogic2CS._dam = null;
                            }
                        }
                    }
                }
            }

            // 戻り値を戻す。
            return returnValue;
        }
Exemplo n.º 15
0
    /// <summary>業務処理を実装</summary>
    /// <param name="parameterValue">引数クラス</param>
    /// <param name="returnValue">戻り値クラス</param>
    protected override void UOC_DoAction(BaseParameterValue parameterValue, ref BaseReturnValue returnValue)
    {
        // 戻り値を生成しておく。
        returnValue = new MyReturnValue();

        // 自動トランザクションで開始したトランザクションを閉じる。
        this.GetDam().CommitTransaction();

        // コネクションを閉じる。
        this.GetDam().ConnectionClose();

        // データアクセス制御クラスをクリア。
        this.SetDam(null);

        // Dam用ワーク
        BaseDam damWork;

        // 共通Dao
        CmnDao cmnDao;

        // SQLの戻り値を受ける
        object obj;

        #region SQL Server

        #region SQL_NT

        // Damを生成
        damWork = new DamSqlSvr();
        // Damを初期化
        BaseLogic.InitDam("SQL_NT", damWork);
        // Damを設定
        this.SetDam("SQL_NT", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("SQL_NT"));
        cmnDao.SQLText = "INSERT INTO Shippers(CompanyName, Phone) VALUES('SQL_NT', 'SQL_NT')";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("SQL_NT").CommitTransaction();
        //this.GetDam("SQL_NT").ConnectionClose();

        #endregion

        #region SQL_UC

        // Damを生成
        damWork = new DamSqlSvr();
        // Damを初期化
        BaseLogic.InitDam("SQL_UC", damWork);
        // Damを設定
        this.SetDam("SQL_UC", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("SQL_UC"));
        cmnDao.SQLText = "INSERT INTO Shippers(CompanyName, Phone) VALUES('SQL_UC', 'SQL_UC')";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("SQL_UC").CommitTransaction();
        //this.GetDam("SQL_UC").ConnectionClose();

        #endregion

        #region SQL_RC

        // Damを生成
        damWork = new DamSqlSvr();
        // Damを初期化
        BaseLogic.InitDam("SQL_RC", damWork);
        // Damを設定
        this.SetDam("SQL_RC", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("SQL_RC"));
        cmnDao.SQLText = "INSERT INTO Shippers(CompanyName, Phone) VALUES('SQL_RC', 'SQL_RC')";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("SQL_RC").CommitTransaction();
        //this.GetDam("SQL_RC").ConnectionClose();

        #endregion

        #region SQL_RR

        // Damを生成
        damWork = new DamSqlSvr();
        // Damを初期化
        BaseLogic.InitDam("SQL_RR", damWork);
        // Damを設定
        this.SetDam("SQL_RR", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("SQL_RR"));
        cmnDao.SQLText = "INSERT INTO Shippers(CompanyName, Phone) VALUES('SQL_RR', 'SQL_RR')";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("SQL_RR").CommitTransaction();
        //this.GetDam("SQL_RR").ConnectionClose();

        #endregion

        #region SQL_SZ

        // Damを生成
        damWork = new DamSqlSvr();
        // Damを初期化
        BaseLogic.InitDam("SQL_SZ", damWork);
        // Damを設定
        this.SetDam("SQL_SZ", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("SQL_SZ"));
        cmnDao.SQLText = "INSERT INTO Shippers(CompanyName, Phone) VALUES('SQL_SZ', 'SQL_SZ')";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("SQL_SZ").CommitTransaction();
        //this.GetDam("SQL_SZ").ConnectionClose();

        #endregion

        #region SQL_SS

        // Damを生成
        damWork = new DamSqlSvr();
        // Damを初期化
        BaseLogic.InitDam("SQL_SS", damWork);
        // Damを設定
        this.SetDam("SQL_SS", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("SQL_SS"));
        cmnDao.SQLText = "INSERT INTO Shippers(CompanyName, Phone) VALUES('SQL_SS', 'SQL_SS')";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("SQL_SS").CommitTransaction();
        //this.GetDam("SQL_SS").ConnectionClose();

        #endregion

        #region SQL_DF

        // Damを生成
        damWork = new DamSqlSvr();
        // Damを初期化
        BaseLogic.InitDam("SQL_DF", damWork);
        // Damを設定
        this.SetDam("SQL_DF", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("SQL_DF"));
        cmnDao.SQLText = "INSERT INTO Shippers(CompanyName, Phone) VALUES('SQL_DF', 'SQL_DF')";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("SQL_DF").CommitTransaction();
        //this.GetDam("SQL_DF").ConnectionClose();

        #endregion

        #endregion

        #region Oracle

        #region ODP2_NT

        // Damを生成
        damWork = new DamOraOdp();
        // Damを初期化
        BaseLogic.InitDam("ODP2_NT", damWork);
        // Damを設定
        this.SetDam("ODP2_NT", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("ODP2_NT"));
        cmnDao.SQLText = "INSERT INTO Shippers(ShipperID, CompanyName, Phone) VALUES(TS_ShipperID.NEXTVAL, 'ODP2_NT', 'ODP2_NT')";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("ODP2_NT").CommitTransaction();
        //this.GetDam("ODP2_NT").ConnectionClose();

        #endregion

        #region ODP2_UC

        // ★ サポートされない分離レベル

        #endregion

        #region ODP2_RC

        // Damを生成
        damWork = new DamOraOdp();
        // Damを初期化
        BaseLogic.InitDam("ODP2_RC", damWork);
        // Damを設定
        this.SetDam("ODP2_RC", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("ODP2_RC"));
        cmnDao.SQLText = "INSERT INTO Shippers(ShipperID, CompanyName, Phone) VALUES(TS_ShipperID.NEXTVAL, 'ODP2_RC', 'ODP2_RC')";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("ODP2_RC").CommitTransaction();
        //this.GetDam("ODP2_RC").ConnectionClose();

        #endregion

        #region ODP2_RR

        // ★ サポートされない分離レベル

        #endregion

        #region ODP2_SZ

        // Damを生成
        damWork = new DamOraOdp();
        // Damを初期化
        BaseLogic.InitDam("ODP2_SZ", damWork);
        // Damを設定
        this.SetDam("ODP2_SZ", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("ODP2_SZ"));
        cmnDao.SQLText = "INSERT INTO Shippers(ShipperID, CompanyName, Phone) VALUES(TS_ShipperID.NEXTVAL, 'ODP2_SZ', 'ODP2_SZ')";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("ODP2_SZ").CommitTransaction();
        //this.GetDam("ODP2_SZ").ConnectionClose();

        #endregion

        #region ODP2_SS

        // ★ サポートされない分離レベル

        #endregion

        #region ODP2_DF

        // Damを生成
        damWork = new DamOraOdp();
        // Damを初期化
        BaseLogic.InitDam("ODP2_DF", damWork);
        // Damを設定
        this.SetDam("ODP2_DF", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("ODP2_DF"));
        cmnDao.SQLText = "INSERT INTO Shippers(ShipperID, CompanyName, Phone) VALUES(TS_ShipperID.NEXTVAL, 'ODP2_DF', 'ODP2_DF')";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("ODP2_DF").CommitTransaction();
        //this.GetDam("ODP2_DF").ConnectionClose();

        #endregion

        #endregion

        #region DB2

        #region DB2_NT

        // Damを生成
        damWork = new DamDB2();
        // Damを初期化
        BaseLogic.InitDam("DB2_NT", damWork);
        // Damを設定
        this.SetDam("DB2_NT", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("DB2_NT"));
        cmnDao.SQLText = "INSERT INTO Shippers (ShipperID, CompanyName, Phone) VALUES(NEXTVAL for TS_ShipperID, 'DB2_NT', 'DB2_NT')";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("DB2_NT").CommitTransaction();
        //this.GetDam("DB2_NT").ConnectionClose();

        #endregion

        #region DB2_UC

        // Damを生成
        damWork = new DamDB2();
        // Damを初期化
        BaseLogic.InitDam("DB2_UC", damWork);
        // Damを設定
        this.SetDam("DB2_UC", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("DB2_UC"));
        cmnDao.SQLText = "INSERT INTO Shippers (ShipperID, CompanyName, Phone) VALUES(NEXTVAL for TS_ShipperID, 'DB2_UC', 'DB2_UC')";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("DB2_UC").CommitTransaction();
        //this.GetDam("DB2_UC").ConnectionClose();

        #endregion

        #region DB2_RC

        // Damを生成
        damWork = new DamDB2();
        // Damを初期化
        BaseLogic.InitDam("DB2_RC", damWork);
        // Damを設定
        this.SetDam("DB2_RC", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("DB2_UC"));
        cmnDao.SQLText = "INSERT INTO Shippers (ShipperID, CompanyName, Phone) VALUES(NEXTVAL for TS_ShipperID, 'DB2_RC', 'DB2_RC')";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("DB2_RC").CommitTransaction();
        //this.GetDam("DB2_RC").ConnectionClose();

        #endregion

        #region DB2_RR

        // Damを生成
        damWork = new DamDB2();
        // Damを初期化
        BaseLogic.InitDam("DB2_RR", damWork);
        // Damを設定
        this.SetDam("DB2_RR", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("DB2_RR"));
        cmnDao.SQLText = "INSERT INTO Shippers (ShipperID, CompanyName, Phone) VALUES(NEXTVAL for TS_ShipperID, 'DB2_RR', 'DB2_RR')";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("DB2_RR").CommitTransaction();
        //this.GetDam("DB2_RR").ConnectionClose();

        #endregion

        #region DB2_SZ

        // Damを生成
        damWork = new DamDB2();
        // Damを初期化
        BaseLogic.InitDam("DB2_SZ", damWork);
        // Damを設定
        this.SetDam("DB2_SZ", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("DB2_SZ"));
        cmnDao.SQLText = "INSERT INTO Shippers (ShipperID, CompanyName, Phone) VALUES(NEXTVAL for TS_ShipperID, 'DB2_SZ', 'DB2_SZ')";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("DB2_SZ").CommitTransaction();
        //this.GetDam("DB2_SZ").ConnectionClose();

        #endregion

        #region DB2_SS

        // ★ サポートされない分離レベル

        #endregion

        #region DB2_DF

        // Damを生成
        damWork = new DamDB2();
        // Damを初期化
        BaseLogic.InitDam("DB2_DF", damWork);
        // Damを設定
        this.SetDam("DB2_DF", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("DB2_DF"));
        cmnDao.SQLText = "INSERT INTO Shippers (ShipperID, CompanyName, Phone) VALUES(NEXTVAL for TS_ShipperID, 'DB2_DF', 'DB2_DF')";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("DB2_DF").CommitTransaction();
        //this.GetDam("DB2_DF").ConnectionClose();

        #endregion

        #endregion

        #region MySQL

        #region MCN_NT

        // Damを生成
        damWork = new DamMySQL();
        // Damを初期化
        BaseLogic.InitDam("MCN_NT", damWork);
        // Damを設定
        this.SetDam("MCN_NT", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("MCN_NT"));
        cmnDao.SQLText = "INSERT INTO Shippers(CompanyName, Phone) VALUES('MCN_NT', 'MCN_NT');";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("MCN_NT").CommitTransaction();
        //this.GetDam("MCN_NT").ConnectionClose();

        #endregion

        #region MCN_UC

        // Damを生成
        damWork = new DamMySQL();
        // Damを初期化
        BaseLogic.InitDam("MCN_UC", damWork);
        // Damを設定
        this.SetDam("MCN_UC", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("MCN_UC"));
        cmnDao.SQLText = "INSERT INTO Shippers(CompanyName, Phone) VALUES('MCN_UC', 'MCN_UC');";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("MCN_UC").CommitTransaction();
        //this.GetDam("MCN_UC").ConnectionClose();

        #endregion

        #region MCN_RC

        // Damを生成
        damWork = new DamMySQL();
        // Damを初期化
        BaseLogic.InitDam("MCN_RC", damWork);
        // Damを設定
        this.SetDam("MCN_RC", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("MCN_RC"));
        cmnDao.SQLText = "INSERT INTO Shippers(CompanyName, Phone) VALUES('MCN_RC', 'MCN_RC');";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("MCN_RC").CommitTransaction();
        //this.GetDam("MCN_RC").ConnectionClose();

        #endregion

        #region MCN_RR

        // Damを生成
        damWork = new DamMySQL();
        // Damを初期化
        BaseLogic.InitDam("MCN_RR", damWork);
        // Damを設定
        this.SetDam("MCN_RR", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("MCN_RR"));
        cmnDao.SQLText = "INSERT INTO Shippers(CompanyName, Phone) VALUES('MCN_RR', 'MCN_RR');";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("MCN_RR").CommitTransaction();
        //this.GetDam("MCN_RR").ConnectionClose();

        #endregion

        #region MCN_SZ

        // Damを生成
        damWork = new DamMySQL();
        // Damを初期化
        BaseLogic.InitDam("MCN_SZ", damWork);
        // Damを設定
        this.SetDam("MCN_SZ", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("MCN_SZ"));
        cmnDao.SQLText = "INSERT INTO Shippers(CompanyName, Phone) VALUES('MCN_SZ', 'MCN_SZ');";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("MCN_SZ").CommitTransaction();
        //this.GetDam("MCN_SZ").ConnectionClose();

        #endregion

        #region MCN_SS

        // ★ サポートされない分離レベル

        #endregion

        #region MCN_DF

        // Damを生成
        damWork = new DamMySQL();
        // Damを初期化
        BaseLogic.InitDam("MCN_DF", damWork);
        // Damを設定
        this.SetDam("MCN_DF", damWork);

        // インサート
        // Damを直接使用することもできるが、
        // 通常は、データアクセスにはDaoを使用する。        
        cmnDao = new CmnDao(this.GetDam("MCN_DF"));
        cmnDao.SQLText = "INSERT INTO Shippers(CompanyName, Phone) VALUES('MCN_DF', 'MCN_DF');";
        obj = (object)cmnDao.ExecSelectScalar();

        //this.GetDam("MCN_DF").CommitTransaction();
        //this.GetDam("MCN_DF").ConnectionClose();

        #endregion

        #endregion

        #region 終了時の状態選択

        #region Damの状態選択

        if ((parameterValue.ActionType.Split('%'))[2] == "UT")
        {
            // トランザクションあり
        }
        else if ((parameterValue.ActionType.Split('%'))[2] == "NT")
        {
            // トランザクションなし
            // → まえもってロールバックしておく

            #region ロールバック

            this.GetDam("SQL_NT").RollbackTransaction();
            this.GetDam("SQL_UC").RollbackTransaction();
            this.GetDam("SQL_RC").RollbackTransaction();
            this.GetDam("SQL_RR").RollbackTransaction();
            this.GetDam("SQL_SZ").RollbackTransaction();
            this.GetDam("SQL_SS").RollbackTransaction();
            this.GetDam("SQL_DF").RollbackTransaction();

            this.GetDam("ODP2_NT").RollbackTransaction();
            //this.GetDam("ODP2_UC").RollbackTransaction();
            this.GetDam("ODP2_RC").RollbackTransaction();
            //this.GetDam("ODP2_RR").RollbackTransaction();
            this.GetDam("ODP2_SZ").RollbackTransaction();
            //this.GetDam("ODP2_SS").RollbackTransaction();
            this.GetDam("ODP2_DF").RollbackTransaction();

            this.GetDam("DB2_NT").RollbackTransaction();
            this.GetDam("DB2_UC").RollbackTransaction();
            this.GetDam("DB2_RC").RollbackTransaction();
            this.GetDam("DB2_RR").RollbackTransaction();
            this.GetDam("DB2_SZ").RollbackTransaction();
            //this.GetDam("DB2_SS").RollbackTransaction();
            this.GetDam("DB2_DF").RollbackTransaction();

            this.GetDam("MCN_NT").RollbackTransaction();
            this.GetDam("MCN_UC").RollbackTransaction();
            this.GetDam("MCN_RC").RollbackTransaction();
            this.GetDam("MCN_RR").RollbackTransaction();
            this.GetDam("MCN_SZ").RollbackTransaction();
            //this.GetDam("MCN_SS").RollbackTransaction();
            this.GetDam("MCN_DF").RollbackTransaction();

            #endregion
        }
        else if ((parameterValue.ActionType.Split('%'))[2] == "NC")
        {
            // コネクションなし
            // → まえもってロールバック、コネクションクローズしておく
            //
            // ※ トランザクションを開始して
            //    コミットしないで閉じると、ロールバック扱い。

            #region ロールバック

            this.GetDam("SQL_NT").RollbackTransaction();
            this.GetDam("SQL_UC").RollbackTransaction();
            this.GetDam("SQL_RC").RollbackTransaction();
            this.GetDam("SQL_RR").RollbackTransaction();
            this.GetDam("SQL_SZ").RollbackTransaction();
            this.GetDam("SQL_SS").RollbackTransaction();
            this.GetDam("SQL_DF").RollbackTransaction();

            this.GetDam("ODP2_NT").RollbackTransaction();
            //this.GetDam("ODP2_UC").RollbackTransaction();
            this.GetDam("ODP2_RC").RollbackTransaction();
            //this.GetDam("ODP2_RR").RollbackTransaction();
            this.GetDam("ODP2_SZ").RollbackTransaction();
            //this.GetDam("ODP2_SS").RollbackTransaction();
            this.GetDam("ODP2_DF").RollbackTransaction();

            this.GetDam("DB2_NT").RollbackTransaction();
            this.GetDam("DB2_UC").RollbackTransaction();
            this.GetDam("DB2_RC").RollbackTransaction();
            this.GetDam("DB2_RR").RollbackTransaction();
            this.GetDam("DB2_SZ").RollbackTransaction();
            //this.GetDam("DB2_SS").RollbackTransaction();
            this.GetDam("DB2_DF").RollbackTransaction();

            this.GetDam("MCN_NT").RollbackTransaction();
            this.GetDam("MCN_UC").RollbackTransaction();
            this.GetDam("MCN_RC").RollbackTransaction();
            this.GetDam("MCN_RR").RollbackTransaction();
            this.GetDam("MCN_SZ").RollbackTransaction();
            //this.GetDam("MCN_SS").RollbackTransaction();
            this.GetDam("MCN_DF").RollbackTransaction();

            #endregion

            #region コネクションクローズ

            this.GetDam("SQL_NT").ConnectionClose();
            this.GetDam("SQL_UC").ConnectionClose();
            this.GetDam("SQL_RC").ConnectionClose();
            this.GetDam("SQL_RR").ConnectionClose();
            this.GetDam("SQL_SZ").ConnectionClose();
            this.GetDam("SQL_SS").ConnectionClose();
            this.GetDam("SQL_DF").ConnectionClose();

            this.GetDam("ODP2_NT").ConnectionClose();
            //this.GetDam("ODP2_UC").ConnectionClose();
            this.GetDam("ODP2_RC").ConnectionClose();
            //this.GetDam("ODP2_RR").ConnectionClose();
            this.GetDam("ODP2_SZ").ConnectionClose();
            //this.GetDam("ODP2_SS").ConnectionClose();
            this.GetDam("ODP2_DF").ConnectionClose();

            this.GetDam("DB2_NT").ConnectionClose();
            this.GetDam("DB2_UC").ConnectionClose();
            this.GetDam("DB2_RC").ConnectionClose();
            this.GetDam("DB2_RR").ConnectionClose();
            this.GetDam("DB2_SZ").ConnectionClose();
            //this.GetDam("DB2_SS").ConnectionClose();
            this.GetDam("DB2_DF").ConnectionClose();

            this.GetDam("MCN_NT").ConnectionClose();
            this.GetDam("MCN_UC").ConnectionClose();
            this.GetDam("MCN_RC").ConnectionClose();
            this.GetDam("MCN_RR").ConnectionClose();
            this.GetDam("MCN_SZ").ConnectionClose();
            //this.GetDam("MCN_SS").ConnectionClose();
            this.GetDam("MCN_DF").ConnectionClose();

            #endregion
        }
        else if ((parameterValue.ActionType.Split('%'))[2] == "NULL")
        {
            // データアクセス制御クラス = Null
            // → まえもってロールバック、コネクションクローズ、Nullクリアしておく
            //
            // ※ トランザクションを開始して
            //    コミットしないで閉じると、ロールバック扱い。

            #region ロールバック

            this.GetDam("SQL_NT").RollbackTransaction();
            this.GetDam("SQL_UC").RollbackTransaction();
            this.GetDam("SQL_RC").RollbackTransaction();
            this.GetDam("SQL_RR").RollbackTransaction();
            this.GetDam("SQL_SZ").RollbackTransaction();
            this.GetDam("SQL_SS").RollbackTransaction();
            this.GetDam("SQL_DF").RollbackTransaction();

            this.GetDam("ODP2_NT").RollbackTransaction();
            //this.GetDam("ODP2_UC").RollbackTransaction();
            this.GetDam("ODP2_RC").RollbackTransaction();
            //this.GetDam("ODP2_RR").RollbackTransaction();
            this.GetDam("ODP2_SZ").RollbackTransaction();
            //this.GetDam("ODP2_SS").RollbackTransaction();
            this.GetDam("ODP2_DF").RollbackTransaction();

            this.GetDam("DB2_NT").RollbackTransaction();
            this.GetDam("DB2_UC").RollbackTransaction();
            this.GetDam("DB2_RC").RollbackTransaction();
            this.GetDam("DB2_RR").RollbackTransaction();
            this.GetDam("DB2_SZ").RollbackTransaction();
            //this.GetDam("DB2_SS").RollbackTransaction();
            this.GetDam("DB2_DF").RollbackTransaction();

            this.GetDam("MCN_NT").RollbackTransaction();
            this.GetDam("MCN_UC").RollbackTransaction();
            this.GetDam("MCN_RC").RollbackTransaction();
            this.GetDam("MCN_RR").RollbackTransaction();
            this.GetDam("MCN_SZ").RollbackTransaction();
            //this.GetDam("MCN_SS").RollbackTransaction();
            this.GetDam("MCN_DF").RollbackTransaction();

            #endregion

            #region コネクションクローズ

            this.GetDam("SQL_NT").ConnectionClose();
            this.GetDam("SQL_UC").ConnectionClose();
            this.GetDam("SQL_RC").ConnectionClose();
            this.GetDam("SQL_RR").ConnectionClose();
            this.GetDam("SQL_SZ").ConnectionClose();
            this.GetDam("SQL_SS").ConnectionClose();
            this.GetDam("SQL_DF").ConnectionClose();

            this.GetDam("ODP2_NT").ConnectionClose();
            //this.GetDam("ODP2_UC").ConnectionClose();
            this.GetDam("ODP2_RC").ConnectionClose();
            //this.GetDam("ODP2_RR").ConnectionClose();
            this.GetDam("ODP2_SZ").ConnectionClose();
            //this.GetDam("ODP2_SS").ConnectionClose();
            this.GetDam("ODP2_DF").ConnectionClose();

            this.GetDam("DB2_NT").ConnectionClose();
            this.GetDam("DB2_UC").ConnectionClose();
            this.GetDam("DB2_RC").ConnectionClose();
            this.GetDam("DB2_RR").ConnectionClose();
            this.GetDam("DB2_SZ").ConnectionClose();
            //this.GetDam("DB2_SS").ConnectionClose();
            this.GetDam("DB2_DF").ConnectionClose();

            this.GetDam("MCN_NT").ConnectionClose();
            this.GetDam("MCN_UC").ConnectionClose();
            this.GetDam("MCN_RC").ConnectionClose();
            this.GetDam("MCN_RR").ConnectionClose();
            this.GetDam("MCN_SZ").ConnectionClose();
            //this.GetDam("MCN_SS").ConnectionClose();
            this.GetDam("MCN_DF").ConnectionClose();

            #endregion

            #region Nullクリア

            this.SetDam("SQL_NT", null);
            this.SetDam("SQL_UC", null);
            this.SetDam("SQL_RC", null);
            this.SetDam("SQL_RR", null);
            this.SetDam("SQL_SZ", null);
            this.SetDam("SQL_SS", null);
            this.SetDam("SQL_DF", null);

            this.SetDam("ODP2_NT", null);
            //this.SetDam("ODP2_UC",null);
            this.SetDam("ODP2_RC", null);
            //this.SetDam("ODP2_RR",null);
            this.SetDam("ODP2_SZ", null);
            //this.SetDam("ODP2_SS",null);
            this.SetDam("ODP2_DF", null);

            this.SetDam("DB2_NT", null);
            this.SetDam("DB2_UC", null);
            this.SetDam("DB2_RC", null);
            this.SetDam("DB2_RR", null);
            this.SetDam("DB2_SZ", null);
            //this.SetDam("DB2_SS",null);
            this.SetDam("DB2_DF", null);

            this.SetDam("MCN_NT", null);
            this.SetDam("MCN_UC", null);
            this.SetDam("MCN_RC", null);
            this.SetDam("MCN_RR", null);
            this.SetDam("MCN_SZ", null);
            //this.SetDam("MCN_SS",null);
            this.SetDam("MCN_DF", null);

            #endregion
        }

        #endregion

        #region エラーのスロー

        if ((parameterValue.ActionType.Split('%'))[1] == "Business")
        {
            // 業務例外のスロー
            throw new BusinessApplicationException(
                "ロールバックのテスト",
                "ロールバックのテスト",
                "エラー情報");
        }
        else if ((parameterValue.ActionType.Split('%'))[1] == "System")
        {
            // システム例外のスロー
            throw new BusinessSystemException(
                "ロールバックのテスト",
                "ロールバックのテスト");
        }
        else if ((parameterValue.ActionType.Split('%'))[1] == "Other")
        {
            // その他、一般的な例外のスロー
            throw new Exception("ロールバックのテスト");
        }
        else if ((parameterValue.ActionType.Split('%'))[1] == "Other-Business")
        {
            // その他、一般的な例外(業務例外へ振り替え)のスロー
            throw new Exception("Other-Business");
        }
        else if ((parameterValue.ActionType.Split('%'))[1] == "Other-System")
        {
            // その他、一般的な例外(システム例外へ振り替え)のスロー
            throw new Exception("Other-System");
        }

        #endregion

        #endregion

    }
Exemplo n.º 16
0
        /// <summary>業務処理を実装</summary>
        /// <param name="parameterValue">引数クラス</param>
        private void UOC_Delete(BaseParameterValue parameterValue)
        {
            // 引数クラスをアップキャスト
            TestParameterValue testParameter = (TestParameterValue)parameterValue;

            // 戻り値クラスを生成
            TestReturnValue testReturn = new TestReturnValue();

            // ↓業務処理-----------------------------------------------------

            // データアクセス クラスを生成する
            DaoCategories daoCategories = new DaoCategories(this.GetDam());

            // n件削除

            // 検索条件設定
            if (testParameter.field1_ForSearch.ToString().Trim() == "") { }
            else
            { daoCategories.PK_CategoryID = testParameter.field1_ForSearch; }

            if (testParameter.field2_ForSearch.ToString().Trim() == "") { }
            else
            { daoCategories.CategoryName = testParameter.field2_ForSearch; }

            // デリート
            testReturn.obj = daoCategories.D4_Delete();

            // ↑業務処理-----------------------------------------------------

            // 戻り値クラスをダウンキャストして戻す
            this.ReturnValue = (BaseReturnValue)testReturn;
        }
Exemplo n.º 17
0
        /// <summary>業務処理を実装</summary>
        /// <param name="parameterValue">引数クラス</param>
        private void UOC_SelectAll(BaseParameterValue parameterValue)
        {
            // 引数クラスをアップキャスト
            TestParameterValue testParameter = (TestParameterValue)parameterValue;

            // 戻り値クラスを生成
            TestReturnValue testReturn = new TestReturnValue();

            // ↓業務処理-----------------------------------------------------

            // データアクセス クラスを生成する
            DaoCategories daoCategories = new DaoCategories(this.GetDam());

            // 全件取得

            // 実行
            DataTable dt = new DataTable();
            daoCategories.D2_Select(dt);

            // 戻り値を戻す
            testReturn.dt = dt;

            // ↑業務処理-----------------------------------------------------

            // 戻り値クラスをダウンキャストして戻す
            this.ReturnValue = (BaseReturnValue)testReturn;
        }
Exemplo n.º 18
0
        // 2009/03/28---データアクセス制御クラスを配列化(ここまで)

        #endregion

        #region 業務コード親クラス2でオーバーライドするメソッド

        /// <summary>
        /// データアクセス制御クラス(DAM)の生成し、
        /// コネクションを確立、トランザクションを開始する処理を実装
        /// </summary>
        /// <param name="parameterValue">引数クラス</param>
        /// <param name="iso">分離レベル(DBMS毎の分離レベルの違いを理解して設定すること)</param>
        /// <remarks>派生の業務コード親クラス2でオーバーライドする。</remarks>
        protected virtual void UOC_ConnectionOpen(
            BaseParameterValue parameterValue,
            DbEnum.IsolationLevelEnum iso) { return; }
Exemplo n.º 19
0
 /// <summary>
 /// B層の開始処理を実装
 /// </summary>
 /// <param name="parameterValue">引数クラス</param>
 /// <remarks>派生の業務コード親クラス2でオーバーライドする。</remarks>
 protected virtual void UOC_PreAction(BaseParameterValue parameterValue) { }
Exemplo n.º 20
0
 /// <summary>
 /// 業務処理を実装
 /// </summary>
 /// <param name="parameterValue">引数クラス</param>
 /// <param name="returnValue">戻り値クラス</param>
 /// <remarks>派生の業務コード クラスでオーバーライドする。</remarks>
 protected abstract void UOC_DoAction(BaseParameterValue parameterValue, ref BaseReturnValue returnValue);
Exemplo n.º 21
0
        /// <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;

                // ------------
                // メッセージ部
                // ------------
                // ユーザ名, 画面名, コントロール名 メソッド名, 処理名
                // 処理時間(実行時間), 処理時間(CPU時間)
                // エラーメッセージID, エラーメッセージ等
                // ------------
                string strLogMessage =
                    "," + myPV.User.UserName +
                    "," + myPV.ScreenId +
                    "," + myPV.ControlId +
                    "," + myPV.MethodName +
                    "," + myPV.ActionType +
                    "," + this.perfRec.ExecTime +
                    "," + this.perfRec.CpuTime +
                    "," + baEx.messageID +
                    "," + baEx.Message;

                // Log4Netへログ出力
                LogIF.WarnLog("ACCESS", strLogMessage);
            }

            // -------------------------------------------------------------   
        }
Exemplo n.º 22
0
 /// <summary>
 /// B層のトランザクションのコミット後の終了処理を実装
 /// </summary>
 /// <param name="parameterValue">引数クラス</param>
 /// <param name="returnValue">戻り値クラス</param>
 /// <remarks>派生の業務コード親クラス2でオーバーライドする。</remarks>
 protected virtual void UOC_AfterTransaction(BaseParameterValue parameterValue, BaseReturnValue returnValue) { }
Exemplo n.º 23
0
        /// <summary>データアクセス制御クラス(DAM)の生成し、コネクションを確立、トランザクションを開始する処理を実装</summary>
        /// <param name="parameterValue">引数クラス</param>
        /// <param name="iso">分離レベル(DBMS毎の分離レベルの違いを理解して設定すること)</param>
        /// <remarks>業務コード親クラス1から利用される派生の末端</remarks>
        protected override void UOC_ConnectionOpen(
            BaseParameterValue parameterValue,
            DbEnum.IsolationLevelEnum iso)
        {
            #region トランザクション属性取得例

            //// クラスの属性、メソッドの属性から調査
            //MyAttribute[] aryMCA;
            //MyAttribute[] aryMMA;

            //// クラスの属性を取得
            //MyAttribute.GetAttr(this, out aryMCA);

            //foreach (MyAttribute mca in aryMCA)
            //{
            //    Debug.WriteLine(this.GetType().ToString() + ".MyAttributeA = " + mca.MyAttributeA);
            //    Debug.WriteLine(this.GetType().ToString() + ".MyAttributeB = " + mca.MyAttributeB);
            //    Debug.WriteLine(this.GetType().ToString() + ".MyAttributeC = " + mca.MyAttributeC);
            //    Debug.WriteLine("+------------------+");
            //}

            //// メソッドの属性を取得
            //MethodInfo[] aryMtdInfo = this.GetType().GetMethods();

            //foreach (MethodInfo mtdInfo in aryMtdInfo)
            //{
            //    MyAttribute.GetAttr(mtdInfo, out aryMMA);

            //    foreach (MyAttribute mma in aryMMA)
            //    {
            //        Debug.WriteLine(mtdInfo.Name + ".MyAttributeA = " + mma.MyAttributeA);
            //        Debug.WriteLine(mtdInfo.Name + ".MyAttributeB = " + mma.MyAttributeB);
            //        Debug.WriteLine(mtdInfo.Name + ".MyAttributeC = " + mma.MyAttributeC);
            //        Debug.WriteLine("+------------------+");
            //    }
            //}

            #endregion

            // データアクセス制御クラス(DAM)
            BaseDam dam = null;

            #region 接続

            if (iso == DbEnum.IsolationLevelEnum.NotConnect)
            {
                // 接続しない
            }
            else
            {
                // 接続する

                string connstring = "";

                #region データ プロバイダ選択

                // SQL Server / SQL Client用のDamを生成
                dam = new DamSqlSvr();

                // 接続文字列をロード
                connstring = GetConfigParameter.GetConnectionString("ConnectionString_SQL");

                //if (parameterValue.ActionType.Split('%')[0] == "SQL")
                //{
                //    // SQL Server / SQL Client用のDamを生成
                //    dam = new DamSqlSvr();

                //    // 接続文字列をロード
                //    connstring = GetConfigParameter.GetConnectionString("ConnectionString_SQL");
                //}
                //else if (parameterValue.ActionType.Split('%')[0] == "OLE")
                //{
                //    // OLEDB.NET用のDamを生成
                //    dam = new DamOLEDB();

                //    // 接続文字列をロード
                //    connstring = GetConfigParameter.GetConnectionString("ConnectionString_OLE");
                //}
                //else if (parameterValue.ActionType.Split('%')[0] == "ODB")
                //{
                //    // ODBC.NET用のDamを生成
                //    dam = new DamODBC();

                //    // 接続文字列をロード
                //    connstring = GetConfigParameter.GetConnectionString("ConnectionString_ODBC");
                //}
                //else if (parameterValue.ActionType.Split('%')[0] == "ORA")
                //{
                //    // Oracle / Oracle Client用のDamを生成
                //    dam = new DamOraClient();

                //    // 接続文字列をロード
                //    connstring = GetConfigParameter.GetConnectionString("ConnectionString_ORA");
                //}
                //else if (parameterValue.ActionType.Split('%')[0] == "ODP")
                //{
                //    // Oracle / ODP.NET用のDamを生成
                //    dam = new DamOraOdp();

                //    // 接続文字列をロード(ODP2:Instant Client)
                //    connstring = GetConfigParameter.GetConnectionString("ConnectionString_ODP2");
                //}
                //else if (parameterValue.ActionType.Split('%')[0] == "DB2")
                //{
                //    // DB2.NET用のDamを生成
                //    dam = new DamDB2();

                //    // 接続文字列をロード
                //    connstring = GetConfigParameter.GetConnectionString("ConnectionString_DB2");
                //}
                //else if (parameterValue.ActionType.Split('%')[0] == "HIR")
                //{
                //    // HiRDBデータプロバイダ用のDamを生成
                //    dam = new DamHiRDB();

                //    // 接続文字列をロード
                //    connstring = GetConfigParameter.GetConnectionString("ConnectionString_HIR");
                //}
                //else if (parameterValue.ActionType.Split('%')[0] == "MCN")
                //{
                //    // MySQL Cnn/NET用のDamを生成
                //    dam = new DamMySQL();

                //    // 接続文字列をロード
                //    connstring = GetConfigParameter.GetConnectionString("ConnectionString_MCN");
                //}
                //else if (parameterValue.ActionType.Split('%')[0] == "NPS")
                //{
                //    // PostgreSQL / Npgsql用のDamを生成
                //    dam = new DamPstGrS();

                //    // 接続文字列をロード
                //    connstring = GetConfigParameter.GetConnectionString("ConnectionString_NPS");
                //}
                //else
                //{
                //    // ここは通らない
                //}

                #endregion

                if (dam != null)
                {
                    // コネクションをオープンする。
                    dam.ConnectionOpen(connstring);

                    #region トランザクションを開始する。

                    if (iso == DbEnum.IsolationLevelEnum.User)
                    {
                        // 自動トランザクション(規定の分離レベル)
                        dam.BeginTransaction(DbEnum.IsolationLevelEnum.ReadCommitted);
                    }
                    else
                    {
                        // 自動トランザクション(指定の分離レベル)
                        dam.BeginTransaction(iso);
                    }

                    #endregion

                    // ユーザ情報を格納する(ログ出力で利用)。
                    dam.Obj = ((MyParameterValue)parameterValue).User;

                    // damを設定する。
                    this.SetDam(dam);
                }
            }

            #endregion
        }
Exemplo n.º 24
0
 /// <summary>
 /// B層の業務例外による異常終了の後処理を実装するUOCメソッド。
 /// </summary>
 /// <param name="parameterValue">引数クラス</param>
 /// <param name="returnValue">戻り値クラス</param>
 /// <param name="baEx">BusinessApplicationException</param>
 /// <remarks>派生の業務コード親クラス2でオーバーライドする。</remarks>
 protected virtual void UOC_ABEND(BaseParameterValue parameterValue, BaseReturnValue returnValue, BusinessApplicationException baEx) { }
Exemplo n.º 25
0
        /// <summary>
        /// B層の終了処理を実装
        /// </summary>
        /// <param name="parameterValue">引数クラス</param>
        /// <param name="returnValue">戻り値クラス</param>
        /// <remarks>業務コード親クラス1から利用される派生の末端</remarks>
        protected override void UOC_AfterAction(BaseParameterValue parameterValue, BaseReturnValue returnValue)
        {
            // 性能測定終了
            this.perfRec.EndsPerformanceRecord();

            // ACCESSログ出力-----------------------------------------------

            MyParameterValue myPV = (MyParameterValue)parameterValue;

            // ------------
            // メッセージ部
            // ------------
            // ユーザ名, IPアドレス, レイヤ, 
            // 画面名, コントロール名, メソッド名, 処理名
            // 処理時間(実行時間), 処理時間(CPU時間)
            // ------------
            string strLogMessage =
                "," + myPV.User.UserName +
                "," + myPV.User.IPAddress +
                "," + "<<-----" +
                "," + myPV.ScreenId +
                "," + myPV.ControlId +
                "," + myPV.MethodName +
                "," + myPV.ActionType +
                "," + this.perfRec.ExecTime +
                "," + this.perfRec.CpuTime;

            // Log4Netへログ出力
            LogIF.InfoLog("ACCESS", strLogMessage);

            // -------------------------------------------------------------            
        }
Exemplo n.º 26
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) { }
Exemplo n.º 27
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";
                // OriginalStackTrace(ログ出力)の品質向上
                if (this.OriginalStackTrace == "")
                {
                    strLogMessage += bsEx.StackTrace;
                }
                else
                {
                    strLogMessage += this.OriginalStackTrace;
                }
                
                // Log4Netへログ出力
                LogIF.ErrorLog("ACCESS", strLogMessage);
            }

            // -------------------------------------------------------------   
        }
Exemplo n.º 28
0
 /// <summary>
 /// B層の一般的な例外による異常終了の後処理を実装するUOCメソッド。
 /// </summary>
 /// <param name="parameterValue">引数クラス</param>
 /// <param name="returnValue">戻り値クラス</param>
 /// <param name="ex">Exception</param>
 /// <remarks>派生の業務コード親クラス2でオーバーライドする。</remarks>
 protected virtual void UOC_ABEND(BaseParameterValue parameterValue, ref BaseReturnValue returnValue, Exception ex) { }
Exemplo n.º 29
0
        /// <summary>自動振り分け処理</summary>
        /// <param name="parameterValue">引数クラス</param>
        /// <param name="returnValue">戻り値クラス</param>
        protected override void UOC_DoAction(BaseParameterValue parameterValue, ref BaseReturnValue returnValue)
        {
            // メソッド名を生成
            string methodName = "UOC_" + parameterValue.MethodName;

            #region レイトバインドする

            object[] paramSet = new object[] { parameterValue };

            try
            {
                // Latebind
                Latebind.InvokeMethod(this, methodName, paramSet);
            }
            catch (System.Reflection.TargetInvocationException rtEx)
            {
                // InnerExceptionのスタックトレースを保存しておく(以下のリスローで消去されるため)。
                this.OriginalStackTrace = rtEx.InnerException.StackTrace;

                // InnerExceptionを投げなおす。
                throw rtEx.InnerException;
            }
            finally
            {
                // レイトバインドにおいて、
                // ・ 戻り値(in)の場合、下位で生成した戻り値インスタンスは戻らない。
                // ・ 戻り値(ref, out)の場合、例外発生時は戻り値インスタンスは戻らない。
                // という問題がある。

                // ∴ (特に後者の対応のため、)
                // メンバ変数を使用して戻り値インスタンスを戻す。
                returnValue = this.ReturnValue;
            }

            #endregion
        }
Exemplo n.º 30
0
        /// <summary>業務処理を実装</summary>
        /// <param name="parameterValue">引数クラス</param>
        private void UOC_Update(BaseParameterValue parameterValue)
        {
            // 引数クラスをアップキャスト
            TestParameterValue testParameter = (TestParameterValue)parameterValue;

            // 戻り値クラスを生成
            TestReturnValue testReturn = new TestReturnValue();

            // ↓業務処理-----------------------------------------------------

            // データアクセス クラスを生成する
            DaoSuppliers daoSuppliers = new DaoSuppliers(this.GetDam());

            // 1件更新
            daoSuppliers.PK_SupplierID = testParameter.field1;

            if (testParameter.field2_ForUpd.ToString().Trim() == "") { }
            else
            { daoSuppliers.Set_CompanyName_forUPD = testParameter.field2_ForUpd; }

            if (testParameter.field3_ForUpd.ToString().Trim() == "") { }
            else
            { daoSuppliers.Set_ContactName_forUPD = testParameter.field3_ForUpd; }

            if (testParameter.field4_ForUpd.ToString().Trim() == "") { }
            else
            { daoSuppliers.Set_ContactTitle_forUPD = testParameter.field4_ForUpd; }

            if (testParameter.field5_ForUpd.ToString().Trim() == "") { }
            else
            { daoSuppliers.Set_Address_forUPD = testParameter.field5_ForUpd; }

            if (testParameter.field6_ForUpd.ToString().Trim() == "") { }
            else
            { daoSuppliers.Set_City_forUPD = testParameter.field6_ForUpd; }

            if (testParameter.field7_ForUpd.ToString().Trim() == "") { }
            else
            { daoSuppliers.Set_Region_forUPD = testParameter.field7_ForUpd; }

            if (testParameter.field8_ForUpd.ToString().Trim() == "") { }
            else
            { daoSuppliers.Set_PostalCode_forUPD = testParameter.field8_ForUpd; }

            if (testParameter.field9_ForUpd.ToString().Trim() == "") { }
            else
            { daoSuppliers.Set_Country_forUPD = testParameter.field9_ForUpd; }

            if (testParameter.field10_ForUpd.ToString().Trim() == "") { }
            else
            { daoSuppliers.Set_Phone_forUPD = testParameter.field10_ForUpd; }

            if (testParameter.field11_ForUpd.ToString().Trim() == "") { }
            else
            { daoSuppliers.Set_Fax_forUPD = testParameter.field11_ForUpd; }

            if (testParameter.field12_ForUpd.ToString().Trim() == "") { }
            else
            { daoSuppliers.Set_HomePage_forUPD = testParameter.field12_ForUpd; }

            testReturn.obj = daoSuppliers.S3_Update();

            // ↑業務処理-----------------------------------------------------

            // 戻り値クラスをダウンキャストして戻す
            this.ReturnValue = (BaseReturnValue)testReturn;
        }