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 B00Layout với IsTemplate = 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 8Bravo 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>
AliasThẻ <Alias>Tên thẻ chính là Alias nếu không khai báo <Alias>
Kế thừaTemplatetemplate="TênGlobal" → GlobalTemplate
Xây dựng câu queryChủ yếu dựa vào view có sẵnKhai 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ẻB8B10Ghi 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ẻB8B10Ghi 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ẻB8B10Thờ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

2.5 Xử lý & kiểm tra

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".

Có 42 trang trong thư mục này.