DataSource — Tổng quan
Phạm vi áp dụng
✅ Bravo 8 · ✅ Bravo 10 — ⚠️ cấu trúc gốc khác nhau đáng kể, xem mục 2
DataSource chứa toàn bộ các khai báo liên quan đến việc xử lý dữ liệu của form. Layout chỉ khai báo hiển thị các Control.
- Lưu trong
B00LayoutvớiIsTemplate = 3→ Cơ chế lưu trữ B00Layout - Một màn hình có thể có nhiều layout nhưng chỉ có 1 DataSource
- Việc tách DataSource ra khỏi layout để layout trở về đúng bản chất là chỉ hiển thị dữ liệu
1. Khung khai báo
Bravo 8
<root>
<Tables>
<ParentTable>
<Name>vB30AccDoc_EditSales</Name>
<Alias>Ct</Alias>
<FilterKey>DocCode='DV'</FilterKey>
<!-- sự kiện, evaluator, validator... -->
</ParentTable>
<ChildTable_Sales>
<Name>vB30AccDocSales_Edit</Name>
<Alias>Ct0</Alias>
<ParentTable>Ct</ParentTable>
<ParentKey>RowId</ParentKey>
<ChildKey>RowId</ChildKey>
</ChildTable_Sales>
</Tables>
</root>Bravo 10
<root>
<TableCollection>
<Ct template="AccDoc_Edit">
<Name>vB30BizDoc_Explore</Name>
<Columns>*</Columns>
<ChildCollection>
<ChildTable_PayDocDetail>
<Name>vB30PayDocDetail_Explore</Name>
<Alias>PayDocDetail</Alias>
<ParentKey>RowId</ParentKey>
<ChildKey>RowId_SourceDoc</ChildKey>
</ChildTable_PayDocDetail>
</ChildCollection>
</Ct>
</TableCollection>
</root>Khác biệt then chốt
Bravo 8 Bravo 10 Thẻ gốc chứa bảng <Tables><TableCollection>Khai báo bảng con <ChildTable_X>ngang hàng, trỏ ngược bằng<ParentTable>Lồng trong <ChildCollection>Alias Thẻ <Alias>Tên thẻ chính là Alias nếu không khai báo <Alias>Kế thừa Template template="TênGlobal"→ GlobalTemplateXây dựng câu query Chủ yếu dựa vào view có sẵn Khai báo JOIN / GROUP / HAVING / SORT ngay trên layout → Truy vấn dữ liệu Bravo 10
2. Bản đồ thẻ theo nhóm chức năng
2.1 Định nghĩa bảng & quan hệ
| Thẻ | B8 | B10 | Ghi chú |
|---|---|---|---|
| Name | ✅ | ✅ | Tên bảng / view |
| Alias | ✅ | ✅ | Bí danh |
| ParentKey · ChildKey | ✅ | ✅ | Cột liên kết mẹ–con |
| [[ParentTable (thẻ quan hệ) | ParentTable / ParentKey / ChildKey]] | ✅ | ✅ |
| FilterKey | ✅ | ✅ | Điều kiện WHERE |
| Truy vấn dữ liệu Bravo 10 | ❌ | ✅ | Source, JoinCollection, Group, Having, Sort, SelectType, Recursive… |
| GlobalTemplate | ❌ | ✅ | Khai báo 1 nơi, dùng nhiều nơi |
| Template | ✅ | ✅ | Thiết lập chung nhiều form |
| dataAccessMode | ❌ | ✅ | Write / ReadOnly |
| ReadOnly | ✅ | ✅ | Bảng có được lưu không |
| PageSize | ❌ | ✅ | Số bản ghi mỗi trang |
| TreeNodeKeyMember | ✅ | ✅ | Hiển thị dạng cây |
2.2 Định nghĩa cột bổ sung
| Thẻ | B8 | B10 | Ghi chú |
|---|---|---|---|
| ServerLoading | ✅ | ❌ | Thêm cột vào câu SELECT — B10 dùng Columns/Source |
| TempColumns | ✅ | ✅ | Cột tạm phía client |
| Expressions | ✅ | ✅ | Macro biểu thức |
| DefaultValues | ✅ | ✅ | Giá trị ngầm định |
| Views | ✅ | ❌ | View ảo để binding control |
| TempTable | ✅ | ⚠️ | B10 đổi thành TempTableCollection |
2.3 Sự kiện dữ liệu
→ Xem toàn cảnh tại Vòng đời sự kiện Editor
| Thẻ | B8 | B10 | Thời điểm |
|---|---|---|---|
| ServerLoading | ✅ | ❌ | Trước khi query |
| ServerLoaded | ✅ | ✅ | Sau khi tải dữ liệu (F3 / Ctrl+F2) |
| RowSelected | ❌ | ✅ | Khi bản ghi được chọn |
| ColumnChanging | ✅ | ✅ | Đang thay đổi giá trị ô |
| ColumnChanged | ✅ | ✅ | Đã thay đổi giá trị ô |
| RowAdded | ✅ | ✅ | Thêm dòng |
| RowCopied | ✅ | ✅ | Nhân bản (Ctrl+F2) |
| RowImported | ✅ | ✅ | Thêm dòng khi import |
| RowDeleting | ✅ | ✅ | Bắt đầu xóa dòng |
| TableSummed | ✅ | ❌ | Sau khi xóa xong (tên cũ RowDeleted) |
| DeleteRowEvent | ❌ | ✅ | Sau khi xóa dữ liệu của bảng |
| TableMerged | ❌ | ✅ | Sau khi merge dữ liệu vào bảng |
| ServerUpdating | ✅ | ❌ | Trước khi lưu — B10 dùng BeforeTransaction |
| BeforeTransaction | ❌ | ✅ | Trước khi lưu (client) |
| ServerCommand | ✅ | ✅ | Thủ tục quanh transaction |
| ServerUpdated | ✅ | ✅ | Sau khi lưu |
| ServerCommit | ✅ | ❌ | Thay giá trị cột trong INSERT/UPDATE |
2.4 Hành vi sao chép & lưu
| Thẻ | B8 | B10 |
|---|---|---|
| CopyList · CopyListNew · CopyMode | ✅ | ✅ |
| RefreshColumnList | ✅ | ✅ |
| UniqueKey | ✅ | ✅ |
| AssignmentUpdateList | ✅ | ✅ |
| RetrieveChangeLog · bShowChangeLog | ❌ | ✅ |
2.5 Xử lý & kiểm tra
| Thẻ | B8 | B10 |
|---|---|---|
| Evaluators · Evaluator_X · EvaluatorGroups | ✅ | ✅ |
| CommandValidators | ✅ | ✅ |
| Validators | ✅ | ✅ |
| CommandCollection | ❌ | ✅ |
| ParametersTable | ❌ | ✅ |
| RequeryCondition | ❌ | ✅ |
3. Lưu ý khi khai báo
Từ tài liệu gốc
- Tính năng lưu nháp: mặc dù mỗi màn hình chỉ có 1 khai báo DataSource, người dùng hoàn toàn có thể thử các tác động bằng việc sửa đổi và lưu nháp.
- Khi khai báo các thẻ có sử dụng biểu thức, chú ý attribute
Expr="True"→ Quy ước cú pháp XML.- Ngoại lệ: thẻ Text trong Grid không phải khai báo
Expr="True".