//0.ChanTransNo,1.CreateID,2.CreateDate //Datatable 欄位 0.item,1.period public bool CheckData(string ChanTransNo,string CreateID,string CreateDate,DataTable dtTransIn,DbTransaction RootDBT,out string ErrorMsg,out string PurchaseNo,out DataTable DtTransItem,out DataTable dtTransGift) { bool IsRootTranscation = false; PurchaseNo = string.Empty; ErrorMsg = string.Empty; DtTransItem = null; dtTransGift = null; ArrayList ParameterList = new ArrayList(); try { DBO.MaintainAcceptDBO dbo = new DBO.MaintainAcceptDBO(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 //確認資料都是屬於同一張採購單,並回傳採購單號,兩筆以上採購單回傳錯誤訊息 for (int i = 0; i < dtTransIn.Rows.Count; i++) { ParameterList.Clear(); ParameterList.Add(dtTransIn.Rows[i][0].ToString()); ParameterList.Add(dtTransIn.Rows[i][1].ToString()); DataTable dtPurchase = dbo.CheckPurData(ParameterList); if (i == 0) { if (dtPurchase.Rows.Count == 1) { PurchaseNo = dtPurchase.Rows[0][0].ToString(); } else if (dtPurchase.Rows.Count == 0) { ErrorMsg = "查無採購資料"; return false; } else if (dtPurchase.Rows.Count > 1) { ErrorMsg = "勾選品項非存在同一張採購單,請確認後再執行驗收單開立"; return false; } } else { if (dtPurchase.Rows.Count == 1) { if (dtPurchase.Rows[0][0].ToString() != PurchaseNo) { ErrorMsg = "勾選品項非存在同一張採購單,請確認後再執行驗收單開立"; return false; } } else if (dtPurchase.Rows.Count == 0) { ErrorMsg = "查無採購資料"; return false; } else if (dtPurchase.Rows.Count > 1) { ErrorMsg = "勾選品項非存在同一張採購單,請確認後再執行驗收單開立"; return false; } } } //取得唯一的採購單號後開始建立初始驗收單若存在於單一採購單中,將@ChanTransNo,@CreateID,@item,@period及步驟1取得的採購單號[@purchase_no]為傳入參數呼叫[ImportAccept.CreateTransIn] //傳入第一筆的ChanTransNo、CreateID、Item、period取得INSERT到DataTransInMain資料,回傳主檔ID和CODE CreateTransIn(ChanTransNo, PurchaseNo, CreateID, CreateDate, dtTransIn, DBT, out DtTransItem, out dtTransGift); #region 交易成功 if (IsRootTranscation) { //獨立呼叫Transcation成立 DBT.Commit(); } #endregion return true; } catch (Exception ex) { #region 交易失敗 if (IsRootTranscation) { //獨立呼叫Transcation失敗 DBT.Rollback(); } #endregion throw ex; } finally { #region 判斷是否關閉交易連線 if (IsRootTranscation) { //獨立呼叫Transcation,關閉連線 if (Conn.State == ConnectionState.Connecting) { Conn.Close(); } } #endregion } }