Tổng quan Core
Core là gì? Cách bạn sẽ làm việc với nó hàng ngày.
Core là gì?
Core là 1 framework low-code. Bạn không vẽ giao diện bằng code — bạn insert dữ liệu cấu hình vào DB và Core tự render màn hình.
1 row Feature + nhiều row ComponentGroup + nhiều row Component
"Mã màn hình" "Section / phân vùng layout" "Field / widget cụ thể"
▼ Core tự render
Một màn hình hoàn chỉnh trong app
Bạn chỉ viết vài dòng C# ở TMS.UI để nói cho Core biết: “đây là màn hình của entity X, mở dạng tab hay popup”. Toàn bộ phần còn lại — render Textbox, Datepicker, GridView, validation, save, … — Core lo.
2 loại màn hình duy nhất
| Loại | Class kế thừa | Hành vi |
|---|---|---|
| Tab full màn hình | TabEditor | Mở trong tab strip của portal. User có thể mở nhiều tab cùng lúc. |
| Popup modal | PopupEditor | Mở chồng lên màn hình hiện tại như dialog. Đóng quay về context cũ. |
Đó là toàn bộ lựa chọn. Khi bạn build feature mới, chỉ cần quyết định: tab hay popup. Sau đó khai báo class C# tương ứng:
// Mở dạng tab
public class CustomerListBL : TabEditor
{
public CustomerListBL() : base(nameof(Customer))
{
Title = "Khách hàng";
Icon = "icons/customers.png";
}
}
// Mở dạng popup
public class CustomerEditorBL : PopupEditor
{
public CustomerEditorBL() : base(nameof(Customer))
{
Title = "Sửa khách hàng";
}
}
base(nameof(Customer)) ⇒ Core tự lookup row Feature trong DB có Name = "Customer", load cấu hình section/component, render.
Bạn làm gì?
1. Cấu hình DB
Mở màn hình “Quản lý Feature” trong app, thêm/sửa các row:
- 1 row
Featurecho mỗi màn hình - Vài row
ComponentGroupcho các vùng layout (header, body, panel con) - Nhiều row
Componentcho từng ô input / button / grid
→ Cấu hình UI từ DB hướng dẫn chi tiết.
2. Viết class C#
Mở TMS.UI/Business/<Feature>/<Feature>BL.cs, kế thừa TabEditor hoặc PopupEditor:
public class CustomerListBL : TabEditor
{
public CustomerListBL() : base(nameof(Customer))
{
Title = "Khách hàng";
}
// Method bạn viết sẽ được wire vào row Component có Events tương ứng
public void ExportExcel(object arg) { /* ... */ }
}
3. (Khi cần) Override hành vi đặc biệt
Mặc định Core lo hết: load entity từ API, render section, save khi click btnSave, …
Khi cần custom (validate trước save, refresh sau save, mở popup lồng nhau, …) → dùng helper Core cung cấp:
// Tìm component theo Name (config DB)
var grid = this.FindComponentByName<GridView>("Grid");
// Mở 1 popup khác
await this.OpenPopup(nameof(Customer), () => new CustomerEditorBL());
// Validate trước save (đa số check đặt vào Component.Validation trong DB)
public override async Task<bool> Save(object entity)
{
if (!await this.IsFormValid()) return false; // check toàn bộ rule cấu hình
return await base.Save(entity);
}
// Hook sau khi save xong
AfterSaved = ok => { if (ok) Toast.Success("Đã lưu"); };
→ Helpers thường dùng liệt kê đầy đủ.
Các bước đầu tiên
- Cấu trúc dự án — biết file cần mở ở đâu trong
TMS.UI/Business/. - Tạo 1 màn hình mới (E2E) — đi từ entity tới tab chạy được.
- Tham chiếu component — tra cứu
ComTypenào cấu hình field DB nào.
Lưu ý: docs này chỉ ghi cách dùng Core. Internals của framework (cách Core compile từ C# sang JS, vòng đời render, base class…) không có ở đây — vì bạn không cần biết để làm việc. Mọi thứ bạn cần đều là cấu hình DB + 1 class kế thừa
TabEditor/PopupEditor.