public bool UpdateItemAndChanRefer(DataTable dtDisItemReferDiff, DataTable dtDisItemReferAdd, DataTable dtDisItemReferDelete, DataTable dtDisChanOld, DataTable dtDisChanNew, DataTable dtDisItemReferNew, string vItem, string vPeriod, DbTransaction RootDBT) { bool bResult = false; bool IsRootTranscation = false; try { //判斷是否有傳入Root Transcation IsRootTranscation = (RootDBT == null) ? true : false; #region 啟動交易或指定RootTranscation if (IsRootTranscation) { //獨立呼叫啟動Transcation Conn = USEDB.CreateConnection(); Conn.Open(); DBT = Conn.BeginTransaction(); } else { DBT = RootDBT; } #endregion MaintainDisChanRefer BCODisChanRefer = new MaintainDisChanRefer(ConnectionDB); DataTable dtAvailableChan = null; ArrayList ParameterList = new ArrayList(); ArrayList ParameterList2 = new ArrayList(); // 處理刪除:dtDel if (dtDisItemReferDelete != null && dtDisItemReferDelete.Rows.Count > 0) { #region foreach (DataRow dr in dtDisItemReferDelete.Rows) { //a)呼叫MaintainDisItemRefer.DeleteDisItemRefer(); ParameterList.Clear(); ParameterList.Add(dr["ID"]); ParameterList.Add(dr["DIS_NO"]); ParameterList.Add(dr["ITEM"]); ParameterList.Add(dr["PERIOD"]); ParameterList.Add(dr["RITEM"]); ParameterList.Add(dr["RPERIOD"]); ParameterList.Add(dr["REFER_RATE"]); ParameterList.Add(dr["UPDATEDATE"]); ParameterList.Add(dr["UPDATEUID"]); bResult = DeleteDisItemRefer(ParameterList, DBT); //b)呼叫MaintainDisChanRefer.DeleteChanReferByReferItem(); if (dtDisChanOld != null) { foreach (DataRow dr2 in dtDisChanOld.Rows) { ParameterList2.Clear(); ParameterList2.Add(dr2["ID"]);//此處傳的ID無法使用,因為傳的是VDS_ALO_DIS_CHAN的,需要的是VDS_ALO_DIS_CHAN_REFER ParameterList2.Add(dr["DIS_NO"]); ParameterList2.Add(dr["ITEM"]); ParameterList2.Add(dr2["CHAN_NO"]); ParameterList2.Add(dr["PERIOD"]); ParameterList2.Add(dr["RITEM"]); ParameterList2.Add(dr["RPERIOD"]); ParameterList2.Add(dr["REFER_RATE"]); ParameterList2.Add(dr2["UPDATEDATE"]); ParameterList2.Add(dr2["UPDATEUID"]); bResult = BCODisChanRefer.DeleteChanReferByReferItem(ParameterList2, DBT); } } } #endregion } // 處理新增:dtAdd if (dtDisItemReferAdd != null && dtDisItemReferAdd.Rows.Count > 0) { #region if (dtDisChanNew == null || dtDisChanNew.Rows.Count <= 0) { MaintainDisRecord BCODisRecord = new MaintainDisRecord(ConnectionDB); ParameterList.Clear(); ParameterList.Add(vItem); ParameterList.Add(vPeriod); dtAvailableChan = BCODisRecord.QueryForSelectDisChan(ParameterList); } else { dtAvailableChan = dtDisChanNew; } for (Int32 i = 0; i <= dtDisItemReferAdd.Rows.Count - 1; i++) { //20090804 added:先刪除 ParameterList.Clear(); ParameterList.Add(dtDisItemReferAdd.Rows[i]["DIS_NO"]); ParameterList.Add(dtDisItemReferAdd.Rows[i]["ITEM"]); ParameterList.Add(dtDisItemReferAdd.Rows[i]["PERIOD"]); bResult = BCODisChanRefer.DeleteOldChanRefer(ParameterList, DBT); break; } for (Int32 i = 0; i <= dtDisItemReferAdd.Rows.Count - 1; i++) { //1.逐筆建立商品參照檔資訊 ParameterList.Clear(); ParameterList.Add(dtDisItemReferAdd.Rows[i]["DIS_NO"]); ParameterList.Add(dtDisItemReferAdd.Rows[i]["ITEM"]); ParameterList.Add(dtDisItemReferAdd.Rows[i]["PERIOD"]); ParameterList.Add(dtDisItemReferAdd.Rows[i]["RITEM"]); ParameterList.Add(dtDisItemReferAdd.Rows[i]["RPERIOD"]); ParameterList.Add(dtDisItemReferAdd.Rows[i]["REFER_RATE"]); ParameterList.Add(dtDisItemReferAdd.Rows[i]["CREATEDATE"]); ParameterList.Add(dtDisItemReferAdd.Rows[i]["CREATEUID"]); bResult = CreateDisItemReferFor111(ParameterList, DBT); } for (Int32 i = 0; i <= dtDisItemReferNew.Rows.Count - 1; i++)//因為在此之前會做全部刪除的動作,但dtDisItemReferAdd不會記錄未變更的筆數,所以傳入dtDisItemReferNew { //2.建立品項通路參照資訊 for (Int32 k = 0; k <= dtAvailableChan.Rows.Count - 1; k++) { ParameterList2.Clear(); ParameterList2.Add(dtDisItemReferNew.Rows[i]["DIS_NO"]); ParameterList2.Add(dtDisItemReferNew.Rows[i]["ITEM"]); ParameterList2.Add(dtDisItemReferNew.Rows[i]["PERIOD"]); ParameterList2.Add(dtAvailableChan.Rows[k]["CHAN_NO"]); ParameterList2.Add(dtDisItemReferNew.Rows[i]["RITEM"]); ParameterList2.Add(dtDisItemReferNew.Rows[i]["RPERIOD"]); ParameterList2.Add(dtDisItemReferNew.Rows[i]["REFER_RATE"]); ParameterList2.Add(dtDisItemReferNew.Rows[i]["CREATEDATE"]); ParameterList2.Add(dtDisItemReferNew.Rows[i]["CREATEUID"]); bResult = BCODisChanRefer.CreateDisChanRefer(ParameterList2, DBT); } } #endregion } // 處理更新:dtUpdate if (dtDisItemReferDiff != null && dtDisItemReferDiff.Rows.Count > 0) { #region foreach (DataRow dr in dtDisItemReferDiff.Rows) { //1.逐筆更新商品參照檔資訊 ParameterList.Clear(); //old ParameterList.Add(dr["DIS_NO"]); ParameterList.Add(dr["ITEM"]); ParameterList.Add(dr["PERIOD"]); ParameterList.Add(dr["RITEM"]); ParameterList.Add(dr["RPERIOD"]); //new ParameterList.Add(dr["DIS_NO"]); ParameterList.Add(dr["ITEM"]); ParameterList.Add(dr["PERIOD"]); ParameterList.Add(dr["RITEM"]); ParameterList.Add(dr["RPERIOD"]); ParameterList.Add(dr["REFER_RATE"]); ParameterList.Add(dr["UPDATEDATE"]); ParameterList.Add(dr["UPDATEUID"]); bResult = UpdateDisItemReferFor111_2(ParameterList, DBT); if (dtDisChanNew == null || dtDisChanNew.Rows.Count <= 0) { MaintainDisRecord BCODisRecord = new MaintainDisRecord(ConnectionDB); ParameterList.Clear(); ParameterList.Add(vItem); ParameterList.Add(vPeriod); dtAvailableChan = BCODisRecord.QueryForSelectDisChan(ParameterList); } else { dtAvailableChan = dtDisChanNew; } for (Int32 k = 0; k <= dtAvailableChan.Rows.Count - 1; k++) { //2.更新品項通路參照資訊 ParameterList2.Clear(); //old ParameterList2.Add(dr["DIS_NO"]); ParameterList2.Add(dr["ITEM"]); ParameterList2.Add(dr["PERIOD"]); ParameterList2.Add(dtAvailableChan.Rows[k]["CHAN_NO"]); ParameterList2.Add(dr["RITEM"]); ParameterList2.Add(dr["RPERIOD"]); //new ParameterList2.Add(dr["DIS_NO"]); ParameterList2.Add(dr["ITEM"]); ParameterList2.Add(dr["PERIOD"]); ParameterList2.Add(dtAvailableChan.Rows[k]["CHAN_NO"]); ParameterList2.Add(dr["RITEM"]); ParameterList2.Add(dr["RPERIOD"]); ParameterList2.Add(dr["REFER_RATE"]); ParameterList2.Add(dr["UPDATEDATE"]); ParameterList2.Add(dr["UPDATEUID"]); bResult = BCODisChanRefer.UpdateDisChanRefer2(ParameterList2, DBT); } } #endregion } #region 交易成功 if (IsRootTranscation) { //獨立呼叫Transcation成立 DBT.Commit(); } bResult = true; #endregion } catch (Exception ex) { #region 交易失敗 bResult = false; if (IsRootTranscation) { //獨立呼叫Transcation失敗 DBT.Rollback(); } #endregion throw GetNewException(ex); } finally { #region 判斷是否關閉交易連線 if (IsRootTranscation) { //獨立呼叫Transcation,關閉連線 if (Conn.State == ConnectionState.Connecting) { Conn.Close(); } } #endregion } return bResult; }
public bool CreateItemAndChanRefer(DataTable dtDisItemRefer, DataTable dtDisChan, string vDisNo, string vItem, string vPeriod, DbTransaction RootDBT) { #region bool bResult = false; bool IsRootTranscation = false; try { //判斷是否有傳入Root Transcation IsRootTranscation = (RootDBT == null) ? true : false; #region 啟動交易或指定RootTranscation if (IsRootTranscation) { //獨立呼叫啟動Transcation Conn = USEDB.CreateConnection(); Conn.Open(); DBT = Conn.BeginTransaction(); System.Web.HttpContext.Current.Trace.Warn(string.Format("使用者:{0} 於{1}.CreateItemAndChanRefer.Open Connetction:{2} ", System.Web.HttpContext.Current.Session["UID"].ToString(), DateTime.Now.ToString(), DBT.GetHashCode().ToString()) ); } else { DBT = RootDBT; System.Web.HttpContext.Current.Trace.Warn(string.Format("使用者:{0} 於{1}.CreateItemAndChanRefer.Used Old Connetction:{2} ", System.Web.HttpContext.Current.Session["UID"].ToString(), DateTime.Now.ToString(), DBT.GetHashCode().ToString()) ); } #endregion DataTable dtAvailableChan = null; ArrayList ParameterList = new ArrayList(); ArrayList ParameterList2 = new ArrayList(); //4.1) 檢查目前配本通路暫存檔是否有值,無值則選擇所有可配通路 if (dtDisChan == null || dtDisChan.Rows.Count <= 0) { MaintainDisRecord BCODisRecord = new MaintainDisRecord(ConnectionDB); ParameterList.Clear(); ParameterList.Add(vItem); ParameterList.Add(vPeriod); dtAvailableChan = BCODisRecord.QueryForSelectDisChan(ParameterList); } else { dtAvailableChan = dtDisChan; } //4.2) 處理新增 if (dtDisItemRefer != null && dtDisItemRefer.Rows.Count > 0) { MaintainDisChanRefer BCODisChanRefer = new MaintainDisChanRefer(ConnectionDB); for (Int32 i = 0; i <= dtDisItemRefer.Rows.Count - 1; i++) { //1.逐筆建立商品參照檔資訊 ParameterList.Clear(); ParameterList.Add(vDisNo); ParameterList.Add(vItem); ParameterList.Add(vPeriod); ParameterList.Add(dtDisItemRefer.Rows[i]["RITEM"]); ParameterList.Add(dtDisItemRefer.Rows[i]["RPERIOD"]); ParameterList.Add(dtDisItemRefer.Rows[i]["REFER_RATE"]); ParameterList.Add(dtDisItemRefer.Rows[i]["CREATEDATE"]); ParameterList.Add(dtDisItemRefer.Rows[i]["CREATEUID"]); bResult = CreateDisItemReferFor111(ParameterList, DBT); //2.建立品項通路參照資訊 for (Int32 k = 0; k <= dtAvailableChan.Rows.Count - 1; k++) { ParameterList2.Clear(); ParameterList2.Add(vDisNo); ParameterList2.Add(vItem); ParameterList2.Add(vPeriod); ParameterList2.Add(dtAvailableChan.Rows[k]["CHAN_NO"]); ParameterList2.Add(dtDisItemRefer.Rows[i]["RITEM"]); ParameterList2.Add(dtDisItemRefer.Rows[i]["RPERIOD"]); ParameterList2.Add(dtDisItemRefer.Rows[i]["REFER_RATE"]); ParameterList2.Add(dtDisItemRefer.Rows[i]["CREATEDATE"]); ParameterList2.Add(dtDisItemRefer.Rows[i]["CREATEUID"]); bResult = BCODisChanRefer.CreateDisChanRefer(ParameterList2, DBT); } } } #region 交易成功 if (IsRootTranscation) { //獨立呼叫Transcation成立 DBT.Commit(); } #endregion } catch (Exception ex) { #region 交易失敗 bResult = false; if (IsRootTranscation) { //獨立呼叫Transcation失敗 DBT.Rollback(); } #endregion throw GetNewException(ex); } finally { #region 判斷是否關閉交易連線 if (IsRootTranscation) { //獨立呼叫Transcation,關閉連線 if (Conn.State == ConnectionState.Connecting) { Conn.Close(); } } #endregion } return bResult; #endregion }