Files
thinkyu/Doc/領據匯入修正計畫.md
T
sryang 577060bc78 chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore
- 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
2026-09-10 09:42:37 +08:00

1.8 KiB
Raw Blame History

領據匯入功能修正計畫

問題一:匯入顯示失敗但資料已入 DB

根因

領據匯入.cs:InsertOne() 中,dac領據.InsertOnedac勞務費.InsertOnedac差旅費.InsertOne 各自有獨立的 TransactionScope,但沒有外層 TransactionScope 包裹。當領據寫入成功後勞務費或差旅費寫入失敗時,領據主檔已 commit 到資料庫,但例外往上拋,前端顯示失敗。

修正

在三個 InsertOne 呼叫外層加上 using (var ts = DAC.NewTransactionScope()),使三者屬於同一個交易,全部成功才 commit。


問題二:匯入時顯示無效檔案但資料已入 DB

根因(多重因素)

  1. 上傳處理器一律存成 .xlsxReceiptUploadHandler.ashx.cs:41),若使用者上傳 .xls 格式,LoadWorkbook 會誤用 XSSFWorkbook 解析 OLE2 格式而拋錯
  2. 前端匯入完成後 validationSuccess 未重置,加上 importData() 的 guard 僅檢查 this.validationSuccess,若因 session 過期或重複點擊導致匯入失敗,使用者看到錯誤但前一次資料已入 DB
  3. 按鈕 disabled 條件不足,未鎖定已完成的匯入

修正

  1. ReceiptUploadHandler.ashx.cs:存檔時保留原始副檔名
  2. 領據匯入.js:新增 importDone 旗標,匯入完成後鎖住按鈕與 guard
  3. 領據匯出匯入.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