/// <summary>業務処理を実装</summary> /// <param name="muParameter">汎用引数クラス</param> private void UOC_メソッド名(MuParameterValue muParameter) { //メソッド引数にBaseParameterValueの派生の型を定義可能。 // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); muReturn.Bean = new Informations(""); this.ReturnValue = muReturn; // 引数をアンマーシャル DataTable dt = DataContractHelper.ToDataTable(((Informations)muParameter.Bean).DicList); // ↓業務処理----------------------------------------------------- // 個別Dao LayerD_mu myDao = new LayerD_mu(this.GetDam()); //myDao.xxxx(muParameter.ActionType, dtts, muReturn); // 共通Dao CmnDao cmnDao = new CmnDao(this.GetDam()); cmnDao.ExecSelectScalar(); // 戻り値をマーシャリングして設定 muReturn.Bean = new Informations(""); muReturn.Bean = new Informations(DataContractHelper.ToList(dt)); // ↑業務処理----------------------------------------------------- }
/// <summary>Silverlight&汎用DTOのテスト(行追加)</summary> /// <param name="muParameter">引数クラス</param> protected void UOC_AddRow(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); this.ReturnValue = muReturn; // 引数をアンマーシャル DTTables dtts_in = DTTables.StringToDTTables(muParameter.Value); DTTable dtt_in = dtts_in[0]; DTRow dtrow_in = null;// dtt_in.Rows[0]; //DTTables dtts_out = null; //DTTable dtt_out = null; //DTRow dtrow_out = null; // 1行追加 dtrow_in = dtt_in.Rows.AddNew(); dtrow_in["boolVal"] = true; dtrow_in["charVal"] = 'z'; dtrow_in["dateVal"] = new DateTime(1946, 12, 11, 10, 20, 30, 444); dtrow_in["decimalVal"] = 99999; dtrow_in["doubleVal"] = 9.99D; dtrow_in["shortVal"] = 900; dtrow_in["intVal"] = 9000000; dtrow_in["longVal"] = 9000000000000; dtrow_in["singleVal"] = 9.9f; dtrow_in["stringVal"] = "test" + dtt_in.Rows.Count.ToString(); // 戻り値をマーシャリングして設定 ((MuReturnValue)this.ReturnValue).Value = DTTables.DTTablesToString(dtts_in); }
/// <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_mu myDao = new LayerD_mu(this.GetDam()); myDao.SelectCount(muParameter.ActionType, out ret); muReturn.Bean = ret; break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <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_mu myDao = new LayerD_mu(this.GetDam()); myDao.Insert(muParameter.ActionType, companyName, phone, out ret); muReturn.Bean = ret; break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <summary>認証情報を返すメソッド</summary> /// <param name="parameter">引数クラス</param> public void UOC_GetFormsAuthInfo(MuParameterValue parameter) { // 戻り値クラスを生成 MuReturnValue muReturn = new MuReturnValue(); // 認証情報を返す this.ReturnValue = muReturn; muReturn.Value = HttpContext.Current.User.Identity.Name; }
/// <summary>ロールバックのテスト</summary> /// <param name="muParameter">汎用引数クラス</param> private void TestRollback(MuParameterValue muParameter) { switch ((muParameter.ActionType.Split('%'))[3]) { case "Business": // 戻り値が見えるか確認する。 ((MuReturnValue)this.ReturnValue).Value = "戻り値が戻るか?"; // 業務例外のスロー throw new BusinessApplicationException( "ロールバックのテスト", "ロールバックのテスト", "エラー情報"); //break; // 到達できないためコメントアウト case "System": // 戻り値が見えるか確認する。 ((MuReturnValue)this.ReturnValue).Value = "戻り値が戻るか?"; // システム例外のスロー throw new BusinessSystemException( "ロールバックのテスト", "ロールバックのテスト"); //break; // 到達できないためコメントアウト case "Other": // 戻り値が見えるか確認する。 ((MuReturnValue)this.ReturnValue).Value = "戻り値が戻るか?"; // その他、一般的な例外のスロー throw new Exception("ロールバックのテスト"); //break; // 到達できないためコメントアウト case "Other-Business": // 戻り値が見えるか確認する。 ((MuReturnValue)this.ReturnValue).Value = "戻り値が戻るか?"; // その他、一般的な例外(業務例外へ振り替え)のスロー throw new Exception("Other-Business"); //break; // 到達できないためコメントアウト case "Other-System": // 戻り値が見えるか確認する。 ((MuReturnValue)this.ReturnValue).Value = "戻り値が戻るか?"; // その他、一般的な例外(システム例外へ振り替え)のスロー throw new Exception("Other-System"); //break; // 到達できないためコメントアウト } }
/// <summary>業務処理を実装</summary> /// <param name="muParameter">汎用引数クラス</param> private void UOC_メソッド名(MuParameterValue muParameter) { //メソッド引数にBaseParameterValueの派生の型を定義可能。 // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); this.ReturnValue = muReturn; // 引数をアンマーシャル DTTables dtts_in = DTTables.StringToDTTables(muParameter.Value); DTTable dtt_in = dtts_in[0]; DTRow dtrow_in = dtt_in.Rows[0]; DTTables dtts_out = null; DTTable dtt_out = null; DTRow dtrow_out = null; // ↓業務処理----------------------------------------------------- // 個別Dao LayerD myDao = new LayerD(this.GetDam()); //myDao.xxxx(muParameter.ActionType, dtts, muReturn); // 共通Dao CmnDao cmnDao = new CmnDao(this.GetDam()); cmnDao.ExecSelectScalar(); // 戻り値をマーシャリングして設定 dtts_out = new DTTables(); dtt_out = new DTTable("ret"); dtt_out.Cols.Add(new DTColumn("ret", DTType.String)); dtrow_out = dtt_out.Rows.AddNew(); dtrow_out["ret"] = "戻り値"; dtts_out.Add(dtt_out); muReturn.Value = DTTables.DTTablesToString(dtts_out); // ↑業務処理----------------------------------------------------- }
/// <summary>業務処理を実装</summary> /// <param name="muParameter">汎用引数クラス</param> private void UOC_Select(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); muReturn.Bean = new Informations(""); this.ReturnValue = muReturn; // 引数をアンマーシャル string shipperID = ((Informations)muParameter.Bean).Str; // ↓業務処理----------------------------------------------------- DataTable dt = null; Dictionary <string, string> dic = 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", shipperID); // 戻り値 dt dt = new DataTable("rtn"); // 共通Daoを実行 cmnDao.ExecSelectFill_DT(dt); // 戻り値を設定 dic = new Dictionary <string, string>(); dic["ShipperID"] = dt.Rows[0].ItemArray.GetValue(0).ToString(); dic["CompanyName"] = (string)dt.Rows[0].ItemArray.GetValue(1); dic["Phone"] = (string)dt.Rows[0].ItemArray.GetValue(2); muReturn.Bean = new Informations(dic); break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // パラメタに対して、動的に値を設定する。 genDao.PK_ShipperID = shipperID; // 戻り値 dt dt = new DataTable("rtn"); // 自動生成Daoを実行 genDao.S2_Select(dt); // 戻り値を設定 dic = new Dictionary <string, string>(); dic["ShipperID"] = dt.Rows[0].ItemArray.GetValue(0).ToString(); dic["CompanyName"] = (string)dt.Rows[0].ItemArray.GetValue(1); dic["Phone"] = (string)dt.Rows[0].ItemArray.GetValue(2); muReturn.Bean = new Informations(dic); break; default: // 個別Daoを使用する。 string companyName; string phone; // 個別Daoを実行 LayerD_mu myDao = new LayerD_mu(this.GetDam()); myDao.Select(muParameter.ActionType, shipperID, out companyName, out phone); // 戻り値を設定 dic = new Dictionary <string, string>(); dic["CompanyName"] = companyName; dic["Phone"] = phone; muReturn.Bean = new Informations(dic); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <summary>業務処理を実装</summary> /// <param name="muParameter">汎用引数クラス</param> private void UOC_SelectAll_DSQL(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); muReturn.Bean = new Informations(""); this.ReturnValue = muReturn; // 引数をアンマーシャル Dictionary <string, string> dic = ((Informations)muParameter.Bean).Dictionary; // ↓業務処理----------------------------------------------------- DataTable dt = 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 = "ShipperSelectOrder.sql"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLFileName = "ShipperSelectOrder.xml"; break; } // ユーザ定義パラメタに対して、動的に値を設定する。 string orderColumn = ""; string orderSequence = ""; if (dic["OrderColumn"].ToString() == "c1") { orderColumn = "ShipperID"; } else if (dic["OrderColumn"].ToString() == "c2") { orderColumn = "CompanyName"; } else if (dic["OrderColumn"].ToString() == "c3") { orderColumn = "Phone"; } else { } if (dic["OrderSequence"].ToString() == "A") { orderSequence = "ASC"; } else if (dic["OrderSequence"].ToString() == "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); // 戻り値をマーシャリングして設定 muReturn.Bean = new Informations(DataContractHelper.ToList(dt)); break; //case "generate": // 自動生成Daoを使用する。 // // 当該SQLなし // break; default: // 個別Daoを使用する。 // 個別Daoを実行 LayerD_mu myDao = new LayerD_mu(this.GetDam()); myDao.SelectAll_DSQL( muParameter.ActionType, dic["OrderColumn"].ToString(), dic["OrderSequence"].ToString(), out dt); // 戻り値をマーシャリングして設定 muReturn.Bean = new Informations(DataContractHelper.ToList(dt)); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <summary>業務処理を実装</summary> /// <param name="muParameter">汎用引数クラス</param> private void UOC_SelectAll_DR(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); muReturn.Bean = new Informations(""); this.ReturnValue = muReturn; // ↓業務処理----------------------------------------------------- DataTable dt = 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(); // 戻り値をマーシャリングして設定 muReturn.Bean = new Informations(DataContractHelper.ToList(dt)); break; case "generate": // 自動生成Daoを使用する。 // DRのI/Fなし // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // 戻り値 dt dt = new DataTable("rtn"); // 自動生成Daoを実行 genDao.D2_Select(dt); // 戻り値をマーシャリングして設定 muReturn.Bean = new Informations(DataContractHelper.ToList(dt)); break; default: // 個別Daoを使用する。 // 個別Daoを実行 LayerD_mu myDao = new LayerD_mu(this.GetDam()); myDao.SelectAll_DR(muParameter.ActionType, out dt); // 戻り値をマーシャリングして設定 muReturn.Bean = new Informations(DataContractHelper.ToList(dt)); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <summary>業務処理を実装</summary> /// <param name="muParameter">汎用引数クラス</param> private void UOC_SelectAll_DS(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); muReturn.Bean = new Informations(""); this.ReturnValue = muReturn; // ↓業務処理----------------------------------------------------- DataSet ds = 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); // 戻り値をマーシャリングして設定 muReturn.Bean = new Informations(DataContractHelper.ToList(ds.Tables[0])); 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]); // 戻り値をマーシャリングして設定 muReturn.Bean = new Informations(DataContractHelper.ToList(ds.Tables[0])); break; default: // 個別Daoを使用する。 // 個別Daoを実行 LayerD_mu myDao = new LayerD_mu(this.GetDam()); myDao.SelectAll_DS(muParameter.ActionType, out ds); // 戻り値をマーシャリングして設定 muReturn.Bean = new Informations(DataContractHelper.ToList(ds.Tables[0])); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <summary>WCF サービス本体</summary> /// <param name="param">REST 形式で送信された引数(ParamDataContract)</param> /// <returns>REST 形式で送信される戻り値(ReturnDataContract)</returns> private ReturnDataContract Call(ParamDataContract param) { // ステータス string status = "-"; // 戻り値 ReturnDataContract retValue = new ReturnDataContract(); #region 呼出し制御関係の変数 // アセンブリ名 string assemblyName = ""; // クラス名 string className = ""; #endregion #region 引数・戻り値関係の変数 // 引数・戻り値の.NETオブジェクト MuParameterValue muParameterValue = null; MuReturnValue muReturnValue = null; // エラー情報(ログ出力用) string errorType = ""; // 2009/09/15-この行 string errorMessageID = ""; string errorMessage = ""; string errorToString = ""; #endregion try { // 開始ログの出力 LogIF.InfoLog("SERVICE-IF", FxLiteral.SIF_STATUS_START); #region 前解決 // ★ status = FxLiteral.SIF_STATUS_NAME_SERVICE; // 名前解決(インプロセス) ServiceForRt.IPR_NS.NameResolution(param.ServiceName, out assemblyName, out className); #endregion #region 引数の.NETオブジェクト化(UOC) // ★ status = FxLiteral.SIF_STATUS_DESERIALIZE; // ★★ 引数の.NETオブジェクト化をUOCする(必要に応じて)。 // 引数文字列の.NETオブジェクト化 // クライアントの IP アドレス string IpAddress = string.Empty; // クライアントの IP アドレスを取得 OperationContext context = OperationContext.Current; if (context.IncomingMessageProperties.ContainsKey(RemoteEndpointMessageProperty.Name) == true) { RemoteEndpointMessageProperty property = (RemoteEndpointMessageProperty)context.IncomingMessageProperties[RemoteEndpointMessageProperty.Name]; IpAddress = property.Address; } // ParamDataContractを使用して初期化するなど muParameterValue = new MuParameterValue( param.ScreenId == null ? string.Empty : param.ScreenId, // 画面名 param.ControlId == null ? string.Empty : param.ControlId, // ボタン名 param.MethodName == null ? string.Empty : param.MethodName, // メソッド名 param.ActionType == null ? string.Empty : param.ActionType, // アクションタイプ new MyUserInfo(param.UserName, IpAddress)); // ParameterValueを引数のBeanフィールドに設定 muParameterValue.Bean = param.Info; // 引数クラスをパラメタ セットに格納 object[] paramSet = new object[] { muParameterValue, DbEnum.IsolationLevelEnum.User }; #endregion #region 認証処理(UOC) // ★ status = FxLiteral.SIF_STATUS_AUTHENTICATION; //// ★★ 認証が通っているかどうか確認する。 //if (!HttpContext.Current.Request.IsAuthenticated) //{ // throw new BusinessSystemException("Authentication", "認証されていません。"); //} // ★★ コンテキストの情報を使用するなどして // 認証処理をUOCする(必要に応じて)。 //// 認証チケットの復号化 //string[] authTicket = (string[])BinarySerialize.BytesToObject( // CustomEncode.FromBase64String( // SymmetricCryptography.DecryptString( // context, GetConfigParameter.GetConfigValue("private-key"), // EnumSymmetricAlgorithm.TripleDESCryptoServiceProvider))); //// ユーザIDの設定 //muParameterValue.User.UserName = authTicket[0]; // 認証チケットの整合性を確認 // Forms認証では、machinekeyを使用している。 // 必要に応じて認証サービス側も作り変える。 //// B層・D層呼出し //// タイムスタンプのチェックと、更新 //// スライディング・タイムアウトの実装、 //// 必要であればアカウントの検証も実施 //BaseReturnValue _returnValue = (BaseReturnValue)Latebind.InvokeMethod( // "xxxx", "yyyy", // FxLiteral.TRANSMISSION_INPROCESS_METHOD_NAME, // new object[] { new AuthParameterValue("-", "-", "zzzz", "", // muParameterValue.User, authTicket[1]), // DbEnum.IsolationLevelEnum.User }); //if (_returnValue.ErrorFlag) //{ // // 認証エラー // throw new BusinessSystemException("xxxx", "認証チケットが不正か、タイムアウトです。"); //} #endregion #region B層・D層呼出し // ★ status = FxLiteral.SIF_STATUS_INVOKE; try { // B層・D層呼出し //// DLL名も指定するパターン(別DLLに含まれる) //muReturnValue = (MuReturnValue)Latebind.InvokeMethod( // assemblyName, className, FxLiteral.TRANSMISSION_INPROCESS_METHOD_NAME, paramSet); // DLL名は指定しないパターン(ExecutingAssemblyに含まれる) Assembly asm = Assembly.GetExecutingAssembly(); // DLL名は指定しないパターンでの例外処理 Type t = asm.GetType(className); if (t == null) { throw new BusinessSystemException("NoLBTypeInExecutingAssembly", string.Format("{0}クラスがExecutingAssemblyに存在しません。", className)); } object o = Activator.CreateInstance(t); muReturnValue = (MuReturnValue)Latebind.InvokeMethod(o, FxLiteral.TRANSMISSION_INPROCESS_METHOD_NAME, paramSet); } catch (System.Reflection.TargetInvocationException rtEx) { // InnerExceptionを投げなおす。 throw rtEx.InnerException; } #endregion #region 戻り値の文字列化 // ★ status = FxLiteral.SIF_STATUS_SERIALIZE; if (muReturnValue.ErrorFlag) { // エラー情報を設定する。 ErrorInfo errorInfo = new ErrorInfo(); // 業務例外 errorInfo.ErrorType = FxEnum.ErrorType.BusinessApplicationException.ToString(); errorInfo.MessageID = muReturnValue.ErrorMessageID; errorInfo.Message = muReturnValue.ErrorMessage; errorInfo.Information = muReturnValue.ErrorInfo; // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.BusinessApplicationException.ToString(); // 2009/09/15-この行 errorMessageID = muReturnValue.ErrorMessageID; errorMessage = muReturnValue.ErrorMessage; errorToString = muReturnValue.ErrorInfo; // エラー情報を戻す。 retValue.Error = errorInfo; } #endregion // ★ status = ""; // 戻り値を設定 if (muReturnValue.Bean != null && muReturnValue.Bean is Informations) { // 正規の戻り値の場合 retValue.Info = (Informations)muReturnValue.Bean; } else { //// 不正な戻り値の場合 //retValue.Info = new Informations(""); throw new Exception("不正な戻り値"); } // 戻り値を返す。 return(retValue); } //catch (BusinessApplicationException baEx) //{ // ここには来ない↑ //} catch (BusinessSystemException bsEx) { // エラー情報を設定する。 ErrorInfo errorInfo = new ErrorInfo(); // システム例外 errorInfo.ErrorType = FxEnum.ErrorType.BusinessSystemException.ToString(); errorInfo.MessageID = bsEx.messageID; errorInfo.Message = bsEx.Message; errorInfo.Information = string.Empty; // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.BusinessSystemException.ToString(); // 2009/09/15-この行 errorMessageID = bsEx.messageID; errorMessage = bsEx.Message; errorToString = bsEx.ToString(); // エラー情報を戻す。 retValue.Error = errorInfo; return(retValue); } catch (FrameworkException fxEx) { // エラー情報を設定する。 ErrorInfo errorInfo = new ErrorInfo(); // フレームワーク例外 // ★ インナーエクセプション情報は消失 errorInfo.ErrorType = FxEnum.ErrorType.FrameworkException.ToString(); errorInfo.MessageID = fxEx.messageID; errorInfo.Message = fxEx.Message; errorInfo.Information = string.Empty; // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.FrameworkException.ToString(); // 2009/09/15-この行 errorMessageID = fxEx.messageID; errorMessage = fxEx.Message; errorToString = fxEx.ToString(); // エラー情報を戻す。 retValue.Error = errorInfo; return(retValue); } catch (Exception ex) { // エラー情報を設定する。 ErrorInfo errorInfo = new ErrorInfo(); // フレームワーク例外 // ★ インナーエクセプション情報は消失 errorInfo.ErrorType = FxEnum.ErrorType.ElseException.ToString(); errorInfo.MessageID = "-"; errorInfo.Message = ex.ToString(); errorInfo.Information = string.Empty; // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.ElseException.ToString(); // 2009/09/15-この行 errorMessageID = "-"; errorMessage = ex.Message; // どちらを戻すべきか? // Muの場合は、ToStringがデフォ //errorToString = ex.Message; errorToString = ex.ToString(); // エラー情報を戻す。 retValue.Error = errorInfo; return(retValue); //throw; // コメントアウト } finally { // 用途によってSessionを解放するかどうかを検討。 //// Sessionステートレス //Session.Clear(); //Session.Abandon(); // 終了ログの出力 if (status == "") { // 終了ログ出力 LogIF.InfoLog("SERVICE-IF", "正常終了"); } else { // 終了ログ出力 LogIF.ErrorLog("SERVICE-IF", "異常終了" + ":" + status + "\r\n" + "エラー タイプ:" + errorType + "\r\n" // 2009/09/15-この行 + "エラー メッセージID:" + errorMessageID + "\r\n" + "エラー メッセージ:" + errorMessage + "\r\n" + errorToString + "\r\n"); } } }
/// <summary>業務処理を実装</summary> /// <param name="muParameter">汎用引数クラス</param> private void UOC_Insert(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); this.ReturnValue = muReturn; // 引数をアンマーシャル DTTables dtts_in = DTTables.StringToDTTables(muParameter.Value); DTTable dtt_in = dtts_in[0]; DTRow dtrow_in = dtt_in.Rows[0]; //DTTables dtts_out = null; //DTTable dtt_out = null; //DTRow dtrow_out = null; // ↓業務処理----------------------------------------------------- switch ((muParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); cmnDao.SQLFileName = "ShipperInsert.sql"; // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 cmnDao.SetParameter("P2", dtrow_in["CompanyName"]); cmnDao.SetParameter("P3", dtrow_in["Phone"]); // 共通Daoを実行 // 戻り値を設定 muReturn.Value = cmnDao.ExecInsUpDel_NonQuery().ToString(); break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // パラメタに対して、動的に値を設定する。 genDao.CompanyName = dtrow_in["CompanyName"]; genDao.Phone = dtrow_in["Phone"]; // 自動生成Daoを実行 // 戻り値を設定 muReturn.Value = genDao.D1_Insert().ToString(); break; default: // 個別Daoを使用する。 // 個別Daoを実行 // 戻り値を設定 LayerD myDao = new LayerD(this.GetDam()); myDao.Insert(muParameter.ActionType, (string)dtrow_in["CompanyName"], (string)dtrow_in["Phone"], out muReturn.Value); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <summary>業務処理を実装</summary> /// <param name="muParameter">汎用引数クラス</param> private void UOC_Delete(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); muReturn.Bean = new Informations(""); this.ReturnValue = muReturn; // 引数をアンマーシャル string shipperID = ((Informations)muParameter.Bean).Str; // ↓業務処理----------------------------------------------------- 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", shipperID); // 共通Daoを実行 // 戻り値を設定 muReturn.Bean = new Informations(cmnDao.ExecInsUpDel_NonQuery().ToString()); break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // パラメタに対して、動的に値を設定する。 genDao.PK_ShipperID = shipperID; // 自動生成Daoを実行 // 戻り値を設定 muReturn.Bean = new Informations(genDao.S4_Delete().ToString()); break; default: // 個別Daoを使用する。 // 個別Daoを実行 string ret = ""; LayerD_mu myDao = new LayerD_mu(this.GetDam()); myDao.Delete(muParameter.ActionType, shipperID, out ret); // 戻り値を設定 muReturn.Bean = new Informations(ret); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <summary>業務処理を実装</summary> /// <param name="muParameter">汎用引数クラス</param> private void UOC_SelectCount(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); this.ReturnValue = muReturn; // 引数をアンマーシャル DTTables dtts_in = DTTables.StringToDTTables(muParameter.Value); DTTable dtt_in = dtts_in[0]; //DTRow dtrow_in = dtt_in.Rows[0]; //DTTables dtts_out = null; //DTTable dtt_out = null; //DTRow dtrow_out = 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 = "ShipperCount.sql"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLFileName = "ShipperCount.xml"; break; } // 共通Daoを実行 // 戻り値を設定 muReturn.Value = cmnDao.ExecSelectScalar().ToString(); break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // 共通Daoを実行 // 戻り値を設定 muReturn.Value = genDao.D5_SelCnt().ToString(); break; default: // 個別Daoを使用する。 // 個別Daoを実行 string ret = ""; LayerD myDao = new LayerD(this.GetDam()); myDao.SelectCount(muParameter.ActionType, out ret); // 戻り値を設定 muReturn.Value = ret; break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <summary>Soap & Bean 個別Soap Webメソッドの共通部</summary> /// <param name="context">コンテキスト</param> /// <param name="methodName">メソッド名</param> /// <param name="parameterValue">引数Bean(個別・・・サブ)</param> /// <param name="returnValue">戻り値Bean(個別・・・サブ)</param> /// <returns>返すべきエラーの情報</returns> private string Call(ref string context, string serviceName, string methodName, string actionType, object parameterValue, out object returnValue) { // ステータス string status = "-"; // 初期化のため returnValue = ""; #region 呼出し制御関係の変数 // アセンブリ名 string assemblyName = ""; // クラス名 string className = ""; #endregion #region 引数・戻り値関係の変数 // 引数・戻り値の.NETオブジェクト MuParameterValue muParameterValue = null; MuReturnValue muReturnValue = null; // エラー情報(XMLフォーマット) XmlDocument wsErrorInfo = new XmlDocument(); XmlElement wsErrorRoot = null; XmlElement wsErrorItem = null; // エラー情報(ログ出力用) string errorType = ""; // 2009/09/15-この行 string errorMessageID = ""; string errorMessage = ""; string errorToString = ""; #endregion try { // 開始ログの出力 LogIF.InfoLog("SERVICE-IF", FxLiteral.SIF_STATUS_START); #region 前解決 // ★ status = FxLiteral.SIF_STATUS_NAME_SERVICE; // 名前解決(インプロセス) ServiceForSb.IPR_NS.NameResolution(serviceName, out assemblyName, out className); #endregion #region 引数の.NETオブジェクト化(UOC) // ★ status = FxLiteral.SIF_STATUS_DESERIALIZE; // ★★ 引数の.NETオブジェクト化をUOCする(必要に応じて)。 // 引数文字列の.NETオブジェクト化 // string[] cmnParameterValueを使用して初期化するなど muParameterValue = new MuParameterValue( "", //cmnParameterValue[0], // 画面名 "", //cmnParameterValue[1], // ボタン名 methodName, //cmnParameterValue[2], // メソッド名 actionType, //cmnParameterValue[3], // アクションタイプ new MyUserInfo(context, HttpContext.Current.Request.UserHostAddress)); // parameterValueを引数の文字列フィールドに設定 muParameterValue.Bean = parameterValue; // 引数クラスをパラメタ セットに格納 object[] paramSet = new object[] { muParameterValue, DbEnum.IsolationLevelEnum.User }; #endregion #region 認証処理(UOC) // ★ status = FxLiteral.SIF_STATUS_AUTHENTICATION; string access_token = (string)context; if (!string.IsNullOrEmpty(access_token)) { string sub = ""; List <string> roles = null; List <string> scopes = null; JObject jobj = null; if (JwtToken.Verify(access_token, out sub, out roles, out scopes, out jobj)) { // 認証成功 Debug.WriteLine("認証成功"); } else { // 認証失敗(認証必須ならエラーにする。 } } else { // 認証失敗(認証必須ならエラーにする。 } #endregion #region B層・D層呼出し // ★ status = FxLiteral.SIF_STATUS_INVOKE; try { // B層・D層呼出し //// DLL名も指定するパターン(別DLLに含まれる) //muReturnValue = (MuReturnValue)Latebind.InvokeMethod( // assemblyName, className, FxLiteral.TRANSMISSION_INPROCESS_METHOD_NAME, paramSet); // DLL名は指定しないパターン(ExecutingAssemblyに含まれる) Assembly asm = Assembly.GetExecutingAssembly(); // DLL名は指定しないパターンでの例外処理 Type t = asm.GetType(className); if (t == null) { throw new BusinessSystemException("NoLBTypeInExecutingAssembly", string.Format("{0}クラスがExecutingAssemblyに存在しません。", className)); } object o = Activator.CreateInstance(t); muReturnValue = (MuReturnValue)Latebind.InvokeMethod(o, FxLiteral.TRANSMISSION_INPROCESS_METHOD_NAME, paramSet); } catch (System.Reflection.TargetInvocationException rtEx) { // InnerExceptionを投げなおす。 throw rtEx.InnerException; } #endregion #region 戻り値 // ★ status = FxLiteral.SIF_STATUS_SERIALIZE; returnValue = muReturnValue.Bean; if (muReturnValue.ErrorFlag) { // エラー情報を設定する。 wsErrorRoot = wsErrorInfo.CreateElement("ErrorInfo"); wsErrorInfo.AppendChild(wsErrorRoot); // 業務例外 wsErrorItem = wsErrorInfo.CreateElement("ErrorType"); wsErrorItem.InnerText = FxEnum.ErrorType.BusinessApplicationException.ToString(); wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("MessageID"); wsErrorItem.InnerText = muReturnValue.ErrorMessageID; wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("Message"); wsErrorItem.InnerText = muReturnValue.ErrorMessage; wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("Information"); wsErrorItem.InnerText = muReturnValue.ErrorInfo; wsErrorRoot.AppendChild(wsErrorItem); // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.BusinessApplicationException.ToString(); // 2009/09/15-この行 errorMessageID = muReturnValue.ErrorMessageID; errorMessage = muReturnValue.ErrorMessage; errorToString = muReturnValue.ErrorInfo; // エラー情報を戻す。 return(wsErrorInfo.InnerXml); } #endregion // ★ status = ""; // 戻り値を返す。 return(""); } //catch (BusinessApplicationException baEx) //{ // ここには来ない↑ //} catch (BusinessSystemException bsEx) { // エラー情報を設定する。 wsErrorRoot = wsErrorInfo.CreateElement("ErrorInfo"); wsErrorInfo.AppendChild(wsErrorRoot); // システム例外 wsErrorItem = wsErrorInfo.CreateElement("ErrorType"); wsErrorItem.InnerText = FxEnum.ErrorType.BusinessSystemException.ToString(); wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("MessageID"); wsErrorItem.InnerText = bsEx.messageID; wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("Message"); wsErrorItem.InnerText = bsEx.Message; wsErrorRoot.AppendChild(wsErrorItem); // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.BusinessSystemException.ToString(); // 2009/09/15-この行 errorMessageID = bsEx.messageID; errorMessage = bsEx.Message; errorToString = bsEx.ToString(); // エラー情報を戻す。 return(wsErrorInfo.InnerXml); } catch (FrameworkException fxEx) { // エラー情報を設定する。 wsErrorRoot = wsErrorInfo.CreateElement("ErrorInfo"); wsErrorInfo.AppendChild(wsErrorRoot); // フレームワーク例外 // ★ インナーエクセプション情報は消失 wsErrorItem = wsErrorInfo.CreateElement("ErrorType"); wsErrorItem.InnerText = FxEnum.ErrorType.FrameworkException.ToString(); wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("MessageID"); wsErrorItem.InnerText = fxEx.messageID; wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("Message"); wsErrorItem.InnerText = fxEx.Message; wsErrorRoot.AppendChild(wsErrorItem); // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.FrameworkException.ToString(); // 2009/09/15-この行 errorMessageID = fxEx.messageID; errorMessage = fxEx.Message; errorToString = fxEx.ToString(); // エラー情報を戻す。 return(wsErrorInfo.InnerXml); } catch (Exception ex) { // エラー情報を設定する。 wsErrorRoot = wsErrorInfo.CreateElement("ErrorInfo"); wsErrorInfo.AppendChild(wsErrorRoot); // フレームワーク例外 // ★ インナーエクセプション情報は消失 wsErrorItem = wsErrorInfo.CreateElement("ErrorType"); wsErrorItem.InnerText = FxEnum.ErrorType.ElseException.ToString(); wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("MessageID"); wsErrorItem.InnerText = "-"; wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("Message"); wsErrorItem.InnerText = ex.ToString(); wsErrorRoot.AppendChild(wsErrorItem); // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.ElseException.ToString(); // 2009/09/15-この行 errorMessageID = "-"; errorMessage = ex.Message; // どちらを戻すべきか? // Muの場合は、Messageがデフォ errorToString = ex.Message; //errorToString = ex.ToString(); // エラー情報を戻す。 return(wsErrorInfo.InnerXml); //throw; // コメントアウト } finally { // 用途によってSessionを解放するかどうかを検討。 //// Sessionステートレス //Session.Clear(); //Session.Abandon(); // 終了ログの出力 if (status == "") { // 終了ログ出力 LogIF.InfoLog("SERVICE-IF", "正常終了"); } else { // 終了ログ出力 LogIF.ErrorLog("SERVICE-IF", "異常終了" + ":" + status + "\r\n" + "エラー タイプ:" + errorType + "\r\n" // 2009/09/15-この行 + "エラー メッセージID:" + errorMessageID + "\r\n" + "エラー メッセージ:" + errorMessage + "\r\n" + errorToString + "\r\n"); } } }
/// <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_mu myDao = new LayerD_mu(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_mu myDao = new LayerD_mu(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>業務処理を実装</summary> /// <param name="muParameter">汎用引数クラス</param> private void UOC_Select(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); this.ReturnValue = muReturn; // 引数をアンマーシャル //DTTables dtts_in = Marshalling.StringToDTTables(muParameter.Value); //DTTable dtt_in = dtts_in[0]; //DTRow dtrow_in = dtt_in.Rows[0]; DTTables dtts_out = null; DTTable dtt_out = null; DTRow dtrow_out = null; // ↓業務処理----------------------------------------------------- DataTable dt = 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.Value); // 戻り値 dt dt = new DataTable("rtn"); // 共通Daoを実行 cmnDao.ExecSelectFill_DT(dt); // キャストの対策コードを挿入 dtt_out = new DTTable("ret"); dtt_out.Cols.Add(new DTColumn("ShipperID", DTType.Int32)); dtt_out.Cols.Add(new DTColumn("CompanyName", DTType.String)); dtt_out.Cols.Add(new DTColumn("Phone", DTType.String)); dtrow_out = dtt_out.Rows.AddNew(); // ・SQLの場合、ShipperIDのintがInt32型にマップされる。 // ・ODPの場合、ShipperIDのNUMBERがInt64型にマップされる。 // ・DB2の場合、ShipperIDのDECIMALがxxx型にマップされる。 if (dt.Rows[0].ItemArray.GetValue(0).GetType().ToString() == "System.Int32") { // Int32なのでキャスト dtrow_out["ShipperID"] = (int)dt.Rows[0].ItemArray.GetValue(0); } else { // それ以外の場合、一度、文字列に変換してInt32.Parseする。 dtrow_out["ShipperID"] = int.Parse(dt.Rows[0].ItemArray.GetValue(0).ToString()); } dtrow_out["CompanyName"] = (string)dt.Rows[0].ItemArray.GetValue(1); dtrow_out["Phone"] = (string)dt.Rows[0].ItemArray.GetValue(2); // 戻り値をマーシャリングして設定 dtts_out = new DTTables(); dtts_out.Add(dtt_out); muReturn.Value = DTTables.DTTablesToString(dtts_out); break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // パラメタに対して、動的に値を設定する。 genDao.PK_ShipperID = muParameter.Value; // 戻り値 dt dt = new DataTable("rtn"); // 自動生成Daoを実行 genDao.S2_Select(dt); // キャストの対策コードを挿入 dtt_out = new DTTable("ret"); dtt_out.Cols.Add(new DTColumn("ShipperID", DTType.Int32)); dtt_out.Cols.Add(new DTColumn("CompanyName", DTType.String)); dtt_out.Cols.Add(new DTColumn("Phone", DTType.String)); dtrow_out = dtt_out.Rows.AddNew(); // ・SQLの場合、ShipperIDのintがInt32型にマップされる。 // ・ODPの場合、ShipperIDのNUMBERがInt64型にマップされる。 // ・DB2の場合、ShipperIDのDECIMALがxxx型にマップされる。 if (dt.Rows[0].ItemArray.GetValue(0).GetType().ToString() == "System.Int32") { // Int32なのでキャスト dtrow_out["ShipperID"] = (int)dt.Rows[0].ItemArray.GetValue(0); } else { // それ以外の場合、一度、文字列に変換してInt32.Parseする。 dtrow_out["ShipperID"] = int.Parse(dt.Rows[0].ItemArray.GetValue(0).ToString()); } dtrow_out["CompanyName"] = (string)dt.Rows[0].ItemArray.GetValue(1); dtrow_out["Phone"] = (string)dt.Rows[0].ItemArray.GetValue(2); // 戻り値をマーシャリングして設定 dtts_out = new DTTables(); dtts_out.Add(dtt_out); muReturn.Value = DTTables.DTTablesToString(dtts_out); break; default: // 個別Daoを使用する。 // 個別Daoを実行 string companyName; string phone; LayerD myDao = new LayerD(this.GetDam()); myDao.Select(muParameter.ActionType, muParameter.Value, out companyName, out phone); // 戻り値をマーシャリングして設定 dtt_out = new DTTable("ret"); dtt_out.Cols.Add(new DTColumn("ShipperID", DTType.Int32)); dtt_out.Cols.Add(new DTColumn("CompanyName", DTType.String)); dtt_out.Cols.Add(new DTColumn("Phone", DTType.String)); dtrow_out = dtt_out.Rows.AddNew(); dtrow_out["ShipperID"] = int.Parse(muParameter.Value); dtrow_out["CompanyName"] = companyName; dtrow_out["Phone"] = phone; dtts_out = new DTTables(); dtts_out.Add(dtt_out); muReturn.Value = DTTables.DTTablesToString(dtts_out); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <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_Delete(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); this.ReturnValue = muReturn; /// 引数をアンマーシャル DTTables dtts_in = DTTables.StringToDTTables(muParameter.Value); //DTTable dtt_in = dtts_in[0]; //DTRow dtrow_in = dtt_in.Rows[0]; //DTTables dtts_out = null; //DTTable dtt_out = null; //DTRow dtrow_out = 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 = "ShipperDelete.sql"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLFileName = "ShipperDelete.xml"; break; } // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 cmnDao.SetParameter("P1", muParameter.Value); // 共通Daoを実行 // 戻り値を設定 muReturn.Value = cmnDao.ExecInsUpDel_NonQuery().ToString(); break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // パラメタに対して、動的に値を設定する。 genDao.PK_ShipperID = muParameter.Value; // 自動生成Daoを実行 // 戻り値を設定 muReturn.Value = genDao.S4_Delete().ToString(); break; default: // 個別Daoを使用する。 // 個別Daoを実行 // 戻り値を設定 LayerD myDao = new LayerD(this.GetDam()); myDao.Delete(muParameter.ActionType, muParameter.Value, out muReturn.Value); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <summary>業務処理を実装</summary> /// <param name="muParameter">汎用引数クラス</param> private void UOC_Insert(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); muReturn.Bean = new Informations(""); this.ReturnValue = muReturn; // 引数をアンマーシャル Dictionary <string, string> dic = ((Informations)muParameter.Bean).Dictionary; // ↓業務処理----------------------------------------------------- switch ((muParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); cmnDao.SQLFileName = "ShipperInsert.sql"; // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 cmnDao.SetParameter("P2", dic["CompanyName"]); cmnDao.SetParameter("P3", dic["Phone"]); // 共通Daoを実行 // 戻り値を設定 muReturn.Bean = new Informations(cmnDao.ExecInsUpDel_NonQuery().ToString()); break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // パラメタに対して、動的に値を設定する。 genDao.CompanyName = dic["CompanyName"]; genDao.Phone = dic["Phone"]; // 自動生成Daoを実行 // 戻り値を設定 muReturn.Bean = new Informations(genDao.D1_Insert().ToString()); break; default: // 個別Daoを使用する。 // 個別Daoを実行 string ret = ""; LayerD_mu myDao = new LayerD_mu(this.GetDam()); myDao.Insert(muParameter.ActionType, dic["CompanyName"], dic["Phone"], out ret); // 戻り値を設定 muReturn.Bean = new Informations(ret); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <summary>業務処理を実装</summary> /// <param name="muParameter">汎用引数クラス</param> private void UOC_SelectAll_DS(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); this.ReturnValue = muReturn; // 引数をアンマーシャル DTTables dtts_in = DTTables.StringToDTTables(muParameter.Value); DTTable dtt_in = dtts_in[0]; //DTRow dtrow_in = dtt_in.Rows[0]; DTTables dtts_out = null; //DTTable dtt_out = null; //DTRow dtrow_out = null; // ↓業務処理----------------------------------------------------- DataSet ds = 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); // 戻り値をマーシャリングして設定 dtts_out = new DTTables(); dtts_out.Add(DTTable.FromDataTable(ds.Tables[0])); muReturn.Value = DTTables.DTTablesToString(dtts_out); 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]); // 戻り値をマーシャリングして設定 dtts_out = new DTTables(); dtts_out.Add(DTTable.FromDataTable(ds.Tables[0])); muReturn.Value = DTTables.DTTablesToString(dtts_out); break; default: // 個別Daoを使用する。 // 個別Daoを実行 LayerD myDao = new LayerD(this.GetDam()); myDao.SelectAll_DS(muParameter.ActionType, out ds); // 戻り値をマーシャリングして設定 dtts_out = new DTTables(); dtts_out.Add(DTTable.FromDataTable(ds.Tables[0])); muReturn.Value = DTTables.DTTablesToString(dtts_out); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <summary>業務処理を実装</summary> /// <param name="muParameter">汎用引数クラス</param> private void UOC_SelectAll_DSQL(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); this.ReturnValue = muReturn; // 引数をアンマーシャル DTTables dtts_in = DTTables.StringToDTTables(muParameter.Value); DTTable dtt_in = dtts_in[0]; DTRow dtrow_in = dtt_in.Rows[0]; DTTables dtts_out = null; //DTTable dtt_out = null; //DTRow dtrow_out = null; // ↓業務処理----------------------------------------------------- DataTable dt = 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 = "ShipperSelectOrder.sql"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLFileName = "ShipperSelectOrder.xml"; break; } // ユーザ定義パラメタに対して、動的に値を設定する。 string orderColumn = ""; string orderSequence = ""; if (dtrow_in["OrderColumn"].ToString() == "c1") { orderColumn = "ShipperID"; } else if (dtrow_in["OrderColumn"].ToString() == "c2") { orderColumn = "CompanyName"; } else if (dtrow_in["OrderColumn"].ToString() == "c3") { orderColumn = "Phone"; } else { } if (dtrow_in["OrderSequence"].ToString() == "A") { orderSequence = "ASC"; } else if (dtrow_in["OrderSequence"].ToString() == "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); // 戻り値をマーシャリングして設定 dtts_out = new DTTables(); dtts_out.Add(DTTable.FromDataTable(dt)); muReturn.Value = DTTables.DTTablesToString(dtts_out); break; //case "generate": // 自動生成Daoを使用する。 // // 当該SQLなし // break; default: // 個別Daoを使用する。 // 個別Daoを実行 LayerD myDao = new LayerD(this.GetDam()); myDao.SelectAll_DSQL( muParameter.ActionType, dtrow_in["OrderColumn"].ToString(), dtrow_in["OrderSequence"].ToString(), out dt); // 戻り値をマーシャリングして設定 dtts_out = new DTTables(); dtts_out.Add(DTTable.FromDataTable(dt)); muReturn.Value = DTTables.DTTablesToString(dtts_out); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <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_mu myDao = new LayerD_mu(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>業務処理を実装</summary> /// <param name="muParameter">汎用引数クラス</param> private void UOC_Update(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); this.ReturnValue = muReturn; // ↓業務処理----------------------------------------------------- Shipper shipper = (Shipper)muParameter.Bean; 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 = "ShipperUpdate.sql"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLFileName = "ShipperUpdate.xml"; break; } // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 cmnDao.SetParameter("P1", shipper.ShipperID); cmnDao.SetParameter("P2", shipper.CompanyName); cmnDao.SetParameter("P3", shipper.Phone); // 共通Daoを実行 // 戻り値を設定 muReturn.Bean = cmnDao.ExecInsUpDel_NonQuery().ToString(); break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // パラメタに対して、動的に値を設定する。 genDao.PK_ShipperID = shipper.ShipperID; genDao.Set_CompanyName_forUPD = shipper.CompanyName; genDao.Set_Phone_forUPD = shipper.Phone; // 自動生成Daoを実行 // 戻り値を設定 muReturn.Bean = genDao.S3_Update().ToString(); break; default: // 個別Daoを使用する。 string ret = ""; LayerD_mu myDao = new LayerD_mu(this.GetDam()); myDao.Update(muParameter.ActionType, shipper.ShipperID.ToString(), shipper.CompanyName, shipper.Phone, out ret); muReturn.Bean = ret; break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(muParameter); }
/// <summary>Soap & Bean の個別Webメソッドの共通部</summary> /// <param name="context">コンテキスト</param> /// <param name="methodName">メソッド名</param> /// <param name="parameterValue">引数Bean(個別・・・サブ)</param> /// <param name="returnValue">戻り値Bean(個別・・・サブ)</param> /// <returns>返すべきエラーの情報</returns> private string Call(ref string context, string serviceName, string methodName, string actionType, object parameterValue, out object returnValue) { // ステータス string status = "-"; // 初期化のため returnValue = ""; #region 呼出し制御関係の変数 // アセンブリ名 string assemblyName = ""; // クラス名 string className = ""; #endregion #region 引数・戻り値関係の変数 // 引数・戻り値の.NETオブジェクト MuParameterValue muParameterValue = null; MuReturnValue muReturnValue = null; // エラー情報(XMLフォーマット) XmlDocument wsErrorInfo = new XmlDocument(); XmlElement wsErrorRoot = null; XmlElement wsErrorItem = null; // エラー情報(ログ出力用) string errorType = ""; // 2009/09/15-この行 string errorMessageID = ""; string errorMessage = ""; string errorToString = ""; #endregion try { // 開始ログの出力 LogIF.InfoLog("SERVICE-IF", FxLiteral.SIF_STATUS_START); #region 前解決 // ★ status = FxLiteral.SIF_STATUS_NAME_SERVICE; // 名前解決(インプロセス) ServiceForSb.IPR_NS.NameResolution(serviceName, out assemblyName, out className); #endregion #region 引数の.NETオブジェクト化(UOC) // ★ status = FxLiteral.SIF_STATUS_DESERIALIZE; // ★★ 引数の.NETオブジェクト化をUOCする(必要に応じて)。 // 引数文字列の.NETオブジェクト化 // string[] cmnParameterValueを使用して初期化するなど muParameterValue = new MuParameterValue( "", //cmnParameterValue[0], // 画面名 "", //cmnParameterValue[1], // ボタン名 methodName, //cmnParameterValue[2], // メソッド名 actionType, //cmnParameterValue[3], // アクションタイプ new MyUserInfo(context, HttpContext.Current.Request.UserHostAddress)); // parameterValueを引数の文字列フィールドに設定 muParameterValue.Bean = parameterValue; // 引数クラスをパラメタ セットに格納 object[] paramSet = new object[] { muParameterValue, DbEnum.IsolationLevelEnum.User }; #endregion #region 認証処理(UOC) // ★ status = FxLiteral.SIF_STATUS_AUTHENTICATION; // ★★ 認証が通っているかどうか確認する。 if (!HttpContext.Current.Request.IsAuthenticated) { throw new BusinessSystemException("Authentication", "認証されていません。"); } // ★★ コンテキストの情報を使用するなどして // 認証処理をUOCする(必要に応じて)。 //// 認証チケットの復号化 //string[] authTicket = (string[])BinarySerialize.BytesToObject( // CustomEncode.FromBase64String( // SymmetricCryptography.DecryptString( // context, GetConfigParameter.GetConfigValue("private-key"), // EnumSymmetricAlgorithm.TripleDESCryptoServiceProvider))); //// ユーザIDの設定 //muParameterValue.User.UserName = authTicket[0]; // 認証チケットの整合性を確認 // Forms認証では、machinekeyを使用している。 // 必要に応じて認証サービス側も作り変える。 //// B層・D層呼出し //// タイムスタンプのチェックと、更新 //// スライディング・タイムアウトの実装、 //// 必要であればアカウントの検証も実施 //BaseReturnValue _returnValue = (BaseReturnValue)Latebind.InvokeMethod( // "xxxx", "yyyy", // FxLiteral.TRANSMISSION_INPROCESS_METHOD_NAME, // new object[] { new AuthParameterValue("-", "-", "zzzz", "", // muParameterValue.User, authTicket[1]), // DbEnum.IsolationLevelEnum.User }); //if (_returnValue.ErrorFlag) //{ // // 認証エラー // throw new BusinessSystemException("xxxx", "認証チケットが不正か、タイムアウトです。"); //} // 持ち回るならCookieにするか、 // contextをrefにするなどとする。 context = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff"); // 更新されたかのテストコード #endregion #region B層・D層呼出し // ★ status = FxLiteral.SIF_STATUS_INVOKE; try { // B層・D層呼出し //// DLL名も指定するパターン(別DLLに含まれる) //muReturnValue = (MuReturnValue)Latebind.InvokeMethod( // assemblyName, className, FxLiteral.TRANSMISSION_INPROCESS_METHOD_NAME, paramSet); // DLL名は指定しないパターン(ExecutingAssemblyに含まれる) Assembly asm = Assembly.GetExecutingAssembly(); // DLL名は指定しないパターンでの例外処理 Type t = asm.GetType(className); if (t == null) { throw new BusinessSystemException("NoLBTypeInExecutingAssembly", string.Format("{0}クラスがExecutingAssemblyに存在しません。", className)); } object o = Activator.CreateInstance(t); muReturnValue = (MuReturnValue)Latebind.InvokeMethod(o, FxLiteral.TRANSMISSION_INPROCESS_METHOD_NAME, paramSet); } catch (System.Reflection.TargetInvocationException rtEx) { // InnerExceptionを投げなおす。 throw rtEx.InnerException; } #endregion #region 戻り値 // ★ status = FxLiteral.SIF_STATUS_SERIALIZE; returnValue = muReturnValue.Bean; if (muReturnValue.ErrorFlag) { // エラー情報を設定する。 wsErrorRoot = wsErrorInfo.CreateElement("ErrorInfo"); wsErrorInfo.AppendChild(wsErrorRoot); // 業務例外 wsErrorItem = wsErrorInfo.CreateElement("ErrorType"); wsErrorItem.InnerText = FxEnum.ErrorType.BusinessApplicationException.ToString(); wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("MessageID"); wsErrorItem.InnerText = muReturnValue.ErrorMessageID; wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("Message"); wsErrorItem.InnerText = muReturnValue.ErrorMessage; wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("Information"); wsErrorItem.InnerText = muReturnValue.ErrorInfo; wsErrorRoot.AppendChild(wsErrorItem); // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.BusinessApplicationException.ToString(); // 2009/09/15-この行 errorMessageID = muReturnValue.ErrorMessageID; errorMessage = muReturnValue.ErrorMessage; errorToString = muReturnValue.ErrorInfo; // エラー情報を戻す。 return(wsErrorInfo.InnerXml); } #endregion // ★ status = ""; // 戻り値を返す。 return(""); } //catch (BusinessApplicationException baEx) //{ // ここには来ない↑ //} catch (BusinessSystemException bsEx) { // エラー情報を設定する。 wsErrorRoot = wsErrorInfo.CreateElement("ErrorInfo"); wsErrorInfo.AppendChild(wsErrorRoot); // システム例外 wsErrorItem = wsErrorInfo.CreateElement("ErrorType"); wsErrorItem.InnerText = FxEnum.ErrorType.BusinessSystemException.ToString(); wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("MessageID"); wsErrorItem.InnerText = bsEx.messageID; wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("Message"); wsErrorItem.InnerText = bsEx.Message; wsErrorRoot.AppendChild(wsErrorItem); // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.BusinessSystemException.ToString(); // 2009/09/15-この行 errorMessageID = bsEx.messageID; errorMessage = bsEx.Message; errorToString = bsEx.ToString(); // エラー情報を戻す。 return(wsErrorInfo.InnerXml); } catch (FrameworkException fxEx) { // エラー情報を設定する。 wsErrorRoot = wsErrorInfo.CreateElement("ErrorInfo"); wsErrorInfo.AppendChild(wsErrorRoot); // フレームワーク例外 // ★ インナーエクセプション情報は消失 wsErrorItem = wsErrorInfo.CreateElement("ErrorType"); wsErrorItem.InnerText = FxEnum.ErrorType.FrameworkException.ToString(); wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("MessageID"); wsErrorItem.InnerText = fxEx.messageID; wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("Message"); wsErrorItem.InnerText = fxEx.Message; wsErrorRoot.AppendChild(wsErrorItem); // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.FrameworkException.ToString(); // 2009/09/15-この行 errorMessageID = fxEx.messageID; errorMessage = fxEx.Message; errorToString = fxEx.ToString(); // エラー情報を戻す。 return(wsErrorInfo.InnerXml); } catch (Exception ex) { // エラー情報を設定する。 wsErrorRoot = wsErrorInfo.CreateElement("ErrorInfo"); wsErrorInfo.AppendChild(wsErrorRoot); // フレームワーク例外 // ★ インナーエクセプション情報は消失 wsErrorItem = wsErrorInfo.CreateElement("ErrorType"); wsErrorItem.InnerText = FxEnum.ErrorType.ElseException.ToString(); wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("MessageID"); wsErrorItem.InnerText = "-"; wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("Message"); wsErrorItem.InnerText = ex.ToString(); wsErrorRoot.AppendChild(wsErrorItem); // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.ElseException.ToString(); // 2009/09/15-この行 errorMessageID = "-"; errorMessage = ex.Message; // どちらを戻すべきか? // Muの場合は、Messageがデフォ errorToString = ex.Message; //errorToString = ex.ToString(); // エラー情報を戻す。 return(wsErrorInfo.InnerXml); //throw; // コメントアウト } finally { // 用途によってSessionを解放するかどうかを検討。 //// Sessionステートレス //Session.Clear(); //Session.Abandon(); // 終了ログの出力 if (status == "") { // 終了ログ出力 LogIF.InfoLog("SERVICE-IF", "正常終了"); } else { // 終了ログ出力 LogIF.ErrorLog("SERVICE-IF", "異常終了" + ":" + status + "\r\n" + "エラー タイプ:" + errorType + "\r\n" // 2009/09/15-この行 + "エラー メッセージID:" + errorMessageID + "\r\n" + "エラー メッセージ:" + errorMessage + "\r\n" + errorToString + "\r\n"); } } }
/// <summary>Silverlight&汎用DTOのテスト(DataGrid初期化処理)</summary> /// <param name="muParameter">引数クラス</param> protected void UOC_InitDataGrid(MuParameterValue muParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 MuReturnValue muReturn = new MuReturnValue(); this.ReturnValue = muReturn; // 引数をアンマーシャル //DTTables dtts_in = Marshalling.StringToDTTables(muParameter.Value); //DTTable dtt_in = dtts_in[0]; //DTRow dtrow_in = dtt_in.Rows[0]; DTTables dtts_out = null; DTTable dtt_out = null; DTRow dtrow_out = null; // テーブル生成@汎用DTO dtt_out = new DTTable("test"); // カラム定義@汎用DTOテーブル dtt_out.Cols.Add(new DTColumn("boolVal", DTType.Boolean)); dtt_out.Cols.Add(new DTColumn("charVal", DTType.Char)); dtt_out.Cols.Add(new DTColumn("dateVal", DTType.DateTime)); dtt_out.Cols.Add(new DTColumn("decimalVal", DTType.Decimal)); dtt_out.Cols.Add(new DTColumn("doubleVal", DTType.Double)); dtt_out.Cols.Add(new DTColumn("shortVal", DTType.Int16)); dtt_out.Cols.Add(new DTColumn("intVal", DTType.Int32)); dtt_out.Cols.Add(new DTColumn("longVal", DTType.Int64)); dtt_out.Cols.Add(new DTColumn("singleVal", DTType.Single)); dtt_out.Cols.Add(new DTColumn("stringVal", DTType.String)); // 行追加@汎用DTOテーブル // 1行目 dtrow_out = dtt_out.Rows.AddNew(); dtrow_out["boolVal"] = true; dtrow_out["charVal"] = 'a'; dtrow_out["dateVal"] = new DateTime(1977, 7, 22, 10, 20, 30, 444); dtrow_out["decimalVal"] = 10000; dtrow_out["doubleVal"] = 3.55D; dtrow_out["shortVal"] = 100; dtrow_out["intVal"] = 1000000; dtrow_out["longVal"] = 1000000000000; dtrow_out["singleVal"] = 3.5f; dtrow_out["stringVal"] = "test"; // 2行目 dtrow_out = dtt_out.Rows.AddNew(); dtrow_out["boolVal"] = false; dtrow_out["charVal"] = 'b'; dtrow_out["dateVal"] = new DateTime(1976, 4, 23, 10, 20, 30, 444); dtrow_out["decimalVal"] = 20000; dtrow_out["doubleVal"] = 6.11D; dtrow_out["shortVal"] = 200; dtrow_out["intVal"] = 2000000; dtrow_out["longVal"] = 2000000000000; dtrow_out["singleVal"] = 6.5f; dtrow_out["stringVal"] = "test2"; // 3行目 dtrow_out = dtt_out.Rows.AddNew(); dtrow_out["boolVal"] = true; dtrow_out["charVal"] = 'c'; dtrow_out["dateVal"] = new DateTime(1975, 1, 1, 10, 20, 30, 444); dtrow_out["decimalVal"] = 30000; dtrow_out["doubleVal"] = 8.25D; dtrow_out["shortVal"] = 300; dtrow_out["intVal"] = 3000000; dtrow_out["longVal"] = 3000000000000; dtrow_out["singleVal"] = 7.2f; dtrow_out["stringVal"] = "test3"; // ここで変更を確定させる dtt_out.AcceptChanges(); // 戻り値をマーシャリングして設定 dtts_out = new DTTables(); dtts_out.Add(dtt_out); ((MuReturnValue)this.ReturnValue).Value = DTTables.DTTablesToString(dtts_out); }