/// <summary>主キー一覧を取得</summary> /// <param name="parameter">引数クラス</param> private void UOC_SelectPkList(VoidParameterValue parameter) { // 戻り値クラスを生成して、事前に戻り値に設定しておく。 SelectPkListReturnValue returnValue = new SelectPkListReturnValue(); this.ReturnValue = returnValue; // ↓業務処理----------------------------------------------------- DataTable pkTable = new DataTable(); // ↓DBアクセス----------------------------------------------------- // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); // 動的SQLを指定 cmnDao.SQLFileName = "SelectAllOrderID.xml"; // 共通Daoを実行 cmnDao.ExecSelectFill_DT(pkTable); // ↑DBアクセス----------------------------------------------------- // 戻り値を設定 ArrayList pkList = new ArrayList(); for (int index = 0; index < pkTable.Rows.Count; index++) { //データテーブルからArrayListに詰め直す pkList.Add(pkTable.Rows[index]["OrderID"]); } returnValue.PkList = pkList; // ↑業務処理----------------------------------------------------- }
/// <summary>業務処理を実装</summary> /// <param name="muParameter">汎用引数クラス</param> private void UOC_SelectCount(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); this.ReturnValue = muReturn; // ↓業務処理----------------------------------------------------- switch ((muParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); switch ((muParameter.ActionType.Split('%'))[2]) { case "static": // 静的SQLを指定 cmnDao.SQLFileName = "ShipperCount.sql"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLFileName = "ShipperCount.xml"; break; } // 共通Daoを実行 // 戻り値を設定 muReturn.Bean = cmnDao.ExecSelectScalar().ToString(); break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // 共通Daoを実行 // 戻り値を設定 muReturn.Bean = genDao.D5_SelCnt().ToString(); break; default: // 個別Daoを使用する。 string ret = ""; LayerD myDao = new LayerD(this.GetDam()); myDao.SelectCount(muParameter.ActionType, out ret); muReturn.Bean = ret; break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <summary>業務処理を実装</summary> /// <param name="testParameter">引数クラス</param> private void UOC_SelectCount(TestParameterValue testParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 TestReturnValue testReturn = new TestReturnValue(); this.ReturnValue = testReturn; // ↓業務処理----------------------------------------------------- switch ((testParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); switch ((testParameter.ActionType.Split('%'))[2]) { case "static": // 静的SQLを指定 cmnDao.SQLFileName = "ShipperCount.sql"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLFileName = "ShipperCount.xml"; break; } // 共通Daoを実行 // 戻り値を設定 testReturn.Obj = cmnDao.ExecSelectScalar(); break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // 共通Daoを実行 // 戻り値を設定 testReturn.Obj = genDao.D5_SelCnt(); break; default: // 個別Daoを使用する。 LayerD myDao = new LayerD(this.GetDam()); myDao.SelectCount(testParameter, testReturn); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(testParameter); }
/// <summary>業務処理を実装</summary> /// <param name="testParameter">引数クラス</param> private void UOC_メソッド名(TestParameterValue testParameter) { //メソッド引数にBaseParameterValueの派生の型を定義可能。 // 戻り値クラスを生成して、事前に戻り地に設定しておく。 TestReturnValue testReturn = new TestReturnValue(); this.ReturnValue = testReturn; // ↓業務処理----------------------------------------------------- // 個別Dao LayerD myDao = new LayerD(this.GetDam()); //myDao.xxxx(testParameter, ref testReturn); // 共通Dao CmnDao cmnDao = new CmnDao(this.GetDam()); cmnDao.ExecSelectScalar(); // ↑業務処理----------------------------------------------------- }
/// <summary>データ取得処理を実装</summary> /// <param name="parameterValue">引数クラス</param> private void UOC_SelectMethod(_3TierParameterValue parameterValue) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 _3TierReturnValue returnValue = new _3TierReturnValue(); this.ReturnValue = returnValue; // ↓業務処理----------------------------------------------------- // 共通Dao CmnDao cmnDao = new CmnDao(this.GetDam()); // 検索条件の生成&指定 string whereSQL = this.SetSearchConditions(parameterValue, cmnDao); string selectPagingSqlTemplate = ""; string p = ""; // パラメタ記号 string s = ""; // 囲い記号開始 string e = ""; // 囲い記号終了 // テンプレート、囲い文字の選択 if (parameterValue.DBMSType == DbEnum.DBMSType.SQLServer) { selectPagingSqlTemplate = SELECT_PAGING_SQL_TEMPLATE_SQL_SERVER; p = "@"; s = "["; e = "]"; } else if (parameterValue.DBMSType == DbEnum.DBMSType.Oracle) { selectPagingSqlTemplate = SELECT_PAGING_SQL_TEMPLATE_ORACLE; p = ":"; s = "\""; e = "\""; } else { selectPagingSqlTemplate = SELECT_PAGING_SQL_TEMPLATE_SQL_SERVER; p = "@"; s = "["; e = "]"; } int startRowNum = parameterValue.StartRowIndex + 1; // SQL本体の生成(いろいろ組み込み //(DBMSによって可変となる可能性有り) string selectPagingSQL = string.Format( selectPagingSqlTemplate, new string[] { parameterValue.ColumnList, parameterValue.SortExpression, parameterValue.SortDirection, s + parameterValue.TableName + e , whereSQL, startRowNum.ToString(), (startRowNum + parameterValue.MaximumRows).ToString()} ).Replace("_p_", p).Replace("_s_", s).Replace("_e_", e); // DataTableをインスタンス化 if (parameterValue.DataTableType == null) { // == null returnValue.Dt = new DataTable(); } else { // != null // 型付きDataTable //(パブリック・デフォルト・コンストラクタ) returnValue.Dt = (DataTable)parameterValue.DataTableType.InvokeMember( null, BindingFlags.CreateInstance, null, null, null); } // SQLを設定して cmnDao.SQLText = selectPagingSQL; // パラメタは指定済み // DataTableを取得 cmnDao.ExecSelectFill_DT(returnValue.Dt); // ↑業務処理----------------------------------------------------- }
/// <summary>データ件数取得処理を実装</summary> /// <param name="parameterValue">引数クラス</param> private void UOC_SelectCountMethod(_3TierParameterValue parameterValue) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 _3TierReturnValue returnValue = new _3TierReturnValue(); this.ReturnValue = returnValue; // ↓業務処理----------------------------------------------------- // 共通Dao CmnDao cmnDao = new CmnDao(this.GetDam()); // 検索条件の生成&指定 string whereSQL = this.SetSearchConditions(parameterValue, cmnDao); string p = ""; // パラメタ記号 string s = ""; // 囲い記号開始 string e = ""; // 囲い記号終了 // 囲い文字の選択 if (parameterValue.DBMSType == DbEnum.DBMSType.SQLServer) { p = "@"; s = "["; e = "]"; } else if (parameterValue.DBMSType == DbEnum.DBMSType.Oracle) { p = ":"; s = "\""; e = "\""; } else { p = "@"; s = "["; e = "]"; } // SQLを設定して cmnDao.SQLText = string.Format( SELECT_COUNT_SQL_TEMPLATE, s + parameterValue.TableName + e, whereSQL) .Replace("_p_", p).Replace("_s_", s).Replace("_e_", e); // パラメタは指定済み // データ件数を取得 returnValue.Obj = cmnDao.ExecSelectScalar(); // ↑業務処理----------------------------------------------------- }
/// <summary>業務処理を実装</summary> /// <param name="testParameter">引数クラス</param> private void UOC_Select(TestParameterValue testParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 TestReturnValue testReturn = new TestReturnValue(); this.ReturnValue = testReturn; // ↓業務処理----------------------------------------------------- DataTable dt = null; switch ((testParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); switch ((testParameter.ActionType.Split('%'))[2]) { case "static": // 静的SQLを指定 cmnDao.SQLFileName = "ShipperSelect.sql"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLFileName = "ShipperSelect.xml"; break; } // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 cmnDao.SetParameter("P1", testParameter.ShipperID); // 戻り値 dt dt = new DataTable(); // 共通Daoを実行 cmnDao.ExecSelectFill_DT(dt); // キャストの対策コードを挿入 // ・SQLの場合、ShipperIDのintがInt32型にマップされる。 // ・ODPの場合、ShipperIDのNUMBERがInt64型にマップされる。 // ・DB2の場合、ShipperIDのDECIMALがxxx型にマップされる。 if (dt.Rows[0].ItemArray.GetValue(0).GetType().ToString() == "System.Int32") { // Int32なのでキャスト testReturn.ShipperID = (int)dt.Rows[0].ItemArray.GetValue(0); } else { // それ以外の場合、一度、文字列に変換してInt32.Parseする。 testReturn.ShipperID = int.Parse(dt.Rows[0].ItemArray.GetValue(0).ToString()); } testReturn.CompanyName = (string)dt.Rows[0].ItemArray.GetValue(1); testReturn.Phone = (string)dt.Rows[0].ItemArray.GetValue(2); break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // パラメタに対して、動的に値を設定する。 genDao.PK_ShipperID = testParameter.ShipperID; // 戻り値 dt dt = new DataTable(); // 自動生成Daoを実行 genDao.S2_Select(dt); // キャストの対策コードを挿入 // ・SQLの場合、ShipperIDのintがInt32型にマップされる。 // ・ODPの場合、ShipperIDのNUMBERがInt64型にマップされる。 // ・DB2の場合、ShipperIDのDECIMALがxxx型にマップされる。 if (dt.Rows[0].ItemArray.GetValue(0).GetType().ToString() == "System.Int32") { // Int32なのでキャスト testReturn.ShipperID = (int)dt.Rows[0].ItemArray.GetValue(0); } else { // それ以外の場合、一度、文字列に変換してInt32.Parseする。 testReturn.ShipperID = int.Parse(dt.Rows[0].ItemArray.GetValue(0).ToString()); } testReturn.CompanyName = (string)dt.Rows[0].ItemArray.GetValue(1); testReturn.Phone = (string)dt.Rows[0].ItemArray.GetValue(2); break; default: // 個別Daoを使用する。 LayerD myDao = new LayerD(this.GetDam()); myDao.Select(testParameter, testReturn); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(testParameter); }
/// <summary> /// This method TurnBack to slip iisuance UserID /// </summary> /// <param name="subsystemId"></param> /// <param name="workflowControlNo"></param> /// <param name="fromUserId"></param> /// <param name="toUserId"></param> /// <param name="currentWorkflowReserveArea"></param> /// <returns></returns> public void TurnbackSlipIssuanceUserID(string subsystemId, string workflowControlNo, decimal fromUserId, decimal? toUserId, string currentWorkflowReserveArea) { #region チェック処理を実装 string toUserInfo = ""; //If ToUserId is not null ans ActionType is End then getting user information if (toUserId.HasValue) // Endの時は不要 { toUserInfo = Workflow.GetUserInfo(toUserId.Value); } #endregion // -------------------------------------------------- // 現在の履歴件数を取得。 // -------------------------------------------------- //Gets the record count from T_WorkflowHistory table // -------------------------------------------------- CmnDao dao = new CmnDao(this.Dam); dao.SQLFileName = "RequestApproval_Count.sql"; dao.SetParameter("WorkflowControlNo", workflowControlNo); int recordCount = ((int)dao.ExecSelectScalar()); // -------------------------------------------------- // ワークフロー承認を依頼 // -------------------------------------------------- // T_CurrentWorkflowのUPDATE // -------------------------------------------------- DaoT_CurrentWorkflow daoT_CurrentWorkflow = new DaoT_CurrentWorkflow(this.Dam); // 主キー情報 daoT_CurrentWorkflow.PK_WorkflowControlNo = workflowControlNo; // 履歴番号は履歴件数+1 daoT_CurrentWorkflow.Set_HistoryNo_forUPD = recordCount + 1; DaoT_WorkflowHistory daoT_WorkflowHistory = new DaoT_WorkflowHistory(this.Dam); //Gets the Slip issuance orignal user id DataTable dt = GetSlipIssuanceUserID(subsystemId, workflowControlNo); //Updates the T_CurrentWorkflow and T_WorkflowHistory tables data with original slip issuance user information daoT_CurrentWorkflow.Set_WfPositionId_forUPD = dt.Rows[0]["WfPositionId"]; daoT_CurrentWorkflow.Set_WorkflowNo_forUPD = dt.Rows[0]["WorkflowNo"]; daoT_CurrentWorkflow.Set_FromUserId_forUPD = toUserId; // 実際のユーザIDを入力する。 daoT_CurrentWorkflow.Set_FromUserInfo_forUPD = toUserInfo; //Updating action type to TurnBack daoT_CurrentWorkflow.Set_ActionType_forUPD = "TurnBack"; daoT_CurrentWorkflow.Set_ToUserId_forUPD = dt.Rows[0]["FromUserId"]; // ユーザIDからユーザ情報を取得 string fromUserInfo = Workflow.GetUserInfo(fromUserId); daoT_CurrentWorkflow.Set_ToUserInfo_forUPD = fromUserInfo; daoT_CurrentWorkflow.Set_ToUserPositionTitlesId_forUPD = dt.Rows[0]["ToUserPositionTitlesId"]; daoT_CurrentWorkflow.Set_NextWfPositionId_forUPD = dt.Rows[0]["NextWfPositionId"]; daoT_CurrentWorkflow.Set_NextWorkflowNo_forUPD = dt.Rows[0]["NextWorkflowNo"]; daoT_CurrentWorkflow.Set_ReserveArea_forUPD = currentWorkflowReserveArea; //Updating acceptance information with null daoT_CurrentWorkflow.Set_ReplyDeadline_forUPD = DBNull.Value; daoT_CurrentWorkflow.Set_StartDate_forUPD = DateTime.Now; daoT_CurrentWorkflow.Set_AcceptanceDate_forUPD = DBNull.Value; daoT_CurrentWorkflow.Set_AcceptanceUserId_forUPD = DBNull.Value; daoT_CurrentWorkflow.Set_AcceptanceUserInfo_forUPD = DBNull.Value; daoT_CurrentWorkflow.D3_Update(); // PK daoT_WorkflowHistory.PK_WorkflowControlNo = workflowControlNo; daoT_WorkflowHistory.PK_HistoryNo = recordCount; // EndDate daoT_WorkflowHistory.Set_EndDate_forUPD = DateTime.Now; daoT_WorkflowHistory.S3_Update(); }
/// <summary>業務処理を実装</summary> /// <param name="testParameter">引数クラス</param> private void UOC_SelectAll_DR(TestParameterValue testParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 TestReturnValue testReturn = new TestReturnValue(); this.ReturnValue = testReturn; // ↓業務処理----------------------------------------------------- DataTable dt = null; switch ((testParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); switch ((testParameter.ActionType.Split('%'))[2]) { case "static": // 静的SQLを指定 cmnDao.SQLText = "SELECT * FROM Shippers"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLText = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><ROOT>SELECT * FROM Shippers</ROOT>"; break; } // 戻り値 dt dt = new DataTable(); // 3列生成 dt.Columns.Add("c1", System.Type.GetType("System.String")); dt.Columns.Add("c2", System.Type.GetType("System.String")); dt.Columns.Add("c3", System.Type.GetType("System.String")); // 共通Daoを実行 IDataReader idr = cmnDao.ExecSelect_DR(); while (idr.Read()) { // DRから読む object[] objArray = new object[3]; idr.GetValues(objArray); // DTに設定する。 DataRow dr = dt.NewRow(); dr.ItemArray = objArray; dt.Rows.Add(dr); } // 終了したらクローズ idr.Close(); // 戻り値を設定 testReturn.Obj = dt; break; case "generate": // 自動生成Daoを使用する。 // DRのI/Fなし // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // 戻り値 dt dt = new DataTable(); // 自動生成Daoを実行 genDao.D2_Select(dt); // 戻り値を設定 testReturn.Obj = (DataTable)dt; break; default: // 個別Daoを使用する。 LayerD myDao = new LayerD(this.GetDam()); myDao.SelectAll_DR(testParameter, testReturn); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(testParameter); }
/// <summary>業務処理を実装</summary> /// <param name="muParameter">汎用引数クラス</param> private void UOC_Select(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); this.ReturnValue = muReturn; // ↓業務処理----------------------------------------------------- DataTable dt = null; Shipper shipper = null; switch ((muParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); switch ((muParameter.ActionType.Split('%'))[2]) { case "static": // 静的SQLを指定 cmnDao.SQLFileName = "ShipperSelect.sql"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLFileName = "ShipperSelect.xml"; break; } // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 cmnDao.SetParameter("P1", muParameter.Bean.ToString()); // 戻り値 dt dt = new DataTable("rtn"); // 共通Daoを実行 cmnDao.ExecSelectFill_DT(dt); // 戻り値を設定 shipper = new Shipper(); shipper.ShipperID = (int)muParameter.Bean; shipper.CompanyName = (string)dt.Rows[0].ItemArray.GetValue(1); shipper.Phone = (string)dt.Rows[0].ItemArray.GetValue(2); muReturn.Bean = shipper; break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // パラメタに対して、動的に値を設定する。 genDao.PK_ShipperID = muParameter.Bean.ToString(); // 戻り値 dt dt = new DataTable("rtn"); // 自動生成Daoを実行 genDao.S2_Select(dt); // 戻り値を設定 shipper = new Shipper(); shipper.ShipperID = (int)muParameter.Bean; shipper.CompanyName = (string)dt.Rows[0].ItemArray.GetValue(1); shipper.Phone = (string)dt.Rows[0].ItemArray.GetValue(2); muReturn.Bean = shipper; break; default: // 個別Daoを使用する。 string companyName; string phone; LayerD myDao = new LayerD(this.GetDam()); myDao.Select(muParameter.ActionType, muParameter.Bean.ToString(), out companyName, out phone); // 戻り値を設定 shipper = new Shipper(); shipper.ShipperID = (int)muParameter.Bean; shipper.CompanyName = companyName; shipper.Phone = phone; muReturn.Bean = shipper; break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <summary>1件取得処理を実装</summary> /// <param name="parameterValue">引数クラス</param> private void UOC_SelectRecord(_3TierParameterValue parameterValue) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 _3TierReturnValue returnValue = new _3TierReturnValue(); this.ReturnValue = returnValue; // ↓業務処理----------------------------------------------------- // 共通Dao CmnDao cmnDao = new CmnDao(this.GetDam()); // 検索条件の指定 // AndEqualSearchConditions(主キー foreach (string k in parameterValue.AndEqualSearchConditions.Keys) { // nullチェック(null相当を要検討 if (parameterValue.AndEqualSearchConditions[k] == null) { // == null } else { // != null // 文字列の場合の扱い if (parameterValue.AndEqualSearchConditions[k] is string) { if (!string.IsNullOrEmpty((string)parameterValue.AndEqualSearchConditions[k])) { // パラメタ指定 cmnDao.SetParameter(k, parameterValue.AndEqualSearchConditions[k]); } } else { // パラメタ指定 cmnDao.SetParameter(k, parameterValue.AndEqualSearchConditions[k]); } } } // DataTableをインスタンス化 if (parameterValue.DataTableType == null) { // == null returnValue.Dt = new DataTable(); } else { // != null // 型付きDataTable //(パブリック・デフォルト・コンストラクタ) returnValue.Dt = (DataTable)parameterValue.DataTableType.InvokeMember( null, BindingFlags.CreateInstance, null, null, null); } // SQLを設定して cmnDao.SQLFileName = this.DaoClassNameHeader + parameterValue.TableName + this.DaoClassNameFooter + "_" + this.MethodNameHeaderS + this.MethodLabel_Sel + this.MethodNameFooterS + ".xml"; // パラメタは指定済み // DataTableを取得 cmnDao.ExecSelectFill_DT(returnValue.Dt); // ↑業務処理----------------------------------------------------- }
/// <summary>業務処理を実装</summary> /// <param name="muParameter">汎用引数クラス</param> private void UOC_SelectAll_DR(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); this.ReturnValue = muReturn; // ↓業務処理----------------------------------------------------- DataTable dt = null; Shipper[] shippers = null; switch ((muParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); switch ((muParameter.ActionType.Split('%'))[2]) { case "static": // 静的SQLを指定 cmnDao.SQLText = "SELECT * FROM Shippers"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLText = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><ROOT>SELECT * FROM Shippers</ROOT>"; break; } // 戻り値 dt dt = new DataTable("rtn"); // 3列生成 dt.Columns.Add("ShipperID", System.Type.GetType("System.String")); dt.Columns.Add("CompanyName", System.Type.GetType("System.String")); dt.Columns.Add("Phone", System.Type.GetType("System.String")); // 共通Daoを実行 IDataReader idr = cmnDao.ExecSelect_DR(); while (idr.Read()) { // DRから読む object[] objArray = new object[3]; idr.GetValues(objArray); // DTに設定する。 DataRow dr = dt.NewRow(); dr.ItemArray = objArray; dt.Rows.Add(dr); } // 終了したらクローズ idr.Close(); // 戻り値を設定 shippers = new Shipper[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { Shipper shipper = new Shipper(); shipper.ShipperID = int.Parse((string)dt.Rows[i]["ShipperID"]); shipper.CompanyName = (string)dt.Rows[i]["CompanyName"]; shipper.Phone = (string)dt.Rows[i]["Phone"]; shippers[i] = shipper; } muReturn.Bean = shippers; break; case "generate": // 自動生成Daoを使用する。 // DRのI/Fなし // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // 戻り値 dt dt = new DataTable("rtn"); // 自動生成Daoを実行 genDao.D2_Select(dt); // 戻り値を設定 shippers = new Shipper[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { Shipper shipper = new Shipper(); shipper.ShipperID = int.Parse(dt.Rows[i]["ShipperID"].ToString()); shipper.CompanyName = (string)dt.Rows[i]["CompanyName"]; shipper.Phone = (string)dt.Rows[i]["Phone"]; shippers[i] = shipper; } muReturn.Bean = shippers; break; default: // 個別Daoを使用する。 LayerD myDao = new LayerD(this.GetDam()); myDao.SelectAll_DR(muParameter.ActionType, out dt); // 戻り値を設定 shippers = new Shipper[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { Shipper shipper = new Shipper(); shipper.ShipperID = int.Parse((string)dt.Rows[i]["ShipperID"]); shipper.CompanyName = (string)dt.Rows[i]["CompanyName"]; shipper.Phone = (string)dt.Rows[i]["Phone"]; shippers[i] = shipper; } muReturn.Bean = shippers; break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <summary>業務処理を実装</summary> /// <param name="muParameter">汎用引数クラス</param> private void UOC_SelectAll_DSQL(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); this.ReturnValue = muReturn; // ↓業務処理----------------------------------------------------- DataTable dt = null; Shipper[] shippers = null; string orderColumn = ((string[])(muParameter.Bean))[0]; string orderSequence = ((string[])(muParameter.Bean))[1]; switch ((muParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); switch ((muParameter.ActionType.Split('%'))[2]) { case "static": // 静的SQLを指定 cmnDao.SQLFileName = "ShipperSelectOrder.sql"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLFileName = "ShipperSelectOrder.xml"; break; } // ユーザ定義パラメタに対して、動的に値を設定する。 if (orderColumn == "c1") { orderColumn = "ShipperID"; } else if (orderColumn == "c2") { orderColumn = "CompanyName"; } else if (orderColumn == "c3") { orderColumn = "Phone"; } else { } if (orderSequence == "A") { orderSequence = "ASC"; } else if (orderSequence == "D") { orderSequence = "DESC"; } else { } // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 cmnDao.SetParameter("P1", "test"); // ユーザ入力は指定しない。 // ※ 動的SQLのVALタグは、前後の空白をつめることが有るので、 // 必要であれば、前後の空白を明示的に指定する必要がある。 cmnDao.SetUserParameter("COLUMN", " " + orderColumn + " "); cmnDao.SetUserParameter("SEQUENCE", " " + orderSequence + " "); // 戻り値 dt dt = new DataTable("rtn"); // 共通Daoを実行 cmnDao.ExecSelectFill_DT(dt); // 戻り値を設定 shippers = new Shipper[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { Shipper shipper = new Shipper(); shipper.ShipperID = (int)dt.Rows[i]["ShipperID"]; shipper.CompanyName = (string)dt.Rows[i]["CompanyName"]; shipper.Phone = (string)dt.Rows[i]["Phone"]; shippers[i] = shipper; } muReturn.Bean = shippers; break; //case "generate": // 自動生成Daoを使用する。 // // 当該SQLなし // break; default: // 個別Daoを使用する。 LayerD myDao = new LayerD(this.GetDam()); myDao.SelectAll_DSQL(muParameter.ActionType, orderColumn, orderSequence, out dt); // 戻り値を設定 shippers = new Shipper[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { Shipper shipper = new Shipper(); shipper.ShipperID = (int)dt.Rows[i]["ShipperID"]; shipper.CompanyName = (string)dt.Rows[i]["CompanyName"]; shipper.Phone = (string)dt.Rows[i]["Phone"]; shippers[i] = shipper; } muReturn.Bean = shippers; break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <summary>業務処理を実装</summary> /// <param name="muParameter">汎用引数クラス</param> private void UOC_SelectAll_DS(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); this.ReturnValue = muReturn; // ↓業務処理----------------------------------------------------- DataSet ds = null; DataTable dt = null; Shipper[] shippers = null; switch ((muParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); switch ((muParameter.ActionType.Split('%'))[2]) { case "static": // 静的SQLを指定 cmnDao.SQLText = "SELECT * FROM Shippers"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLText = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><ROOT>SELECT * FROM Shippers</ROOT>"; break; } // 戻り値 ds ds = new DataSet(); // 共通Daoを実行 cmnDao.ExecSelectFill_DS(ds); // 戻り値を設定 dt = ds.Tables[0]; shippers = new Shipper[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { Shipper shipper = new Shipper(); shipper.ShipperID = (int)dt.Rows[i]["ShipperID"]; shipper.CompanyName = (string)dt.Rows[i]["CompanyName"]; shipper.Phone = (string)dt.Rows[i]["Phone"]; shippers[i] = shipper; } muReturn.Bean = shippers; break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // 戻り値 ds ds = new DataSet(); ds.Tables.Add(new DataTable("rtn")); // 自動生成Daoを実行 genDao.D2_Select(ds.Tables[0]); // 戻り値を設定 dt = ds.Tables[0]; shippers = new Shipper[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { Shipper shipper = new Shipper(); shipper.ShipperID = (int)dt.Rows[i]["ShipperID"]; shipper.CompanyName = (string)dt.Rows[i]["CompanyName"]; shipper.Phone = (string)dt.Rows[i]["Phone"]; shippers[i] = shipper; } muReturn.Bean = shippers; break; default: // 個別Daoを使用する。 LayerD myDao = new LayerD(this.GetDam()); myDao.SelectAll_DS(muParameter.ActionType, out ds); // 戻り値を設定 dt = ds.Tables[0]; shippers = new Shipper[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { Shipper shipper = new Shipper(); shipper.ShipperID = (int)dt.Rows[i]["ShipperID"]; shipper.CompanyName = (string)dt.Rows[i]["CompanyName"]; shipper.Phone = (string)dt.Rows[i]["Phone"]; shippers[i] = shipper; } muReturn.Bean = shippers; break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <summary> /// This method is used to terminate the workflow forecefully /// by updating EndDate column of T_Workflow table with enddate. /// </summary> /// <param name="nextWorkflow"></param> /// <param name="workflowControlNo"></param> /// <param name="fromUserId"></param> /// <param name="currentWorkflowReserveArea"></param> /// <returns></returns> public int ForcedTermination(DataRow nextWorkflow, string workflowControlNo, decimal fromUserId, string currentWorkflowReserveArea) { #region チェック処理を実装 if (nextWorkflow == null) { throw new BusinessSystemException( MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[0], String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[1], String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR_CHECK_EMPTY, "nextWorkflow"))); } else if (!nextWorkflow.Table.Columns.Contains("SubSystemId")) { throw new BusinessSystemException( MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[0], String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[1], String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR_CHECK_FIELD_ISNT_CONTAINED, "SubSystemId", "nextWorkflow"))); } else if (string.IsNullOrEmpty(workflowControlNo)) { throw new BusinessSystemException( MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[0], String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[1], String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR_CHECK_EMPTY, "workflowControlNo"))); } // ユーザIDからユーザ情報を取得 string fromUserInfo = Workflow.GetUserInfo(fromUserId); string toUserInfo = ""; #endregion // -------------------------------------------------- // 現在の履歴件数を取得。 // -------------------------------------------------- //Gets the record count from T_WorkflowHistory table // -------------------------------------------------- CmnDao dao = new CmnDao(this.Dam); dao.SQLFileName = "RequestApproval_Count.sql"; dao.SetParameter("WorkflowControlNo", workflowControlNo); int recordCount = ((int)dao.ExecSelectScalar()); // -------------------------------------------------- // ワークフロー承認を依頼 // -------------------------------------------------- // T_CurrentWorkflowのUPDATE // -------------------------------------------------- DaoT_CurrentWorkflow daoT_CurrentWorkflow = new DaoT_CurrentWorkflow(this.Dam); // 主キー情報 daoT_CurrentWorkflow.PK_WorkflowControlNo = workflowControlNo; // 履歴番号は履歴件数+1 daoT_CurrentWorkflow.Set_HistoryNo_forUPD = recordCount + 1; daoT_CurrentWorkflow.Set_WfPositionId_forUPD = nextWorkflow["WfPositionId"]; daoT_CurrentWorkflow.Set_WorkflowNo_forUPD = nextWorkflow["WorkflowNo"]; daoT_CurrentWorkflow.Set_FromUserId_forUPD = fromUserId; // 実際のユーザIDを入力する。 daoT_CurrentWorkflow.Set_FromUserInfo_forUPD = fromUserInfo; //Updates the ActionType with Abnormal termination daoT_CurrentWorkflow.Set_ActionType_forUPD = "ABEnd"; // 上記以外は、nextWorkflow["ToUserId"]を指定する。 daoT_CurrentWorkflow.Set_ToUserId_forUPD = nextWorkflow["ToUserId"]; daoT_CurrentWorkflow.Set_ToUserInfo_forUPD = toUserInfo; daoT_CurrentWorkflow.Set_ToUserPositionTitlesId_forUPD = nextWorkflow["ToUserPositionTitlesId"]; daoT_CurrentWorkflow.Set_NextWfPositionId_forUPD = nextWorkflow["NextWfPositionId"]; daoT_CurrentWorkflow.Set_NextWorkflowNo_forUPD = nextWorkflow["NextWorkflowNo"]; daoT_CurrentWorkflow.Set_ReserveArea_forUPD = currentWorkflowReserveArea; daoT_CurrentWorkflow.Set_StartDate_forUPD = DateTime.Now; daoT_CurrentWorkflow.Set_AcceptanceDate_forUPD = DBNull.Value; daoT_CurrentWorkflow.Set_AcceptanceUserId_forUPD = DBNull.Value; daoT_CurrentWorkflow.Set_AcceptanceUserInfo_forUPD = DBNull.Value; daoT_CurrentWorkflow.D3_Update(); // -------------------------------------------------- // 完了(T_WorkflowHistoryのEndDate項目を更新) // -------------------------------------------------- // T_WorkflowHistoryのUPDATE // -------------------------------------------------- DaoT_WorkflowHistory daoT_WorkflowHistory = new DaoT_WorkflowHistory(this.Dam); // PK daoT_WorkflowHistory.PK_WorkflowControlNo = workflowControlNo; daoT_WorkflowHistory.PK_HistoryNo = recordCount; //Updates the EndDate to current date for forceful termination daoT_WorkflowHistory.Set_EndDate_forUPD = DateTime.Now; daoT_WorkflowHistory.S3_Update(); //--- // 完了 // -------------------------------------------------- // 完了の場合(T_WorkflowのEndDate項目を更新) // -------------------------------------------------- // T_WorkflowのUPDATE // -------------------------------------------------- DaoT_Workflow daoT_Workflow = new DaoT_Workflow(this.Dam); // PK daoT_Workflow.PK_WorkflowControlNo = workflowControlNo; //Updates the EndDate to current date for forceful termination daoT_Workflow.Set_EndDate_forUPD = DateTime.Now; daoT_Workflow.S3_Update(); // -------------------------------------------------- // 履歴に移動 // -------------------------------------------------- // T_CurrentWorkflow→T_WorkflowHistory // -------------------------------------------------- dao.SQLFileName = "RequestApproval_Move.sql"; dao.SetParameter("WorkflowControlNo", workflowControlNo); dao.ExecInsUpDel_NonQuery(); // リターン(MailTemplateId) if (nextWorkflow["MailTemplateId"] == DBNull.Value) { return 0; } else { return (int)nextWorkflow["MailTemplateId"]; } }
/// <summary> /// Gets the Slip Issuance UserID of History=1 to TurnBack /// </summary> /// <param name="subSystemId"></param> /// <param name="workflowControlNo"></param> /// <returns></returns> private DataTable GetSlipIssuanceUserID(string subSystemId, string workflowControlNo) { #region チェック処理を実装 if (string.IsNullOrEmpty(subSystemId)) { throw new BusinessSystemException( MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[0], String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[1], String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR_CHECK_FIELD_ISNT_CONTAINED, "SubSystemId", "turnBackWorkflow"))); } else if (string.IsNullOrEmpty(workflowControlNo)) { throw new BusinessSystemException( MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[0], String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[1], String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR_CHECK_EMPTY, "workflowControlNo"))); } #endregion // -------------------------------------------------- // 差戻しのToユーザIDを履歴から取得 // -------------------------------------------------- //Executes the select query of T_WorkflowHistory for getting the original slip issuance user information // -------------------------------------------------- CmnDao dao = new CmnDao(this.Dam); dao.SQLFileName = "GetTurnBackFromUserHistory.sql"; dao.SetParameter("WorkflowControlNo", workflowControlNo); dao.SetParameter("ActionType", "TurnBack"); DataTable dt = new DataTable(); dao.ExecSelectFill_DT(dt); return dt; }
/// <summary>検索条件の設定</summary> /// <param name="parameterValue">引数クラス</param> /// <param name="cmnDao">共通Dao</param> /// <returns>Where句</returns> private string SetSearchConditions( _3TierParameterValue parameterValue, CmnDao cmnDao) { // 検索条件 string whereSQL = ""; #region AND // AndEqualSearchConditions // nullチェック if (parameterValue.AndEqualSearchConditions == null) { // == null } else { // != null foreach (string k in parameterValue.AndEqualSearchConditions.Keys) { // フラグ bool isSetted = false; // nullチェック(null相当を要検討 if (parameterValue.AndEqualSearchConditions[k] == null) { // == null } else { // != null // 文字列チェック if (parameterValue.AndEqualSearchConditions[k] is string) { // 文字列の場合 if ((string)parameterValue.AndEqualSearchConditions[k] == "") { // 空文字列(★ 扱いを検討 → 検索条件の空文字列は検索しない扱い } else { // 空文字列でない。 isSetted = true; } } else { // オブジェクトの場合 isSetted = true; } } // パラメタを設定 if (isSetted) { whereSQL = GenWhereAndSetParameter( WHERE_SQL_TEMPLATE_EQUAL, whereSQL, cmnDao, k, parameterValue.AndEqualSearchConditions[k], false); isSetted = false; } } } // AndLikeSearchConditions // nullチェック if (parameterValue.AndLikeSearchConditions == null) { // == null } else { // != null foreach (string k in parameterValue.AndLikeSearchConditions.Keys) { // nullチェック(null相当を要検討 if (string.IsNullOrEmpty(parameterValue.AndLikeSearchConditions[k])) { // 空文字列 } else { // 空文字列でない。 // パラメタを設定 whereSQL = GenWhereAndSetParameter( WHERE_SQL_TEMPLATE_LIKE, whereSQL, cmnDao, k, parameterValue.AndLikeSearchConditions[k], true); } } } #endregion #region OR // OrEqualSearchConditions // nullチェック if (parameterValue.OrEqualSearchConditions == null) { // == null } else { // != null foreach (string k in parameterValue.OrEqualSearchConditions.Keys) { // フラグ bool isSetted = false; // nullチェック(null相当を要検討 if (parameterValue.OrEqualSearchConditions[k] == null) { // == null } else { // != null // OR条件はループする。 int i = 0; foreach (object o in parameterValue.OrEqualSearchConditions[k]) { // 文字列チェック if (o is string) { // 文字列の場合 if ((string)o == "") { // 空文字列(★ 扱いを検討 → 検索条件の空文字列は検索しない扱い } else { // 空文字列でない。 isSetted = true; } } else { // オブジェクトの場合 isSetted = true; } // パラメタを設定 if (isSetted) { whereSQL = GenWhereOrSetParameter( WHERE_SQL_TEMPLATE_EQUAL, whereSQL, cmnDao, k, o, i, false); isSetted = false; i++; } } } } } // OrLikeSearchConditions // nullチェック if (parameterValue.OrLikeSearchConditions == null) { // == null } else { // != null foreach (string k in parameterValue.OrLikeSearchConditions.Keys) { // nullチェック(null相当を要検討 if (parameterValue.OrLikeSearchConditions[k] == null) { // == null } else { // != null // OR条件はループする。 int i = 0; foreach (string s in parameterValue.OrLikeSearchConditions[k]) { // 文字列の場合 if ((string)s == "") { // 空文字列 } else { // 空文字列でない。 // パラメタを設定 whereSQL = GenWhereOrSetParameter( WHERE_SQL_TEMPLATE_LIKE, whereSQL, cmnDao, k, s, i, true); i++; } } } } } #endregion #region その他 // 追加の検索条件(要:半角スペース) whereSQL += " " + parameterValue.ElseWhereSQL; // ElseSearchConditions // nullチェック if (parameterValue.ElseSearchConditions == null) { // == null } else { // != null foreach (string k in parameterValue.ElseSearchConditions.Keys) { // nullチェック(null相当を要検討 if (parameterValue.ElseSearchConditions[k] == null) { // == null } else { // != null cmnDao.SetParameter(k, parameterValue.ElseSearchConditions[k]); } } } #endregion // Where句の付与(要:Trim) if (!string.IsNullOrEmpty(whereSQL.Trim())) { // (要:半角スペース) whereSQL = "WHERE " + whereSQL; } // 先頭の論理演算子を削除 return BaseDam.DeleteFirstLogicalOperatoronWhereClause(whereSQL); }
/// <summary>バッチ更新処理を実装</summary> /// <param name="parameterValue">引数クラス</param> private void UOC_BatchUpdate(_3TierParameterValue parameterValue) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 _3TierReturnValue returnValue = new _3TierReturnValue(); this.ReturnValue = returnValue; // ↓業務処理----------------------------------------------------- // 共通Dao CmnDao cmnDao = new CmnDao(this.GetDam()); int i = 0; // 件数のカウント DataTable dt = (DataTable)parameterValue.Obj; // バッチ更新 foreach (DataRow dr in dt.Rows) { switch (dr.RowState) { case DataRowState.Added: // 追加 // SQLを設定して cmnDao.SQLFileName = this.DaoClassNameHeader + parameterValue.TableName + this.DaoClassNameFooter + "_" + this.MethodNameHeaderD + this.MethodLabel_Ins + this.MethodNameFooterD + ".xml"; // パラメタ指定 foreach (DataColumn c in dt.Columns) { // 空文字列も通常の値と同一に扱う cmnDao.SetParameter(c.ColumnName, dr[c]); } // 更新処理を実行 i += cmnDao.ExecInsUpDel_NonQuery(); break; case DataRowState.Modified: // 更新 // SQLを設定して cmnDao.SQLFileName = this.DaoClassNameHeader + parameterValue.TableName + this.DaoClassNameFooter + "_" + this.MethodNameHeaderS + this.MethodLabel_Upd + this.MethodNameFooterS + ".xml"; // パラメタ指定 foreach (DataColumn dc in dt.Columns) { // 主キー・タイムスタンプ列の設定はUP側で。 // また、空文字列も通常の値と同一に扱う。 if (parameterValue.AndEqualSearchConditions.ContainsKey(dc.ColumnName)) { // Where条件は、DataRowVersion.Originalを付与 cmnDao.SetParameter(dc.ColumnName, dr[dc, DataRowVersion.Original]); } else { cmnDao.SetParameter( this.UpdateParamHeader + dc.ColumnName + this.UpdateParamFooter, dr[dc]); } } // 更新処理を実行 i += cmnDao.ExecInsUpDel_NonQuery(); break; case DataRowState.Deleted: // 削除 // SQLを設定して cmnDao.SQLFileName = this.DaoClassNameHeader + parameterValue.TableName + this.DaoClassNameFooter + "_" + this.MethodNameHeaderS + this.MethodLabel_Del + this.MethodNameFooterS + ".xml"; // パラメタ指定 foreach (DataColumn c in dt.Columns) { // 主キー・タイムスタンプ列の設定はUP側で。 // また、空文字列も通常の値と同一に扱う。 if (parameterValue.AndEqualSearchConditions.ContainsKey(c.ColumnName)) { // Where条件は、DataRowVersion.Originalを付与 cmnDao.SetParameter(c.ColumnName, dr[c, DataRowVersion.Original]); } } // 更新処理を実行 i += cmnDao.ExecInsUpDel_NonQuery(); break; default: // 上記以外 // なにもしない。 break; } } // 件数を返却 returnValue.Obj = i; // ↑業務処理----------------------------------------------------- }
/// <summary>Where句生成&パラメタ指定(or)</summary> /// <param name="whereSqlTemplate">Where句SQLテンプレート</param> /// <param name="whereSQL">生成中のWhere句SQL</param> /// <param name="cmnDao">共通Dao</param> /// <param name="parameterName">パラメタ名</param> /// <param name="parameterValue">パラメタ値</param> /// <param name="parameterNumber">パラメタ番号</param> /// <param name="isLike">Likeか?</param> /// <returns>生成したWhere句SQL</returns> private string GenWhereOrSetParameter( string whereSqlTemplate, string whereSQL, CmnDao cmnDao, string parameterName, object parameterValue, int parameterNumber, bool isLike) { // Where句生成 if (string.IsNullOrEmpty(whereSQL)) { // 先頭は何もしない。 } else { // 以降はOR whereSQL += " OR "; } string temp = ""; temp = whereSqlTemplate.Replace("_ColName_", parameterName); // パラメタ指定 if (isLike) { // Like whereSQL += temp.Replace("_ParamName_", this.LikeParamHeader + parameterName + parameterNumber.ToString() + this.LikeParamFooter); cmnDao.SetParameter(this.LikeParamHeader + parameterName + parameterNumber.ToString() + this.LikeParamFooter, parameterValue); } else { // Equal whereSQL += temp.Replace("_ParamName_", parameterName + parameterNumber.ToString()); cmnDao.SetParameter(parameterName + parameterNumber.ToString(), parameterValue); } return whereSQL; }
/// <summary>ワークフロー承認を依頼します。</summary> /// <param name="nextWorkflow">選択したワークフロー承認依頼</param> /// <param name="workflowControlNo">ワークフロー管理番号(必須)</param> /// <param name="fromUserId">FromユーザID(必須)</param> /// <param name="toUserId">ToユーザID(TurnBack、Replyの際に必要)</param> /// <param name="currentWorkflowReserveArea">T_CurrentWorkflowの予備領域(任意)</param> /// <param name="replyDeadline">回答希望日(任意)</param> /// <returns>メール・テンプレートID</returns> public int RequestWfApproval( DataRow nextWorkflow, string workflowControlNo, decimal fromUserId, decimal? toUserId, string currentWorkflowReserveArea, DateTime? replyDeadline) { #region チェック処理を実装 if (nextWorkflow == null) { throw new BusinessSystemException( MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[0], String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[1], String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR_CHECK_EMPTY, "nextWorkflow"))); } else if (!nextWorkflow.Table.Columns.Contains("SubSystemId")) { throw new BusinessSystemException( MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[0], String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[1], String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR_CHECK_FIELD_ISNT_CONTAINED, "SubSystemId", "nextWorkflow"))); } else if (string.IsNullOrEmpty(workflowControlNo)) { throw new BusinessSystemException( MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[0], String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR[1], String.Format(MyBusinessSystemExceptionMessage.WORKFLOW_ERROR_CHECK_EMPTY, "workflowControlNo"))); } // ユーザIDからユーザ情報を取得 string fromUserInfo = Workflow.GetUserInfo(fromUserId); string toUserInfo = ""; if (toUserId.HasValue && (string)nextWorkflow["ActionType"] != "End") // Endの時は不要 { toUserInfo = Workflow.GetUserInfo(toUserId.Value); } #endregion // -------------------------------------------------- // 現在の履歴件数を取得。 // -------------------------------------------------- // T_WorkflowHistoryのCount // -------------------------------------------------- CmnDao dao = new CmnDao(this.Dam); dao.SQLFileName = "RequestApproval_Count.sql"; dao.SetParameter("WorkflowControlNo", workflowControlNo); int recordCount = ((int)dao.ExecSelectScalar()); // -------------------------------------------------- // ワークフロー承認を依頼 // -------------------------------------------------- // T_CurrentWorkflowのUPDATE // -------------------------------------------------- DaoT_CurrentWorkflow daoT_CurrentWorkflow = new DaoT_CurrentWorkflow(this.Dam); // 主キー情報 daoT_CurrentWorkflow.PK_WorkflowControlNo = workflowControlNo; // 履歴番号は履歴件数+1 daoT_CurrentWorkflow.Set_HistoryNo_forUPD = recordCount + 1; daoT_CurrentWorkflow.Set_WfPositionId_forUPD = nextWorkflow["WfPositionId"]; daoT_CurrentWorkflow.Set_WorkflowNo_forUPD = nextWorkflow["WorkflowNo"]; daoT_CurrentWorkflow.Set_FromUserId_forUPD = fromUserId; // 実際のユーザIDを入力する。 daoT_CurrentWorkflow.Set_FromUserInfo_forUPD = fromUserInfo; daoT_CurrentWorkflow.Set_ActionType_forUPD = nextWorkflow["ActionType"]; if (toUserId.HasValue && ((string)nextWorkflow["ActionType"] == "TurnBack" || (string)nextWorkflow["ActionType"] == "Reply")) { // ActionTypeがTurnBack or Replyで、toUserIDがnullで無い場合、 // 指定のtoUserIDにTurnBack or Replyする。 daoT_CurrentWorkflow.Set_ToUserId_forUPD = toUserId; } else { // 上記以外は、nextWorkflow["ToUserId"]を指定する。 daoT_CurrentWorkflow.Set_ToUserId_forUPD = nextWorkflow["ToUserId"]; } daoT_CurrentWorkflow.Set_ToUserInfo_forUPD = toUserInfo; daoT_CurrentWorkflow.Set_ToUserPositionTitlesId_forUPD = nextWorkflow["ToUserPositionTitlesId"]; daoT_CurrentWorkflow.Set_NextWfPositionId_forUPD = nextWorkflow["NextWfPositionId"]; daoT_CurrentWorkflow.Set_NextWorkflowNo_forUPD = nextWorkflow["NextWorkflowNo"]; daoT_CurrentWorkflow.Set_ReserveArea_forUPD = currentWorkflowReserveArea; //daoT_CurrentWorkflow.Set_ExclusiveKey_forUPD = ""; if ((string)nextWorkflow["ActionType"] == "TurnBack" || (string)nextWorkflow["ActionType"] == "Reply") { // ActionTypeがTurnBack or Replyの場合 daoT_CurrentWorkflow.Set_ReplyDeadline_forUPD = DBNull.Value; } else { daoT_CurrentWorkflow.Set_ReplyDeadline_forUPD = replyDeadline; } daoT_CurrentWorkflow.Set_StartDate_forUPD = DateTime.Now; daoT_CurrentWorkflow.Set_AcceptanceDate_forUPD = DBNull.Value; daoT_CurrentWorkflow.Set_AcceptanceUserId_forUPD = DBNull.Value; daoT_CurrentWorkflow.Set_AcceptanceUserInfo_forUPD = DBNull.Value; daoT_CurrentWorkflow.D3_Update(); // -------------------------------------------------- // 完了(T_WorkflowHistoryのEndDate項目を更新) // -------------------------------------------------- // T_WorkflowHistoryのUPDATE // -------------------------------------------------- DaoT_WorkflowHistory daoT_WorkflowHistory = new DaoT_WorkflowHistory(this.Dam); // PK daoT_WorkflowHistory.PK_WorkflowControlNo = workflowControlNo; daoT_WorkflowHistory.PK_HistoryNo = recordCount; // EndDate daoT_WorkflowHistory.Set_EndDate_forUPD = DateTime.Now; daoT_WorkflowHistory.S3_Update(); //--- // 完了 if ((string)nextWorkflow["ActionType"] == "End") { // -------------------------------------------------- // 完了の場合(T_WorkflowのEndDate項目を更新) // -------------------------------------------------- // T_WorkflowのUPDATE // -------------------------------------------------- DaoT_Workflow daoT_Workflow = new DaoT_Workflow(this.Dam); // PK daoT_Workflow.PK_WorkflowControlNo = workflowControlNo; // EndDate daoT_Workflow.Set_EndDate_forUPD = DateTime.Now; daoT_Workflow.S3_Update(); // -------------------------------------------------- // 履歴に移動 // -------------------------------------------------- // T_CurrentWorkflow→T_WorkflowHistory // -------------------------------------------------- dao.SQLFileName = "RequestApproval_Move.sql"; dao.SetParameter("WorkflowControlNo", workflowControlNo); dao.ExecInsUpDel_NonQuery(); } // リターン(MailTemplateId) if (nextWorkflow["MailTemplateId"] == DBNull.Value) { return 0; } else { return (int)nextWorkflow["MailTemplateId"]; } }
/// <summary>1件削除処理を実装</summary> /// <param name="parameterValue">引数クラス</param> private void UOC_DeleteRecord(_3TierParameterValue parameterValue) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 _3TierReturnValue returnValue = new _3TierReturnValue(); this.ReturnValue = returnValue; // ↓業務処理----------------------------------------------------- // 共通Dao CmnDao cmnDao = new CmnDao(this.GetDam()); // 検索条件の指定 // AndEqualSearchConditions(主キー foreach (string k in parameterValue.AndEqualSearchConditions.Keys) { // nullチェック(null相当を要検討 if (parameterValue.AndEqualSearchConditions[k] == null) { // == null } else { // != null // 文字列の場合の扱い if (parameterValue.AndEqualSearchConditions[k] is string) { if (!string.IsNullOrEmpty((string)parameterValue.AndEqualSearchConditions[k])) { // パラメタ指定 cmnDao.SetParameter(k, parameterValue.AndEqualSearchConditions[k]); } } else { // パラメタ指定 cmnDao.SetParameter(k, parameterValue.AndEqualSearchConditions[k]); } } } // SQLを設定して cmnDao.SQLFileName = this.DaoClassNameHeader + parameterValue.TableName + this.DaoClassNameFooter + "_" + this.MethodNameHeaderS + this.MethodLabel_Del + this.MethodNameFooterS + ".xml"; // パラメタは指定済み // 削除処理を実行 returnValue.Obj = cmnDao.ExecInsUpDel_NonQuery(); // ↑業務処理----------------------------------------------------- }
/// <summary>業務処理を実装</summary> /// <param name="muParameter">汎用引数クラス</param> private void UOC_Insert(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); this.ReturnValue = muReturn; // ↓業務処理----------------------------------------------------- string companyName = ((string[])(muParameter.Bean))[0]; string phone = ((string[])(muParameter.Bean))[1]; switch ((muParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); cmnDao.SQLFileName = "ShipperInsert.sql"; // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 cmnDao.SetParameter("P2", companyName); cmnDao.SetParameter("P3", phone); // 共通Daoを実行 // 戻り値を設定 muReturn.Bean = cmnDao.ExecInsUpDel_NonQuery().ToString(); break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // パラメタに対して、動的に値を設定する。 genDao.CompanyName = companyName; genDao.Phone = phone; // 自動生成Daoを実行 // 戻り値を設定 muReturn.Bean = genDao.D1_Insert().ToString(); break; default: // 個別Daoを使用する。 string ret = ""; LayerD myDao = new LayerD(this.GetDam()); myDao.Insert(muParameter.ActionType, companyName, phone, out ret); muReturn.Bean = ret; break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <summary>業務処理を実装</summary> /// <param name="testParameter">引数クラス</param> private void UOC_SelectAll_DS(TestParameterValue testParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 TestReturnValue testReturn = new TestReturnValue(); this.ReturnValue = testReturn; // ↓業務処理----------------------------------------------------- DataSet ds = null; switch ((testParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); switch ((testParameter.ActionType.Split('%'))[2]) { case "static": // 静的SQLを指定 cmnDao.SQLText = "SELECT * FROM Shippers"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLText = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><ROOT>SELECT * FROM Shippers</ROOT>"; break; } // 戻り値 ds ds = new DataSet(); // 共通Daoを実行 cmnDao.ExecSelectFill_DS(ds); // 戻り値を設定 testReturn.Obj = ds; break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // 戻り値 ds ds = new DataSet(); ds.Tables.Add(new DataTable()); // 自動生成Daoを実行 genDao.D2_Select(ds.Tables[0]); // 戻り値を設定 testReturn.Obj = ds; break; default: // 個別Daoを使用する。 LayerD myDao = new LayerD(this.GetDam()); myDao.SelectAll_DS(testParameter, testReturn); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(testParameter); }
/// <summary>業務処理を実装</summary> /// <param name="muParameter">汎用引数クラス</param> private void UOC_Delete(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); this.ReturnValue = muReturn; // ↓業務処理----------------------------------------------------- switch ((muParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); switch ((muParameter.ActionType.Split('%'))[2]) { case "static": // 静的SQLを指定 cmnDao.SQLFileName = "ShipperDelete.sql"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLFileName = "ShipperDelete.xml"; break; } // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 cmnDao.SetParameter("P1", muParameter.Bean); // 共通Daoを実行 // 戻り値を設定 muReturn.Bean = cmnDao.ExecInsUpDel_NonQuery().ToString(); break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // パラメタに対して、動的に値を設定する。 genDao.PK_ShipperID = muParameter.Bean; // 自動生成Daoを実行 // 戻り値を設定 muReturn.Bean = genDao.S4_Delete().ToString(); break; default: // 個別Daoを使用する。 string ret = ""; LayerD myDao = new LayerD(this.GetDam()); myDao.Delete(muParameter.ActionType, muParameter.Bean.ToString(), out ret); muReturn.Bean = ret; break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <summary>業務処理を実装</summary> /// <param name="testParameter">引数クラス</param> private void UOC_SelectAll_DSQL(TestParameterValue testParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 TestReturnValue testReturn = new TestReturnValue(); this.ReturnValue = testReturn; // ↓業務処理----------------------------------------------------- switch ((testParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); switch ((testParameter.ActionType.Split('%'))[2]) { case "static": // 静的SQLを指定 cmnDao.SQLFileName = "ShipperSelectOrder.sql"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLFileName = "ShipperSelectOrder.xml"; break; } // ユーザ定義パラメタに対して、動的に値を設定する。 string orderColumn = ""; string orderSequence = ""; if (testParameter.OrderColumn == "c1") { orderColumn = "ShipperID"; } else if (testParameter.OrderColumn == "c2") { orderColumn = "CompanyName"; } else if (testParameter.OrderColumn == "c3") { orderColumn = "Phone"; } else { } if (testParameter.OrderSequence == "A") { orderSequence = "ASC"; } else if (testParameter.OrderSequence == "D") { orderSequence = "DESC"; } else { } // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 cmnDao.SetParameter("P1", "test"); // ユーザ入力は指定しない。 // ※ 動的SQLのVALタグは、前後の空白をつめることが有るので、 // 必要であれば、前後の空白を明示的に指定する必要がある。 cmnDao.SetUserParameter("COLUMN", " " + orderColumn + " "); cmnDao.SetUserParameter("SEQUENCE", " " + orderSequence + " "); // 戻り値 dt DataTable dt = new DataTable(); // 共通Daoを実行 cmnDao.ExecSelectFill_DT(dt); // 自動生成Daoを実行 testReturn.Obj = dt; break; //case "generate": // 自動生成Daoを使用する。 // // 当該SQLなし // break; default: // 個別Daoを使用する。 LayerD myDao = new LayerD(this.GetDam()); myDao.SelectAll_DSQL(testParameter, testReturn); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(testParameter); }
/// <summary>データ件数取得処理を実装</summary> /// <param name="parameterValue">引数クラス</param> private void UOC_SelectCountMethod(_3TierParameterValue parameterValue) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 _3TierReturnValue returnValue = new _3TierReturnValue(); this.ReturnValue = returnValue; // ↓業務処理----------------------------------------------------- // 共通Dao CmnDao cmnDao = new CmnDao(this.GetDam()); // 検索条件の生成&指定 string whereSQL = this.SetSearchConditions(parameterValue, cmnDao); string p = ""; // パラメタ記号 string s = ""; // 囲い記号開始 string e = ""; // 囲い記号終了 string f = ""; // For supporting type casting in PostgreSQL // 囲い文字の選択 if (parameterValue.DBMSType == DbEnum.DBMSType.SQLServer) { p = "@"; s = "["; e = "]"; } //MYSQL and DB2 else if (parameterValue.DBMSType == DbEnum.DBMSType.MySQL || parameterValue.DBMSType == DbEnum.DBMSType.DB2) { p = "@"; s = "\""; e = "\""; } else if (parameterValue.DBMSType == DbEnum.DBMSType.Oracle) { p = ":"; s = "\""; e = "\""; } else if (parameterValue.DBMSType == DbEnum.DBMSType.PstGrS) { p = "@"; f = "::text"; } else { p = "@"; s = "["; e = "]"; } if (parameterValue.DBMSType == DbEnum.DBMSType.PstGrS) { //Set the Query for PostgreSQL database cmnDao.SQLText = string.Format( SELECT_COUNT_POSTGRESQL_TEMPLATE, s + parameterValue.TableName + e, whereSQL) .Replace("_p_", p).Replace("_s_", s).Replace("_e_", e).Replace("_f_", f); } //MYSQL else if (parameterValue.DBMSType == DbEnum.DBMSType.MySQL) { string SQLtext = string.Format( SELECT_COUNT_SQL_TEMPLATE, parameterValue.TableName, whereSQL) .Replace("_p_", p).Replace("_s_", s).Replace("_e_", e).Replace("_f_", f).Replace("\"", string.Empty); cmnDao.SQLText = SQLtext; } else { // SQLを設定して And DB2 cmnDao.SQLText = string.Format( SELECT_COUNT_SQL_TEMPLATE, s + parameterValue.TableName + e, whereSQL) .Replace("_p_", p).Replace("_s_", s).Replace("_e_", e).Replace("_f_", f); } // パラメタは指定済み // データ件数を取得 returnValue.Obj = cmnDao.ExecSelectScalar(); // ↑業務処理----------------------------------------------------- }
/// <summary>業務処理を実装</summary> /// <param name="testParameter">引数クラス</param> private void UOC_Insert(TestParameterValue testParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 TestReturnValue testReturn = new TestReturnValue(); this.ReturnValue = testReturn; // ↓業務処理----------------------------------------------------- switch ((testParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); cmnDao.SQLFileName = "ShipperInsert.sql"; // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 cmnDao.SetParameter("P2", testParameter.CompanyName); cmnDao.SetParameter("P3", testParameter.Phone); // 共通Daoを実行 // 戻り値を設定 testReturn.Obj = cmnDao.ExecInsUpDel_NonQuery(); break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // パラメタに対して、動的に値を設定する。 genDao.CompanyName = testParameter.CompanyName; genDao.Phone = testParameter.Phone; // 自動生成Daoを実行 // 戻り値を設定 testReturn.Obj = genDao.D1_Insert(); break; default: // 個別Daoを使用する。 LayerD myDao = new LayerD(this.GetDam()); myDao.Insert(testParameter, testReturn); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(testParameter); }
/// <summary>1件追加処理を実装</summary> /// <param name="parameterValue">引数クラス</param> private void UOC_InsertRecord(_3TierParameterValue parameterValue) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 _3TierReturnValue returnValue = new _3TierReturnValue(); this.ReturnValue = returnValue; // 関連チェック処理 this.UOC_RelatedCheck(parameterValue); // ↓業務処理----------------------------------------------------- // 共通Dao CmnDao cmnDao = new CmnDao(this.GetDam()); // 検索条件の指定 // 追加値 // InsertUpdateValues foreach (string k in parameterValue.InsertUpdateValues.Keys) { // nullチェック(null相当を要検討 if (parameterValue.InsertUpdateValues[k] == null) { // == null } else { // != null // 文字列の場合の扱い if (parameterValue.InsertUpdateValues[k] is string) { if (!string.IsNullOrEmpty((string)parameterValue.InsertUpdateValues[k])) { // パラメタ指定 cmnDao.SetParameter(k, parameterValue.InsertUpdateValues[k]); } } else { // パラメタ指定 cmnDao.SetParameter(k, parameterValue.InsertUpdateValues[k]); } } } // SQLを設定して cmnDao.SQLFileName = this.DaoClassNameHeader + parameterValue.TableName + this.DaoClassNameFooter + "_" + this.MethodNameHeaderD + this.MethodLabel_Ins + this.MethodNameFooterD + ".xml"; // パラメタは指定済み // 追加処理を実行 returnValue.Obj = cmnDao.ExecInsUpDel_NonQuery(); // ↑業務処理----------------------------------------------------- }
/// <summary>業務処理を実装</summary> /// <param name="testParameter">引数クラス</param> private void UOC_Delete(TestParameterValue testParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 TestReturnValue testReturn = new TestReturnValue(); this.ReturnValue = testReturn; // ↓業務処理----------------------------------------------------- switch ((testParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); switch ((testParameter.ActionType.Split('%'))[2]) { case "static": // 静的SQLを指定 cmnDao.SQLFileName = "ShipperDelete.sql"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLFileName = "ShipperDelete.xml"; break; } // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 cmnDao.SetParameter("P1", testParameter.ShipperID); // 共通Daoを実行 // 戻り値を設定 testReturn.Obj = cmnDao.ExecInsUpDel_NonQuery(); break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // パラメタに対して、動的に値を設定する。 genDao.PK_ShipperID = testParameter.ShipperID; // 自動生成Daoを実行 // 戻り値を設定 testReturn.Obj = genDao.S4_Delete(); break; default: // 個別Daoを使用する。 LayerD myDao = new LayerD(this.GetDam()); myDao.Delete(testParameter, testReturn); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(testParameter); }
/// <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(); // ↑業務処理----------------------------------------------------- }