/// <summary> /// 基本表單刪除BCO /// </summary> /// <param name="htParams">刪除變數</param> /// <param name="RootDBT">是否有主交易,無主交易輸入null</param> /// <returns>回傳影響筆數</returns> public bool DeleteDetailAndLog(Hashtable htParams, DbTransaction RootDBT ) { bool IsRootTranscation = false; bool bResult = false; try { VDS_ALO_STORESPEC_DETL_DBO ALOD = new VDS_ALO_STORESPEC_DETL_DBO(ref USEDB); //判斷是否有傳入Root Transcation IsRootTranscation = (RootDBT == null) ? true : false; #region 啟動交易或指定RootTranscation if (IsRootTranscation) { //獨立呼叫啟動Transcation Conn = USEDB.CreateConnection(); Conn.Open(); DBT = Conn.BeginTransaction(); } else { DBT = RootDBT; } #endregion ALOD.doDelAndLogbyPID(htParams, DBT); #region 交易成功 if (IsRootTranscation) { //獨立呼叫Transcation成立 DBT.Commit(); } #endregion bResult = true; return bResult; } catch (Exception ex) { #region 交易失敗 if (IsRootTranscation) { //獨立呼叫Transcation失敗 DBT.Rollback(); } #endregion throw GetNewException(ex); } finally { #region 判斷是否關閉交易連線 if (IsRootTranscation) { //獨立呼叫Transcation,關閉連線 if (Conn.State == ConnectionState.Connecting) { Conn.Close(); } } #endregion } }
/// <summary> /// 基本表單更新BCO /// </summary> /// <param name="DetailData">更新變數</param> /// <param name="RootDBT">是否有主交易,無主交易輸入null</param> /// <returns>回傳成功與否</returns> public bool UpdateDetail(DataTable dtForDetailAddedOrModified, string strUIDForLog, DataTable dtForDetailDeleted, DbTransaction RootDBT) { bool IsRootTranscation = false; bool bResult = false; try { VDS_ALO_STORESPEC_DETL_DBO ALOD = new VDS_ALO_STORESPEC_DETL_DBO(ref USEDB); //判斷是否有傳入Root Transcation IsRootTranscation = (RootDBT == null) ? true : false; #region 啟動交易或指定RootTranscation if (IsRootTranscation) { //獨立呼叫啟動Transcation Conn = USEDB.CreateConnection(); Conn.Open(); DBT = Conn.BeginTransaction(); } else { DBT = RootDBT; } #endregion Hashtable htParams = new Hashtable(); if (dtForDetailDeleted != null) { #region for (Int32 i = 0; i <= dtForDetailDeleted.Rows.Count - 1; i++) { if (dtForDetailDeleted.Rows[i].RowState != DataRowState.Deleted) { #region htParams.Clear(); htParams.Add("ID",dtForDetailDeleted.Rows[i]["ID"]); htParams.Add("PID", dtForDetailDeleted.Rows[i]["PID"]); htParams.Add("CREATEDATE", dtForDetailDeleted.Rows[i]["CREATEDATE"]); htParams.Add("CREATEUID", dtForDetailDeleted.Rows[i]["CREATEUID"]); htParams.Add("UPDATEDATE", dtForDetailDeleted.Rows[i]["UPDATEDATE"]); htParams.Add("UPDATEUID", dtForDetailDeleted.Rows[i]["UPDATEUID"]); htParams.Add("START_RANKQTY", dtForDetailDeleted.Rows[i]["START_RANKQTY"]); htParams.Add("END_RANKQTY", dtForDetailDeleted.Rows[i]["END_RANKQTY"]); htParams.Add("ADJ_QTY", dtForDetailDeleted.Rows[i]["ADJ_QTY"]); htParams.Add("UIDForLog", strUIDForLog); ALOD.doDelete(htParams, DBT); #endregion } } #endregion } if (dtForDetailAddedOrModified != null) { #region for (Int32 i = 0; i <= dtForDetailAddedOrModified.Rows.Count - 1; i++) { if ((dtForDetailAddedOrModified.Rows[i].RowState == DataRowState.Added) || (dtForDetailAddedOrModified.Rows[i].RowState == DataRowState.Modified)) { #region htParams.Clear(); htParams.Add("ID", dtForDetailAddedOrModified.Rows[i]["ID"]); htParams.Add("PID", dtForDetailAddedOrModified.Rows[i]["PID"]); htParams.Add("CREATEDATE", dtForDetailAddedOrModified.Rows[i]["CREATEDATE"]); htParams.Add("CREATEUID", dtForDetailAddedOrModified.Rows[i]["CREATEUID"]); htParams.Add("UPDATEDATE", dtForDetailAddedOrModified.Rows[i]["UPDATEDATE"]); htParams.Add("UPDATEUID", dtForDetailAddedOrModified.Rows[i]["UPDATEUID"]); htParams.Add("START_RANKQTY", dtForDetailAddedOrModified.Rows[i]["START_RANKQTY"]); htParams.Add("END_RANKQTY", dtForDetailAddedOrModified.Rows[i]["END_RANKQTY"]); htParams.Add("ADJ_QTY", dtForDetailAddedOrModified.Rows[i]["ADJ_QTY"]); ALOD.doCreate(htParams, DBT); #endregion } } #endregion } #region 交易成功 if (IsRootTranscation) { //獨立呼叫Transcation成立 DBT.Commit(); } #endregion bResult = true; return bResult; } catch (Exception ex) { #region 交易失敗 if (IsRootTranscation) { //獨立呼叫Transcation失敗 DBT.Rollback(); } #endregion throw GetNewException(ex); } finally { #region 判斷是否關閉交易連線 if (IsRootTranscation) { //獨立呼叫Transcation,關閉連線 if (Conn.State == ConnectionState.Connecting) { Conn.Close(); } } #endregion } }
/// <summary> /// 基本表單新增BCO /// </summary> /// <param name="DetailData">輸入變數</param> /// <param name="RootDBT">是否有主交易,無主交易輸入null</param> /// <returns>回傳異動筆數</returns> public void CreateDetail(Int32 PID, DataTable DetailData, DbTransaction RootDBT) { bool IsRootTranscation = false; try { VDS_ALO_STORESPEC_DETL_DBO ALOD = new VDS_ALO_STORESPEC_DETL_DBO(ref USEDB); //判斷是否有傳入Root Transcation IsRootTranscation = (RootDBT == null) ? true : false; #region 啟動交易或指定RootTranscation if (IsRootTranscation) { //獨立呼叫啟動Transcation Conn = USEDB.CreateConnection(); Conn.Open(); DBT = Conn.BeginTransaction(); } else { DBT = RootDBT; } #endregion Hashtable htParams = new Hashtable(); for (Int32 i = 0; i <= DetailData.Rows.Count - 1; i++) { if (DetailData.Rows[i].RowState != DataRowState.Deleted) { htParams.Clear(); htParams.Add("PID", PID); htParams.Add("ID", DetailData.Rows[i]["ID"]); htParams.Add("CREATEDATE", DetailData.Rows[i]["CREATEDATE"]); htParams.Add("CREATEUID", DetailData.Rows[i]["CREATEUID"]); htParams.Add("UPDATEDATE", DetailData.Rows[i]["UPDATEDATE"]); htParams.Add("UPDATEUID", DetailData.Rows[i]["UPDATEUID"]); htParams.Add("START_RANKQTY", DetailData.Rows[i]["START_RANKQTY"]); htParams.Add("END_RANKQTY", DetailData.Rows[i]["END_RANKQTY"]); htParams.Add("ADJ_QTY", DetailData.Rows[i]["ADJ_QTY"]); ALOD.doCreate(htParams, DBT); } } #region 交易成功 if (IsRootTranscation) { //獨立呼叫Transcation成立 DBT.Commit(); } #endregion } catch (Exception ex) { #region 交易失敗 if (IsRootTranscation) { //獨立呼叫Transcation失敗 DBT.Rollback(); } #endregion throw GetNewException(ex); } finally { #region 判斷是否關閉交易連線 if (IsRootTranscation) { //獨立呼叫Transcation,關閉連線 if (Conn.State == ConnectionState.Connecting) { Conn.Close(); } } #endregion } }
public DataTable QueryDetlByPID(Hashtable htParams) { #region try { VDS_ALO_STORESPEC_DETL_DBO ALOD = new VDS_ALO_STORESPEC_DETL_DBO(ref USEDB); return ALOD.doQueryDetlByPID(htParams); } catch (Exception ex) { throw GetNewException(ex); } #endregion }
public bool CopyToNewItem(Hashtable htParams, DbTransaction RootDBT) { #region bool IsRootTranscation = false; bool bResult = false; Int32 PID = 0; Hashtable htParamsMaster = new Hashtable(); DataTable dtForCopyDetail = new DataTable(); DataRow dr; dtForCopyDetail.Columns.Add("ID"); dtForCopyDetail.Columns.Add("CREATEDATE"); dtForCopyDetail.Columns.Add("CREATEUID"); dtForCopyDetail.Columns.Add("UPDATEDATE"); dtForCopyDetail.Columns.Add("UPDATEUID"); dtForCopyDetail.Columns.Add("START_RANKQTY"); dtForCopyDetail.Columns.Add("END_RANKQTY"); dtForCopyDetail.Columns.Add("ADJ_QTY"); string strCurrentId = "", strLastId = ""; try { VDS_ALO_STORESPEC_MAIN_DBO ALOM = new VDS_ALO_STORESPEC_MAIN_DBO(ref USEDB); VDS_ALO_STORESPEC_DETL_DBO ALOD = new VDS_ALO_STORESPEC_DETL_DBO(ref USEDB); #region 取得相關資料 DataTable dtForCopy = ALOM.doQueryForCopyToNewItem(htParams); Hashtable htTemp = new Hashtable(); string strErrMsg = ""; if (dtForCopy != null && dtForCopy.Rows.Count > 0) { for (Int32 i = dtForCopy.Rows.Count - 1; i >= 0; i--) { htTemp.Clear(); htTemp.Add("ChanNo", dtForCopy.Rows[i]["chan_no"].ToString().Trim()); htTemp.Add("Store", dtForCopy.Rows[i]["store"].ToString().Trim()); htTemp.Add("Item", dtForCopy.Rows[i]["new_item"].ToString().Trim()); if (dtForCopy.Rows[i]["s_end_date"] != DBNull.Value) htTemp.Add("StartDate", ((DateTime)dtForCopy.Rows[i]["s_start_date"]).ToString("yyyy/MM/dd")); else htTemp.Add("StartDate", null); if (dtForCopy.Rows[i]["s_end_date"] != DBNull.Value) htTemp.Add("EndDate", ((DateTime)dtForCopy.Rows[i]["s_end_date"]).ToString("yyyy/MM/dd")); else htTemp.Add("EndDate", null); if (!CheckStoreSpecCanAdd(htTemp, ref strErrMsg)) { dtForCopy.Rows.RemoveAt(i); } } } else { throw new Exception("複製失敗!"); } #endregion //判斷是否有傳入Root Transcation IsRootTranscation = (RootDBT == null) ? true : false; #region 啟動交易或指定RootTranscation if (IsRootTranscation) { //獨立呼叫啟動Transcation Conn = USEDB.CreateConnection(); Conn.Open(); DBT = Conn.BeginTransaction(); } else { DBT = RootDBT; } #endregion if (dtForCopy != null && dtForCopy.Rows.Count > 0) { for (Int32 i = 0; i <= dtForCopy.Rows.Count - 1; i++) { #region //MASTER strCurrentId = dtForCopy.Rows[i]["ID"].ToString().Trim(); if (strCurrentId != strLastId) { #region 記錄主檔 htParamsMaster.Clear(); htParamsMaster.Add("CODE", dtForCopy.Rows[i]["new_code"]); htParamsMaster.Add("UserID", dtForCopy.Rows[i]["createuid"]); htParamsMaster.Add("ChanNO", dtForCopy.Rows[i]["chan_no"]); htParamsMaster.Add("STORE", dtForCopy.Rows[i]["store"]); htParamsMaster.Add("ITEM", dtForCopy.Rows[i]["new_item"]); htParamsMaster.Add("SPEC_TYPE", dtForCopy.Rows[i]["spec_type"]); htParamsMaster.Add("SPEC_QTY", dtForCopy.Rows[i]["spec_qty"]); htParamsMaster.Add("S_START_DATE", dtForCopy.Rows[i]["s_start_date"]); htParamsMaster.Add("S_END_DATE", dtForCopy.Rows[i]["s_end_date"]); htParamsMaster.Add("REASON", dtForCopy.Rows[i]["reason"]); #endregion //DETAIL dtForCopyDetail.Clear(); DataRow[] dRows = dtForCopy.Select("ID=" + strCurrentId); // 2009-06-18 // 用舊的方式,只要有明細就會被新增到detl不管是不是正確的值 //for (Int32 k = 0; k <= dtForCopy.Rows.Count - 1; k++) #region 記錄明細 foreach (DataRow oRow in dRows) { dr = dtForCopyDetail.NewRow(); #region old //dr["ID"] = strCurrentId; //dr["CREATEDATE"] = DateTime.Now; //dr["CREATEUID"] = dtForCopy.Rows[k]["createuid"]; //dr["UPDATEDATE"] = DateTime.Now; //dr["UPDATEUID"] = dtForCopy.Rows[k]["updateuid"]; //dr["START_RANKQTY"] = dtForCopy.Rows[k]["start_rankqty"]; //dr["END_RANKQTY"] = dtForCopy.Rows[k]["end_rankqty"]; //dr["ADJ_QTY"] = dtForCopy.Rows[k]["adj_qty"]; #endregion #region 新增明細 dr["ID"] = strCurrentId; dr["CREATEDATE"] = DateTime.Now; dr["CREATEUID"] = oRow["createuid"]; dr["UPDATEDATE"] = DateTime.Now; dr["UPDATEUID"] = oRow["updateuid"]; dr["START_RANKQTY"] = oRow["start_rankqty"]; dr["END_RANKQTY"] = oRow["end_rankqty"]; dr["ADJ_QTY"] = oRow["adj_qty"]; #endregion dtForCopyDetail.Rows.Add(dr); } #endregion #region 處理新增 PID = CreateMaster(htParamsMaster, DBT); if (PID != 0) { if (dtForCopyDetail != null) CreateDetail(PID, dtForCopyDetail, DBT); } else { throw new Exception("複製0筆資料!"); } #endregion } strLastId = dtForCopy.Rows[i]["ID"].ToString().Trim(); #endregion } #region 交易成功 if (IsRootTranscation) { //獨立呼叫Transcation成立 DBT.Commit(); } #endregion bResult = true; } else { bResult = false; } return bResult; } catch (Exception ex) { #region 交易失敗 if (IsRootTranscation) { //獨立呼叫Transcation失敗 DBT.Rollback(); } #endregion throw GetNewException(ex); } finally { #region 判斷是否關閉交易連線 if (IsRootTranscation) { //獨立呼叫Transcation,關閉連線 if (Conn.State == ConnectionState.Connecting) { Conn.Close(); } } #endregion } #endregion }
/// <summary> ///1.目的:將上傳檔案內容,存入暫存檔 ///2.傳入參數:@處理檔名、@使用者 /// 回傳參數:@處理筆數、@正確筆數、@錯誤筆數、@錯誤訊息 ///3.處理表格:VDS_ALO_STORESPEC_TMP(T) ///4.處理邏輯: /// 4.1) 先清除前一次,同一使用者執行的匯入暫存資訊與錯誤資訊。 /// 相關Table:VDS_ALO_STORESPEC_TM /// 4.2) 讀取匯入檔案到暫存資料集。 /// 4.3) 檢查匯入檔案格式內容是否正確,如有任何錯誤,則停止上傳流程,並回傳錯誤訊息。 /// 『XX檔案,檔案內容錯誤:@錯誤說明』 (格式請參考資料庫Table Shcema) /// * 日期:檢查日期格式。 /// * 數字:檢查內容是否為數字。 /// * 文字:檢查長度是否溢位。 /// * 檔案欄位數是否不足。 /// * 檢查必填欄位是否有值:通路、店號、品號、數量、原因代碼、設定類別 /// * 工作表匯入內容有任一筆錯,皆視為錯誤,整批放棄。 /// * 匯入表格細節說明請參考:Excel文件 /// 4.4) 格式檢查正確無誤後 /// a) 暫存檔中的[狀態]欄位調整為1:FILE TO TMP /// b) 呼叫 [CheckData] ,檢查資料內容邏輯正確性 /// 4.5) 無論CheckData()檢查結果是否為True, /// 皆將上傳檔案內容新增到資料庫Tmp Table:, /// 並記錄錯誤原因、匯入者、匯入日期、處理檔案名稱=上傳檔名。 ///5. 回傳處理結果(@處理筆數、@正確筆數、@錯誤筆數、@錯誤訊息(無錯誤時=null) ) /// </summary> public ArrayList FileToTmp(DataSet ds_Excel, DateTime d_CreateDate, string s_LoginUser, string s_AP_FileName, string V_SESSION_ID) { #region int i_newTable_Count = 0; ArrayList arl_Return = new ArrayList(); ArrayList arr_CheckData_Table = new ArrayList(); ArrayList arr_CheckData = new ArrayList(); int i_FileToTemp_Total_count = 0; int i_FileToTemp_Right_count = 0; int i_FileToTemp_Wrong_count = 0; bool b_Check_Logic = true; ArrayList paramTemp = new ArrayList(); Hashtable htTemp = new Hashtable(); DataTable dtTemp = new DataTable(); string strErrMsg = ""; string strErrMsgDataFormat = ""; Int32 iErrCount = 0; string strTemp = ""; bool bResultTemp = false; try { ParameterList.Clear(); DataTable dt_ALO_IMPORT_TMP = QuerySwitch(QueryType.GetStoreSpec_TmpSchema, ParameterList); VDS_ALO_DIS_PATTERN_DBO ALO_DIS_PATTERN = new VDS_ALO_DIS_PATTERN_DBO(ref USEDB); VDS_ALO_STORESPEC_TMP_DBO ALO_STORESPEC_TMP = new VDS_ALO_STORESPEC_TMP_DBO(ref USEDB); VDS_ALO_STORESPEC_DETL_DBO ALO_STORESPEC_DETL = new VDS_ALO_STORESPEC_DETL_DBO(ref USEDB); MaintainStoreSpec ALO_STORESPEC_MAIN = new MaintainStoreSpec(ConnectionDB); QueryALOCommon BCOCommon = new QueryALOCommon(ConnectionDB); //20090626 added VDS_ALO_STORESPEC_TMP_DBO DBO = new VDS_ALO_STORESPEC_TMP_DBO(ref USEDB); ParameterList.Clear(); ParameterList.Add(s_LoginUser); ParameterList.Add(V_SESSION_ID); DBO.doDelete_STORESPEC_TMP(ParameterList, null); foreach (System.Data.DataRow dRow in ds_Excel.Tables[0].Rows) { #region iErrCount = 0; strErrMsg = ""; if (!CheckRequiredField(dRow, iAryRequiredColumnsCheck, out strErrMsgDataFormat))//檢查必填欄位 { #region 檢查資料格式正確性 arl_Return.Add("FALSE"); arl_Return.Add(strErrMsgDataFormat); return arl_Return; } else if (!CheckOverFlow(dRow, iAryOverflowColumnsCheck, out strErrMsgDataFormat))//檢查是否為溢位 { arl_Return.Add("FALSE"); arl_Return.Add(strErrMsgDataFormat); return arl_Return; } else if (!CheckInputValueIsInt32_2(dRow, iAryRequiredColumnsCheck, out strErrMsgDataFormat))//檢查是否為數值 { //2009-06-26 cyhsu 改用 CheckInputValueIsInt32_2 //因為數值欄位部分條件下可輸入負值,所以在格式檢查時不檢查正負號 arl_Return.Add("FALSE"); arl_Return.Add(strErrMsgDataFormat); return arl_Return; #endregion } else { #region 檢查資料邏輯正確性 #region 將資料寫入 TEMP TABLE DataRow dRow_Temp = dt_ALO_IMPORT_TMP.NewRow(); dRow_Temp["CREATEDATE"] = d_CreateDate; dRow_Temp["CREATEUID"] = s_LoginUser; dRow_Temp["ID"] = i_newTable_Count; dRow_Temp["UPDATEDATE"] = d_CreateDate; dRow_Temp["UPDATEUID"] = s_LoginUser; dRow_Temp["CHAN_NO"] = dRow[1].ToString().Trim(); dRow_Temp["STORE"] = dRow[2].ToString().Trim(); dRow_Temp["ITEM"] = dRow[3].ToString().Trim(); dRow_Temp["SPEC_QTY"] = Int32.Parse(dRow[5].ToString().Trim()); dRow_Temp["REASON"] = dRow[6].ToString().Trim(); dRow_Temp["SPEC_TYPE"] = dRow[7].ToString().Trim(); dRow_Temp["SESSION_ID"] = V_SESSION_ID; #endregion #region 4.1 判斷是否可新增 htTemp.Clear(); strTemp = ""; htTemp.Add("ChanNo", dRow[1].ToString().Trim()); htTemp.Add("Store", dRow[2].ToString().Trim()); htTemp.Add("Item", dRow[3].ToString().Trim()); htTemp.Add("StartDate", DateTime.Now.ToString("yyyy/MM/dd")); htTemp.Add("EndDate", DateTime.Now.AddDays(90).ToString("yyyy/MM/dd")); bResultTemp = ALO_STORESPEC_MAIN.CheckStoreSpecCanAdd(htTemp, ref strTemp); if (!bResultTemp) { strErrMsg += string.Format("{0},", strTemp); } ParameterList.Clear(); ParameterList.Add(dRow[1].ToString().Trim()); ParameterList.Add(dRow[2].ToString().Trim()); strTemp = BCOCommon.CheckCurrentStoreState(ParameterList); if (strTemp != "") { strErrMsg += string.Format("{0},", strTemp); } #endregion #region switch (dRow[7].ToString().Trim()) { case "1"://加減本數 strErrMsg += "不可匯入控制類別[加減本數],"; dRow_Temp["S_START_DATE"] = DateTime.Now; dRow_Temp["S_END_DATE"] = DateTime.Now.AddDays(90); break; case "3"://停配 dRow_Temp["S_START_DATE"] = DateTime.Now; dRow_Temp["S_END_DATE"] = DateTime.Parse("9999/12/31"); dRow_Temp["SPEC_QTY"] = "0"; break; case "2": case "4": case "5": case "6": dRow_Temp["S_START_DATE"] = DateTime.Now; dRow_Temp["S_END_DATE"] = DateTime.Now.AddDays(90); break; default: strErrMsg += "無此控制類別,"; dRow_Temp["S_START_DATE"] = DateTime.Now; dRow_Temp["S_END_DATE"] = DateTime.Now.AddDays(90); break; } #endregion #region 控制類別 = 2 時,可輸入負值,其他不可 2009-060-26 cyhsu add if ((dRow_Temp["SPEC_TYPE"].ToString().Trim() != "2") && (int.Parse(dRow_Temp["SPEC_QTY"].ToString()) < 0) ) { strErrMsg += "此控制類別非加減比例,對應之設定值不可小於0,"; } #endregion #region 4.4 針對MEMO是否為空字串做檢查 if (strErrMsg.Trim() == string.Empty) { dRow_Temp["MEMO"] = System.DBNull.Value; dRow_Temp["DATASOURCE"] = s_AP_FileName; } else { if (strErrMsg.Trim().Length > 0) { if (strErrMsg.Trim().Substring(strErrMsg.Trim().Length - 1) == ",") { strErrMsg = strErrMsg.Trim().Substring(0, strErrMsg.Trim().Length - 1); } } dRow_Temp["MEMO"] = strErrMsg; dRow_Temp["DATASOURCE"] = s_AP_FileName; iErrCount++; } if (iErrCount != 0) { i_FileToTemp_Wrong_count += 1; dRow_Temp["DATATYPE"] = 2; b_Check_Logic = false; } else { i_FileToTemp_Right_count += 1; dRow_Temp["DATATYPE"] = 1; } #endregion dt_ALO_IMPORT_TMP.Rows.Add(dRow_Temp); i_newTable_Count += 1; #endregion } i_FileToTemp_Total_count += 1; #endregion } #region 先清除前一次,同一使用者執行的匯入暫存資訊與錯誤資訊,並將 Excel 資料匯入 TEMP TABLE ParameterList.Clear(); ParameterList.Add(s_LoginUser); ParameterList.Add(V_SESSION_ID); DELETE_AND_INSERT_TEMP_TABLE(ParameterList, null, dt_ALO_IMPORT_TMP); #endregion arl_Return.Add("TRUE"); arl_Return.Add(b_Check_Logic); arl_Return.Add(i_FileToTemp_Total_count); arl_Return.Add(i_FileToTemp_Right_count); arl_Return.Add(i_FileToTemp_Wrong_count); } catch (Exception ex) { arl_Return.Add("FALSE"); arl_Return.Add(GetNewException(ex).Message); } return arl_Return; #endregion }