Validator — Tổng quan

Phạm vi áp dụng

✅ Bravo 8 · ✅ Bravo 10

Thẻ <Validators> chứa toàn bộ các khai báo kiểm tra dữ liệu hợp lệ.

Lịch sử

Bản Bravo 7: kiểm tra dữ liệu xử lý trong thẻ <ValidateRules> và file Bravo7.Validators trong thư mục _Output, hoặc dùng ServerConstraint.

Từ Bravo 8: toàn bộ xử lý kiểm tra sự hợp lệ của dữ liệu chỉ được xử lý trong thẻ <Validators> trong DataSource.

Bản chất của Validator

Validator không đảm bảo tuyệt đối

Validator được hiểu là các cảnh báo đối với người dùng ở Client trên giao diện, còn không đảm bảo giá trị tuyệt đối đúng khi dữ liệu được lưu vào bảng.

Vì vậy cần phải kết hợp với các khai báo điều kiện từ thiết kế cơ sở dữ liệu (VD: các khai báo Unique…).

Cơ chế hoạt động

flowchart TD
    A["Thay đổi giá trị cột<br/>trong SourceColumn"] --> B{"Thỏa mãn<br/>Expr?"}
    B -->|Không| Z["Bỏ qua"]
    B -->|Có| C["Chạy Validator"]
    C --> D{"zValidateExpr<br/>= True?"}
    D -->|True| E["Hợp lệ"]
    D -->|False| F["Hiển thị cảnh báo<br/>ở TargetColumn"]
    G["Trước khi lưu lên server"] --> C

Nguyên tắc:

  • Validator khai báo ở bảng nào thì chỉ có tác dụng ở bảng đó
  • Validator được chạy khi có sự thay đổi giá trị các cột khai báo trong SourceColumn và thỏa mãn các điều kiện khai báo
  • Sau đó Validator được chạy lại trước khi lưu vào server
  • Editor còn hỗ trợ đọc Validator khai báo trong Template — với điều kiện các cột tham chiếu phải tồn tại ở tất cả các form dùng template đó

Cân nhắc hiệu năng

Do cơ chế của Validator là kiểm tra với tất cả các dòng của bảng khi có sự thay đổi hoặc trước khi lưu, nên cần cân nhắc việc sử dụng Validator ở các bảng có nhiều dòng.

Cú pháp

<Validators>
  <Ten_Validator>
    <ClassName>Ten_classname</ClassName>
    <SourceColumn>Danh_sach_cot_kiem_tra</SourceColumn>
    <TargetColumn>Cot_hien_thi_loi</TargetColumn>
    <zValidateExpr>Bieu_thuc_kiem_tra</zValidateExpr>
    <Expr>Dieu_kien_chay</Expr>
    <Text>
      <Vietnamese>Câu cảnh báo</Vietnamese>
    </Text>
  </Ten_Validator>
</Validators>

Các ClassName

Mặc định

Nếu Validator không khai báo thẻ ClassName thì giá trị mặc định là BravoNullValidator.

ClassNameKiểm tra gì
BravoNullValidatorDữ liệu Null (mặc định)
BravoValidatorTính hợp lệ theo biểu thức tự viết
BravoFiscalDateValidatorNgày nằm trong kỳ hạch toán hoặc khóa dữ liệu
BravoUniqueKeyValidatorTính duy nhất trong CSDL
BravoServerConstraintValidatorGiá trị trả về từ hàm / thủ tục

Bảng thẻ hỗ trợ theo ClassName

ThẻNullBravoFiscalDateUniqueKeyServerConstraint
SourceColumn✅✅✅✅✅
TargetColumn✅✅✅✅✅
Caption✅✅✅✅✅
Expr✅✅✅✅✅
Text✅✅✅✅✅
zValidateExpr✅✅ (bắt buộc)✅❌❌
Command❌❌❌❌✅
FilterKey❌❌❌✅❌
Parameters❌❌❌❌✅
bEmptyAsNull / bZeroAsNull✅————
bAcceptLockedDate / bAcceptNullValue——✅——

Các thẻ cờ dùng chung

ThẻÝ nghĩaMặc định
bValidateIfModifyChỉ chạy khi giá trị có thay đổiFalse¹
bValidateIfNotEmptyChỉ chạy khi cột khác trắngFalse¹
bValidateNegateKiểm tra ngược lại điều kiện khai báoFalse
bValidateWarningCảnh báo vẫn cho lưu thay vì chặn lưuFalse
bEmptyAsNullChuỗi trắng cũng coi là NULLTrue
bZeroAsNullGiá trị 0 cũng coi là NULLTrue

¹ Trừ khi ClassName là BravoUniqueKeyValidator hoặc BravoServerConstraintValidator thì mặc định là True.

Câu thông báo mặc định

Nếu không khai báo thẻ Text, chương trình lấy câu thông báo mặc định theo ClassName:

ClassNameCâu thông báo mặc định
BravoNullValidatorKhông được bỏ trắng giá trị
BravoValidatorGiá trị không hợp lệ
BravoFiscalDateValidatorNgày phải nằm trong kỳ hạch toán hiện thời (từ ngày … đến ngày…)
BravoUniqueKeyValidatorĐã có giá trị tương tự
BravoServerConstraintValidatorGiá trị không hợp lệ

Liên quan

CommandValidators · Evaluator - Tổng quan · DataSource - Tổng quan · Template