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à fileBravo7.Validatorstrong thư mục_Output, hoặc dùngServerConstraint.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.
| ClassName | Kiểm tra gì |
|---|---|
| BravoNullValidator | Dữ liệu Null (mặc định) |
| BravoValidator | Tính hợp lệ theo biểu thức tự viết |
| BravoFiscalDateValidator | Ngày nằm trong kỳ hạch toán hoặc khóa dữ liệu |
| BravoUniqueKeyValidator | Tính duy nhất trong CSDL |
| BravoServerConstraintValidator | Giá trị trả về từ hàm / thủ tục |
Bảng thẻ hỗ trợ theo ClassName
| Thẻ | Null | Bravo | FiscalDate | UniqueKey | ServerConstraint |
|---|---|---|---|---|---|
| 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ĩa | Mặc định |
|---|---|---|
| bValidateIfModify | Chỉ chạy khi giá trị có thay đổi | False¹ |
| bValidateIfNotEmpty | Chỉ chạy khi cột khác trắng | False¹ |
| bValidateNegate | Kiểm tra ngược lại điều kiện khai báo | False |
| bValidateWarning | Cảnh báo vẫn cho lưu thay vì chặn lưu | False |
| bEmptyAsNull | Chuỗi trắng cũng coi là NULL | True |
| bZeroAsNull | Giá trị 0 cũng coi là NULL | True |
¹ 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:
| ClassName | Câu thông báo mặc định |
|---|---|
| BravoNullValidator | Không được bỏ trắng giá trị |
| BravoValidator | Giá trị không hợp lệ |
| BravoFiscalDateValidator | Ngà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ự |
| BravoServerConstraintValidator | Giá trị không hợp lệ |
Liên quan
CommandValidators · Evaluator - Tổng quan · DataSource - Tổng quan · Template