chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore - 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
# 領據匯入功能修正計畫
|
||||
|
||||
## 問題一:匯入顯示失敗但資料已入 DB
|
||||
|
||||
### 根因
|
||||
`領據匯入.cs:InsertOne()` 中,`dac領據.InsertOne`、`dac勞務費.InsertOne`、`dac差旅費.InsertOne` 各自有獨立的 `TransactionScope`,但沒有外層 `TransactionScope` 包裹。當領據寫入成功後勞務費或差旅費寫入失敗時,領據主檔已 commit 到資料庫,但例外往上拋,前端顯示失敗。
|
||||
|
||||
### 修正
|
||||
在三個 InsertOne 呼叫外層加上 `using (var ts = DAC.NewTransactionScope())`,使三者屬於同一個交易,全部成功才 commit。
|
||||
|
||||
---
|
||||
|
||||
## 問題二:匯入時顯示無效檔案但資料已入 DB
|
||||
|
||||
### 根因(多重因素)
|
||||
1. **上傳處理器一律存成 `.xlsx`**(`ReceiptUploadHandler.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`
|
||||
Reference in New Issue
Block a user