public async Task <ActionResult> Select(CrudViweModel model)
        {
            string scriptText = "";

            if (ModelState.IsValid)
            {
                // 引数クラスを生成。下位(B・D層)は、テスト クラスを流用する
                TestParameterValue testParameterValue
                    = new TestParameterValue(this.ControllerName, "-", this.ActionName,
                                             model.DdlDap + "%" + model.DdlMode1 + "%" + model.DdlMode2 + "%" + model.DdlExRollback, this.UserInfo);

                // 動的SQLの要素を設定
                testParameterValue.Shipper = model.Shipper;

                // B層呼出し+都度コミット
                LayerB          layerB          = new LayerB();
                TestReturnValue testReturnValue = (TestReturnValue)await layerB.DoBusinessLogicAsync(
                    testParameterValue, this.SelectIsolationLevel(model.DdlIso));

                // 結果表示するメッセージ
                string message = "";

                if (testReturnValue.ErrorFlag == true)
                {
                    // 結果(業務続行可能なエラー)
                    message  = "ErrorMessageID:" + testReturnValue.ErrorMessageID + ";";
                    message += "ErrorMessage:" + testReturnValue.ErrorMessage + ";";
                    message += "ErrorInfo:" + testReturnValue.ErrorInfo;

                    // メッセージを設定。
                    model.Message = message;

                    // Ajax.BeginFormでは、以下のように記述することで部分更新が可能。
                    return(PartialView("_MessageView", model));
                }
                else
                {
                    // 結果(正常系)
                }

                // Ajax.BeginFormでは、UpdateTargetIdで指定した
                // ターゲット以外を更新する場合、JavaScriptでの対応が必要。
                // #ここではjQueryを使用している。
                ShipperViweModel svm = (ShipperViweModel)testReturnValue.Obj;
                scriptText = string.Format(
                    "$('#Shipper_ShipperID').val('{0}');$('#Shipper_CompanyName').val('{1}');$('#Shipper_Phone').val('{2}');",
                    svm.ShipperID, svm.CompanyName, svm.Phone);
            }

            return(JavaScript(scriptText));
        }
        /// <summary>1レコードを返すSELECTクエリを実行する</summary>
        /// <param name="testParameter">引数クラス</param>
        /// <param name="testReturn">戻り値クラス</param>
        public void Select(TestParameterValue testParameter, TestReturnValue testReturn)
        {
            // ↓DBアクセス-----------------------------------------------------

            string filename = "";

            if ((testParameter.ActionType.Split('%'))[2] == "static")
            {
                // 静的SQL
                filename = "ShipperSelect.sql";
            }
            else if ((testParameter.ActionType.Split('%'))[2] == "dynamic")
            {
                // 動的SQL
                filename = "ShipperSelect.xml";
            }

            //   -- ファイルから読み込む場合。
            this.SetSqlByFile2(filename);

            // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。
            this.SetParameter("P1", testParameter.Shipper.ShipperID);

            // 戻り値 dt
            DataTable dt = new DataTable();

            //   -- 1レコードを返すSELECTクエリを実行する
            this.ExecSelectFill_DT(dt);

            // ↑DBアクセス-----------------------------------------------------

            // 一部、DataToPocoのテストコード
            ShipperViweModel svm = DataToPoco.DataTableToPOCO <ShipperViweModel>(dt);

            Debug.WriteLine("svm:" + ObjectInspector.Inspect(svm));

            TestShipperViweModel tsvm = DataToPoco.DataTableToPOCO <TestShipperViweModel>(dt,
                                                                                          // mapの書き方は、Key-Valueでdst-srcのproperty field名を書く
                                                                                          new Dictionary <string, string>()
            {
                { "_ShipperID", "ShipperID" },
                { "_CompanyName", "CompanyName" },
                { "_Phone", "Phone" }
            });

            Debug.WriteLine("tsvm:" + ObjectInspector.Inspect(tsvm));

            testReturn.Obj  = svm;
            testReturn.Obj2 = tsvm;
        }
Beispiel #3
0
        public async Task <IActionResult> Select(CrudViweModel model)
        {
            if (ModelState.IsValid)
            {
                // 引数クラスを生成。下位(B・D層)は、テスト クラスを流用する
                TestParameterValue testParameterValue
                    = new TestParameterValue(this.ControllerName, "-", this.ActionName,
                                             model.DdlDap + "%" + model.DdlMode1 + "%" + model.DdlMode2 + "%" + model.DdlExRollback, this.UserInfo);

                // 動的SQLの要素を設定
                testParameterValue.Shipper = model.Shipper;

                // B層呼出し+都度コミット
                LayerB          layerB          = new LayerB();
                TestReturnValue testReturnValue = (TestReturnValue)await layerB.DoBusinessLogicAsync(
                    testParameterValue, this.SelectIsolationLevel(model.DdlIso));

                // 結果表示するメッセージ
                string message = "";

                if (testReturnValue.ErrorFlag == true)
                {
                    // 結果(業務続行可能なエラー)
                    message  = "ErrorMessageID:" + testReturnValue.ErrorMessageID + ";";
                    message += "ErrorMessage:" + testReturnValue.ErrorMessage + ";";
                    message += "ErrorInfo:" + testReturnValue.ErrorInfo;

                    // メッセージを設定。
                    model.Message = message;
                }
                else
                {
                    // 結果(正常系)
                    ModelState.Clear(); // ErrorのClearをしないと何故か設定できない。

                    #region PocoToPocoのテストコード

                    ShipperViweModel     svm  = null;
                    TestShipperViweModel tsvm = null;

                    // テスト1
                    svm = (ShipperViweModel)BinarySerialize.DeepClone(model.Shipper);

                    if (testReturnValue.Obj2 != null)
                    {
                        PocoToPoco.Map <TestShipperViweModel, ShipperViweModel>(
                            (TestShipperViweModel)testReturnValue.Obj2, svm,
                            // mapの書き方は、Key-Valueでdst-srcのproperty field名を書く
                            new Dictionary <string, string>()
                        {
                            { "ShipperID", "_ShipperID" },
                            { "CompanyName", "_CompanyName" },
                            { "Phone", "_Phone" }
                        });

                        Debug.WriteLine("svm:" + ObjectInspector.Inspect(svm));
                    }

                    // テスト2
                    tsvm = PocoToPoco.Map <ShipperViweModel, TestShipperViweModel>(
                        (ShipperViweModel)testReturnValue.Obj, null,
                        // mapの書き方は、Key-Valueでdst-srcのproperty field名を書く
                        new Dictionary <string, string>()
                    {
                        { "_ShipperID", "ShipperID" },
                        { "_CompanyName", "CompanyName" },
                        { "_Phone", "Phone" }
                    });
                    Debug.WriteLine("tsvm:" + ObjectInspector.Inspect(tsvm));

                    #endregion

                    model.Shipper = (ShipperViweModel)testReturnValue.Obj;
                }
            }

            // 再表示(Html.BeginFormでは、全体更新。
            return(View("Index", model));
        }