Release Notes — WUIC Framework v1.7.14
Date: 25 September 2026 Previous published version: 1.7.13 (24 September 2026) Backend: .NET 10 + IIS / Linux nginx Frontend: Angular 21
This version comes from a load test with many concurrent users on a public installation: export and import of the same file, filters, sorting, reports. Export is four times faster and goes through a queue that protects the server; import reads back the files produced by export correctly, including lookups resolved from a repeated description. Two defects of grids with lookups and geographic columns are fixed as well.
📤 Export
- Faster and lighter. An XLSX export of 230,000 rows drops from 28.5 s to 7.4 s and from 12.2 GB to 2.3 GB of allocated memory. The file content does not change.
- Export queue. The server runs at most
maxConcurrentExportsexports at the same time (default: half the cores, at least 1). The others wait in arrival order, up tomaxQueuedExports(default 10). Beyond that, the request answers503 errors.metaservice.export.queue_full. - Visible wait. While the export is queued, the progress dialog and the notification bell show "Queued: position N". A queued export can be cancelled.
- Settings applied immediately. Both keys are in the settings editor (App Runtime section) and are read at every export, without a restart.
- Unique file name. Two exports of the same route started in the same second no longer write the same file (previously all but one answered 500).
📥 Import
Lookup columns in the file: fkey_mode. An importable route chooses how its lookup columns appear in the file, with import.fkey_mode in the route props bag:
description(default): the description, as in the grid;key: the key value;both: both, the description under the column title and the key under the physical name.
The import dialog shows the preselected choice and lets you change it for a single import. Export follows the same choice, so an exported file can be imported back as it is. use_descriptive_fkey is still accepted from clients that do not know fkey_mode.
Headers. Every column has its title as header. Only when two columns of the same file have the same title does the physical column name appear in parentheses.
Rules for lookups read from the description.
- Unique description: its key is used.
- Description shared by several records: on update the record keeps its current key, if it is one of the possible ones; otherwise the row is rejected with the list of candidate keys.
- Key and description in the same file that do not match: the row is rejected.
Other fixes.
- Excel date cells are read as dates: a file exported and imported back without changes is no longer rejected.
- A primary key that is also a lookup is resolved before the record existence check.
- The existence check uses SQL parameters instead of concatenating the file values.
🐛 Notable bug fixes
- Two lookups to the same table: the second column showed an empty description. Every foreign key now has its own alias in the query, on all databases.
- Geographic columns: sorting the grid by a
geographycolumn failed on SQL Server (error 249). In the first-run scripts the geographic columns havemc_disable_sortingenabled, so the grid does not offer sorting on them. - Available languages:
GetSupportedLanguagesreturns the languages of thelinguetable. - Reports:
reportQueryTimeoutis optional, with 120 seconds when missing; the key is in theappsettings.jsonof the packages. - First-run scripts: sequences and identities start after the loaded data, so the first insert does not collide with an existing key. In the tutorial,
Countries,DeliveryMethods,People,StateProvinces,CustomersandInvoicesgenerate the key themselves instead of asking for it in the form. - Oracle: identities are realigned at startup.
📦 Updated packages
| Package | From | To |
|---|---|---|
WuicCore |
1.7.13 | 1.7.14 |
Wuic.Webcore |
1.7.13 | 1.7.14 |
WuicOData |
1.7.13 | 1.7.14 |
RuntimeEfCore |
1.7.13 | 1.7.14 |
Wuic.MySqlProvider |
1.7.13 | 1.7.14 |
Wuic.PostgresProvider |
1.7.13 | 1.7.14 |
Wuic.OracleProvider |
1.7.13 | 1.7.14 |
wuic-framework-lib (npm) |
1.7.13 | 1.7.14 |
🔧 Recommended operational updates when upgrading
- Size the export queue: every full export of a large table uses about one core and 300 MB while writing. On a server shared with other applications set
maxConcurrentExportsbelow the default (for example2). - Importable routes: if your files contain keys and not descriptions, set
"import": { "fkey_mode": "key" }in the route props bag; withboththe export also produces the key columns. - Installations with the tutorial already loaded: the first-run scripts only apply to new installations. To remove sorting from the existing geographic columns run on the metadata database
UPDATE _metadati__colonne SET mcdisablesorting = 1 WHERE LOWER(mc_db_column_type) IN ('point', 'geography', 'geometry')and clear the metadata cache. - Clients reading progress from the notification WebSocket: the export progress message has the new
queuePositionfield, present while the export waits in the queue.