1.8 KiB
1.8 KiB
領據匯入功能修正計畫
問題一:匯入顯示失敗但資料已入 DB
根因
領據匯入.cs:InsertOne() 中,dac領據.InsertOne、dac勞務費.InsertOne、dac差旅費.InsertOne 各自有獨立的 TransactionScope,但沒有外層 TransactionScope 包裹。當領據寫入成功後勞務費或差旅費寫入失敗時,領據主檔已 commit 到資料庫,但例外往上拋,前端顯示失敗。
修正
在三個 InsertOne 呼叫外層加上 using (var ts = DAC.NewTransactionScope()),使三者屬於同一個交易,全部成功才 commit。
問題二:匯入時顯示無效檔案但資料已入 DB
根因(多重因素)
- 上傳處理器一律存成
.xlsx(ReceiptUploadHandler.ashx.cs:41),若使用者上傳.xls格式,LoadWorkbook會誤用XSSFWorkbook解析 OLE2 格式而拋錯 - 前端匯入完成後
validationSuccess未重置,加上importData()的 guard 僅檢查this.validationSuccess,若因 session 過期或重複點擊導致匯入失敗,使用者看到錯誤但前一次資料已入 DB - 按鈕 disabled 條件不足,未鎖定已完成的匯入
修正
ReceiptUploadHandler.ashx.cs:存檔時保留原始副檔名領據匯入.js:新增importDone旗標,匯入完成後鎖住按鈕與 guard領據匯出匯入.ascx:按鈕:disabled加入importDone條件
受影響檔案
| 檔案 | 修改內容 |
|---|---|
Web\Import\領據匯入.cs |
InsertOne() 加入外層 TransactionScope |
Web\Services\ReceiptUploadHandler.ashx.cs |
存檔時保留原始副檔名 |
Web\Scripts\領據匯入.js |
新增 importDone 旗標,加入 guard |
Web\Forms\領據系統\領據匯出匯入.ascx |
按鈕 :disabled 加入 importDone |
SVN Branch
branches/fix-import-transaction