Skip to content

Releases: cct08311github/WTM

WTM 10.0.1 — TimeProvider 遷移 + .NET 10 優化

21 Mar 15:42

Choose a tag to compare

Changed

  • TimeProvider 全面遷移 — 將 DateTime.Now/UtcNow 替換為 TimeProvider,覆蓋 27 個檔案(Core VMs, Mvc, TokenService, DataContext, WTMLogger, FileHandlers, Dashboard, ETL, DateRange)。測試可透過 FakeTimeProvider 控制時間(#697, #708, #712
  • Collection expressions 現代化 — Analysis DTOs 和 BasePagedListVM 使用 C# 12 collection expressions(#707
  • .NET 10 效能優化 Phase 1a — FrozenDictionary、Lock、Span/stackalloc、string interpolation(#702

Fixed

  • Analysis Saved Query 存取控制強化(#710
  • BaseImportVM nullable — 移除 Core 專案最後一個 #nullable disable#703
  • Build warnings 清理(#693

Performance

  • Saved Query 刪除改用 ExecuteDeleteAsync#704

Notes

  • DateTimeOffset.UtcDateTime(非 .DateTime)用於所有 UTC 語境,避免 DateTimeKind.Unspecified 時區誤判
  • DateRange 新增 6 個 CreateUtc*() factory methods 支援 TimeProvider? 可選參數,原 static properties 保持向後相容

WTM 10.0.0 — .NET 10 LTS

20 Mar 14:00
4730161

Choose a tag to compare

WTM 10.0.0 — .NET 10 LTS

Breaking Release — 從 .NET 8 升級至 .NET 10,版本號跟隨 .NET 版本。

Highlights

  • 🚀 全面升級至 .NET 10 (LTS) — target framework、EF Core 10.0.4、ASP.NET Core 10.0.4
  • 📦 套件版本集中管理common.props 12 個 MSBuild 變數統一管理
  • 🔧 MySQL Provider 替換 — Pomelo → 官方 MySql.EntityFrameworkCore
  • 🔧 API Versioning 替換Microsoft.AspNetCore.Mvc.VersioningAsp.Versioning.Mvc

Breaking Changes

變更 影響
.NET 10 升級 TargetFramework 改為 net10.0
MySQL Provider UseMySql()UseMySQL(), namespace 變更
API Versioning 套件名稱與 API 變更
版本號 8.6.110.0.0

New Features

  • BaseCRUDVM 批量刪除預覽(GetDeletePreviewString()
  • BaseCRUDVM 樂觀並行衝突處理
  • ComboBox 遠端搜尋(remote-url
  • TreeSelect 懶加載(lazy-url
  • BaseImportVM 匯入進度回報 + 行內錯誤清單
  • BaseTemplateVM 欄位說明列
  • ETL 管理 UI 改進

Migration Guide

  1. TargetFramework net8.0net10.0
  2. 安裝 .NET 10 SDK
  3. MySQL: Pomelo.EntityFrameworkCore.MySqlMySql.EntityFrameworkCore
  4. API Versioning: Microsoft.AspNetCore.Mvc.VersioningAsp.Versioning.Mvc
  5. 更新 EF Core / ASP.NET Core 套件至 10.0.x

完整 CHANGELOG 見 CHANGELOG.md

WTM 8.6.1

17 Mar 09:59

Choose a tag to compare

WTM 8.6.1 — 2026-03-17

New Features

  • ETLCompositeEtlSource: 多來源 Union 模式,支援跨資料庫合併載入 (#425)
  • DashboardinferChartType: 自動選擇最佳圖表類型 (Bar/Line/Stacked/Card) (#431)
  • Dashboard — KPI 告警閾值著色,支援即時風控場景 (#386)
  • Dashboard — 響應式斷點,Widget 格局自動調整 (#344)
  • Analysis — Excel 匯出格式化:Bold header、自動欄寬、#,##0.00 數字格式 (#378)
  • Analysis — 合規匯出 Metadata sheet(QueryHash、欄位清單、查詢條件)(#385)
  • Analysis — VM 層級 + 欄位層級 RBAC ([AllowedRoles]) (#339 #341)
  • Analysis — 雙 Y 軸 + 金額縮放自動啟用 (#281)
  • Analysis — Ad-hoc Filter UI,BA 可動態新增篩選條件 (#313)
  • Analysis — CancellationToken 支援 (#326)

Bug Fixes

  • ETLValidate() 錯誤正確回報至 UI (#353);TriggerNow/Pause/Resume/Rerun 加入 400 錯誤處理 (#359 #367)
  • Analysis — CSV UTF-8 BOM 修復 Windows Excel 亂碼 (#379)
  • Analysis — 空資料友善提示訊息 (#383);GroupBy null byte 防護 (#372)
  • AnalysisAvg/Max/Min 空分組回傳 null 不誤回傳 0 (#336);Count 計算非 null 值 (#337)
  • Dashboard — WidgetType 空白驗證 (#382)

Test Coverage

本版本新增 50+ 測試,含 ETL 排程副作用、Analysis 多幣別精度、Dashboard XSS 防護、RBAC 邊界等。

Upgrade Notes

無破壞性變更,直接升級即可。

v8.6.0

12 Mar 05:15
340b4b4

Choose a tag to compare

WTM 8.6.0

New Features

  • ETL Module (WalkingTec.Mvvm.Etl): Complete batch data import pipeline

    • MSSQL and Oracle source databases support
    • Staging Table → MERGE INTO pattern for idempotent upserts
    • Three watermark modes: FullLoad, Timestamp, Identity
    • Quartz.NET scheduling with dynamic cron management
    • Management UI: Job CRUD, execution history, real-time progress monitoring
    • 80+ tests
  • Developer Manual (docs/wtm-developer-manual.md): 3000+ line comprehensive manual

    • 16 sections covering all framework features with scene-based examples
    • Covers: ViewModel, Controller, TagHelper, Analysis Mode, ETL, Dashboard, Security, Multi-tenant, Lookup Cache, Code Generator, and more

Security Fixes

  • Path traversal vulnerability in dashboard file storage
  • Tenant isolation bypass in dashboard API
  • GetMaxValue crash on empty result set

Full Changelog

See CHANGELOG.md

v8.5.1 — Fix duplicate attribute injection in CodeGen

11 Mar 07:58

Choose a tag to compare

修復

InjectAnalysisAttributes 重複注入

原正則要求 [Dimension]/[Measure] 緊鄰屬性宣告,當中間有 [Required] 等其他 attribute 或註解時無法偵測已存在的 attribute,導致重複插入造成編譯錯誤。改用字串區塊搜尋取代嚴格正則。(#162)

完整變更:CHANGELOG.md

🤖 Generated with Claude Code

v8.5.0 — Code Generator Analysis Mode Integration

11 Mar 07:41

Choose a tag to compare

Code Generator — Analysis Mode 整合

Code Generator 新增 Analysis Mode 支援,讓開發者在產生 CRUD scaffold 時一併設定分析欄位。

功能

  • EnableAnalysis checkbox 啟用分析模式
  • IsDimension/IsMeasure 欄位選擇(智慧預設:string/enum→Dimension、數值→Measure、DateTime→Dimension)
  • ListVM 自動加入 [EnableAnalysis] attribute
  • Model .cs 檔案自動插入 [Dimension]/[Measure] attribute(正則插入 + 幂等保護)
  • 10 個新測試

完整變更:CHANGELOG.md

🤖 Generated with Claude Code

v8.4.1 — QA Fixes: RefreshAsync Stampede + DecryptString FormatException

11 Mar 03:16

Choose a tag to compare

修復

RefreshAsync 快取踩踏漏洞

RefreshAsync 原先在鎖外執行 InvalidateTypeGetAllAsync,兩步之間存在競爭條件:其他 thread 可能在 invalidate 後寫入舊資料。修復後將 invalidate + load + set 三步移入 per-key SemaphoreSlim 鎖內,直接覆寫快取。

DecryptString FormatException

AES-256 升級後的 DecryptString 未捕捉非法 Base64 輸入的 FormatException,導致程式崩潰。補上 catch 回傳空字串,與舊版 DecryptStringLegacy 行為一致。

完整變更:CHANGELOG.md

🤖 Generated with Claude Code

v8.4.0 — Lookup Cache + AES-256

11 Mar 00:11

Choose a tag to compare

Lookup Cache — 靜態表/查找表快取系統

全新 Cache-Aside 快取機制,為頻繁讀取但極少變更的查找表提供零配置自動快取。

核心功能

  • [CacheLookup] Attribute 標記模型即啟用快取
  • WTMContext.GetLookup<T>() / GetLookupAsync<T>() 框架級 API
  • GetLookupItem<T>(predicate) 單筆查詢 + GetLookupSelectList<T>() 下拉選單整合
  • Per-key SemaphoreSlim stampede 防護 + RefreshAsync<T>() 手動刷新
  • ConnectionKey 多 DB 支援、全域 TenantIsolation 設定

安全

  • 連線字串加密從 DES (56-bit) 升級至 AES-256-CBC(DES 自動 fallback 相容)

品質

  • DPWhere 支援 in-memory IQueryable(EnumerableQuery 自動偵測)
  • 59 個新測試(36 Cache + 13 Encryption + 10 DPWhere)
  • 總測試數:425 通過

完整變更:CHANGELOG.md

🤖 Generated with Claude Code

v8.3.1 — Analysis Mode Phase 2

09 Mar 16:51
5e47b14

Choose a tag to compare

Analysis Mode Phase 2 — 跨 DB 分析引擎優化

本版本完成 Analysis Mode Phase 2 全部 16 項子任務(#91#106),涵蓋跨 DB 策略、日期鑽取、Pivot 樞紐表、圖表互動等功能。

基礎設施(Wave 1)

  • DateHierarchy enum + IsDate auto-detect (#91#93)
  • IGroupByStrategy 策略模式 — ServerSide + InProcess + auto-fallback (#94#96)
  • IAnalysisCache + QueryHash SHA256 快取層 (#97)

功能擴展(Wave 2)

  • DateTruncator 跨 DB 日期截斷 (#98)
  • 前端日期鑽取 UI + formatDateKey (#99)
  • API DTO 更新 — DimensionHierarchies (#100)
  • AnalysisPivotEngine 純記憶體 row-column 交叉 (#101)
  • Pivot 前端 — 樞紐模式 toggle、renderPivotTable/Chart (#102)
  • POST /_analysis/pivot API endpoint (#103)

進階互動(Wave 3)

  • 圖表 drill-down — ECharts click、drill stack、日期自動降階、麵包屑 UI (#104)
  • IAnalysisFieldPolicy 欄位級權限控制 (#105)
  • FilterOperator.In 多值篩選 (#106)

測試

  • MSTest + Jest 測試涵蓋 Engine fallback、DateTruncator、PivotEngine、Controller pivot、前端 drill-down、前端 pivot

Full Changelog: v8.3.0...v8.3.1

v8.3.0

09 Mar 11:50
0391edd

Choose a tag to compare

v8.3.0 (2026-03-09)

⚠️ Breaking Changes

  • 移除 Elsa 工作流整合:完全解耦 Elsa 2.x 依賴。如需工作流功能,請自行整合

Security

  • System.Text.Json 8.0.0 → 8.0.6(2× High CVE)
  • SixLabors.ImageSharp 3.1.3 → 3.1.12(6 CVEs)
  • DUWENINK.Captcha 0.7.0 → 0.8.0
  • npm audit fix for ReactDemo & Vue3Demo

Quality

  • 完成 Core 全部 168 個 #nullable disable 檔案的 nullable 現代化
  • 修復 7 個核心 ViewModel 的 null-forgiving 問題

Features

  • Analysis Mode: collectSelection() scoped to panel element
  • DateTimeTagHelper rendering-path tests
  • 修復 ipr_xs/ipr_sm 巢狀 container context 洩漏

Dependencies

  • Dependabot 批次更新(cross-spawn, nanoid, vite, vue, axios, lodash 等)

See CHANGELOG.md for full details.