BravoServerConstraintValidator

Phạm vi áp dụng

✅ Bravo 8 · ✅ Bravo 10

Ý nghĩa

Validator kiểm tra sự hợp lệ của giá trị trả về từ một hàm hoặc một thủ tục.

Quy ước giá trị trả về

  • Thủ tục / hàm trả về = 0 → dữ liệu hợp lệ
  • Trả về <> 0 → giá trị không hợp lệ

Các thẻ hỗ trợ

ThẻNội dung
SourceColumnDanh sách các trường cần kiểm tra
TargetColumnDanh sách cột hiển thị câu cảnh báo lỗi
CommandKhai báo hàm hoặc thủ tục
CaptionTiêu đề cột hiển thị thông báo lỗi
ExprĐiều kiện chạy validator
TextCâu hiển thị lỗi
zCustomConnectionNameKết nối đến Server khác
ParametersCác tham số truyền vào thủ tục check — cách khai báo tương tự ở BravoServerConstraint

Ví dụ 1 — kiểm tra số Serial tồn kho

Trong validator của bảng <ChildTable_Phys> trên phiếu xuất:

<ItemSerialNo_Unique>
  <ClassName>BravoServerConstraintValidator</ClassName>
  <Command>ufn_sys_CheckUniqueItemSerialNo</Command>
  <SourceColumn>FiscalYear,ItemCode,ItemSerialNo,WarehouseCode,DocGroup,RowId</SourceColumn>
  <Expr>!Empty(ItemSerialNo)</Expr>
  <Text>
    <Vietnamese>Số serial không có.</Vietnamese>
    <English>Serial number not found.</English>
  </Text>
</ItemSerialNo_Unique>

Ví dụ 2 — truyền cả bảng vào thủ tục check

Kiểm tra tổng số lượng xuất có vượt dự toán theo sản phẩm:

<CheckWarningOverCashPaymentPlan>
  <ClassName>BravoServerConstraintValidator</ClassName>
  <Command>usp_WarningOverItemPlan</Command>
  <SourceColumn>ProductCostId,ItemCode,Quantity</SourceColumn>
  <TargetColumn>ProductCostId,ItemCode,Quantity9</TargetColumn>
  <Expr>ISNULL(DebitAccount,'') LIKE '62%'</Expr>
  <Parameters>
    <BranchCode>BranchCode</BranchCode>
    <Stt>Stt</Stt>
    <ProductCostId>ProductCostId</ProductCostId>
    <ItemCode>ItemCode</ItemCode>
    <vB30AccDocItemIssue_Edit>*</vB30AccDocItemIssue_Edit>
  </Parameters>
  <bValidateIfModify>True</bValidateIfModify>
  <Text>
    <Vietnamese>Xuất kho vượt quá dự toán</Vietnamese>
    <English>Delivery over estimate</English>
  </Text>
</CheckWarningOverCashPaymentPlan>

Hai phương án cho bài toán "kiểm tra tổng"

CáchƯu điểmNhược điểm
C1 — Evaluator trong ServerUpdating / ServerCommandChỉ chạy 1 lần khi lưu → nhanhNgười dùng chỉ biết lỗi khi ấn Lưu
C2 — Validator dạng ServerConstraint truyền cả bảngCảnh báo ngay khi gõGọi thủ tục nhiều lần → cân nhắc tốc độ

Ghi chú

  • Danh sách cột trong SourceColumn tương ứng với các tham số truyền vào hàm/thủ tục khai báo trong Command — đúng thứ tự
  • Validator này chỉ chạy khi có sự thay đổi giá trị các cột trong SourceColumn. Muốn luôn chạy → kết hợp bValidateIfModify
  • Với Validator này thì ngầm định bValidateIfModify và bValidateIfNotEmpty là True

Từ v4.1.7.0

Gộp DataValidation vào LayoutEngine — việc tạo và thực hiện validators dùng chung cơ chế với evaluators.

  • Nếu không khai báo Parameters → sử dụng SourceColumn làm các tham số như trước
  • Nếu có khai báo Parameters → bỏ qua SourceColumn

Điều đó có nghĩa là tham số truyền vào thủ tục hoàn toàn có thể là cả dataset trên màn hình Editor.

Liên quan

BravoServerConstraint · Command · Parameters · bValidateIfModify · Validator Overview