ServerLoading

Phạm vi áp dụng

✅ Bravo 8 · ❌ Bravo 10 — thẻ chỉ có ở Bravo 8

Ý nghĩa

Khai báo các cột bổ sung vào câu lệnh query lấy dữ liệu từ server về client.

Được hiểu như một chuỗi FieldList sau mệnh đề SELECT trong câu lệnh SQL.

Thường dùng để:

  • Thêm trường được tính toán bằng hàm
  • Thêm cột hằng: <Ten_Truong>CAST(0 AS INT)</Ten_Truong>

Cú pháp phải hợp lệ với SQL

Cú pháp

<root>
  <Tables>
    <Ten_bang>
      <ServerLoading>
        <Ten_Truong>Bieu_Thuc</Ten_Truong>
      </ServerLoading>
    </Ten_bang>
  </Tables>
</root>

Ví dụ

Lấy UserName trước khi tải dữ liệu (để ẩn/hiện trạng thái chứng từ theo user) — khai báo ở ParentTable:

<ServerLoading>
  <UserName>'{=USER()}'</UserName>
</ServerLoading>

Thêm cột tính tồn kho sau mỗi dòng — khai báo trong <ChildTable_Sales>:

<ServerLoading>
  <QuantityAfterTrans>IIF(AllowIssueWhenNotEnough=0 OR
    {=Config('M_ShowCurrentINV')}=1,
    dbo.ufn_B30CurrentInventory_GetValue(BranchCode,'{=FiscalYear()}',
    WarehouseCode,ItemCode,'{=FiscalYear('DataCode')}',Null,Null,
    DocGroup,DocCode,Null),0)</QuantityAfterTrans>
</ServerLoading>

Ghi chú

Vì sao nên dùng ServerLoading thay vì sửa view?

Khi tạo view mà cần một cột phải tính toán từ hàm hoặc thủ tục sẽ rất chậm. Khai báo ở ServerLoading thì:

  • Chỉ thực thi ở 1 chức năng (trong khi view có thể được gọi ở nhiều chức năng)
  • Giảm tải cho server, chia sẻ phần xử lý cho các client

So sánh với TempColumns: TempColumns chỉ định nghĩa thêm cột; ServerLoading còn bao hàm cả việc xử lý dữ liệu của cột đó ngay trong câu query.

Cân nhắc

Có cơ chế tạo cột tạm trên Client không có nghĩa là tất cả các cột không có trong cấu trúc bảng đều nên xử lý ở layout. Cần cân nhắc theo từng bài toán cụ thể.

Ví dụ: Explorer chứng từ có cột tên đối tượng — bản chuẩn khai báo view vB30AccDoc_Explorer JOIN B20Customer để lấy CustomerName, hiệu quả hơn xử lý trên layout.

Ràng buộc bảo mật từ v4.7.0.1

Chương trình chặn các khai báo SELECT, DELETE, UPDATE, INSERT, TRUNCATE, FROM, INNER JOIN, GROUP BY… trong ServerLoading → xem Cơ chế lưu trữ B00Layout

Tương đương ở Bravo 10

Bravo 10 không có thẻ ServerLoading. Chức năng này được thay bằng khả năng khai báo câu truy vấn trực tiếp:

Nhu cầu ở B8Cách làm ở B10
Thêm cột tính toán<Columns> với biểu thức
JOIN lấy thêm dữ liệu<JoinCollection>
Lọc<FilterKey> / <FilterCollection>

→ Truy vấn dữ liệu Bravo 10

Liên quan

ServerLoaded · TempColumns · Truy vấn dữ liệu Bravo 10 · FilterKey