Chương 8: Valid_If vs Suggested Values - Nghệ thuật kiểm soát dữ liệu
"Dữ liệu rác vào (Garbage In) -> Dữ liệu rác ra (Garbage Out). Nhiệm vụ của bạn là chặn rác ngay từ cửa."
Ở chương trước, bạn đã làm quen với các hàm mạnh mẽ như SELECT, AND, IN. Bây giờ là lúc chúng ta sử dụng chính những "vũ khí" đó để xây dựng những hàng rào bảo vệ vững chắc cho ứng dụng.
Trong AppSheet, việc kiểm soát những gì người dùng được phép nhập là cực kỳ quan trọng. Chương này sẽ giúp bạn phân biệt rõ ràng hai khái niệm Valid_If và Suggested_Values, đồng thời áp dụng các công thức đã học để tạo ra các Dropdown thông minh.
Cuộc chiến giữa Valid_If và Suggested_Values
Đây là hai anh em sinh đôi nhưng tính cách hoàn toàn trái ngược nhau.
| Đặc điểm | Valid_If (Người gác cổng khó tính) |
Suggested_Values (Người trợ lý thân thiện) |
|---|---|---|
| Bản chất | Validation (Hard Constraint): Quy tắc cứng. |
Suggestion (Soft Constraint): Gợi ý mềm. |
| Hành vi | Nếu dữ liệu nhập vào không thỏa mãn công thức → Báo lỗi đỏ (-) và KHÔNG CHO LƯU. | Hiển thị một danh sách các giá trị gợi ý để người dùng chọn nhanh. Nhưng nếu họ muốn gõ một giá trị khác ngoài danh sách? → VẪN CHO LƯU (+). |
| Khi nào dùng? | Khi bạn muốn BẮT BUỘC dữ liệu phải chuẩn 100% (VD: Chọn Sản phẩm phải có trong kho). | Khi bạn muốn GIÚP user nhập nhanh nhưng vẫn cho phép linh động (VD: Gợi ý "Lý do hủy" phổ biến). |
Hai gương mặt của Valid_If
Tùy vào công thức bạn điền, Valid_If sẽ biến hình:
8.0.1 Dạng 1: Logic Checker (Trả về TRUE/FALSE)
Dùng các hàm Logic (AND, OR, NOT, So sánh) để kiểm tra đúng sai.
- Công thức:
[_THIS] > 18 - Kết quả: Chỉ cho nhập số lớn hơn 18.
8.0.2 Dạng 2: List Generator (Trả về LIST)
Dùng các hàm tạo List (SELECT, LIST, FILTER) để tạo Dropdown.
- Công thức:
Products[ProductName] - Kết quả: Dropdown danh sách sản phẩm.
8.1 Thực chiến: Các mẫu Valid_If phổ biến nhất
8.1.1 Level 1: Chặn trùng lặp (Unique Constraint)
Dùng hàm NOT và IN:
NOT(
IN(
[_THIS],
SELECT(
Customers[Phone],
[CustomerID] <> [_THISROW].[CustomerID]
)
)
)
8.1.2 Level 2: Dropdown phụ thuộc (Dependent Dropdown)
Dùng hàm SELECT có điều kiện:
SELECT(
Huyen[TenHuyen],
[Tinh] = [_THISROW].[ChonTinh]
)
Giải thích: Logic này yêu cầu bạn phải nắm vững cách hoạt động của SELECT (đã học ở Chương 7).
8.1.3 Level 3: Ràng buộc logic nghiệp vụ
- Ngày kết thúc phải lớn hơn ngày bắt đầu:
[_THIS] > [StartDate]
8.2 Vận dụng (Your Project)
Hãy kiểm tra lại App của bạn và thay thế các cột Enum cứng nhắc bằng Valid_If động để dữ liệu luôn được cập nhật theo thời gian thực.
8.3 Đúc kết: Nghệ thuật kiểm soát dữ liệu
Bạn đã có trong tay:
- Dữ liệu chuẩn (Chương 3, 4, 5).
- Công thức mạnh mẽ (Chương 7).
- Ràng buộc chặt chẽ (Chương 8).
Đã đến lúc ghép tất cả những mảnh ghép này lại để tạo ra một bức tranh tổng thể. Làm sao để hiển thị các chỉ số KPI từ dữ liệu đã qua xử lý? Làm sao để lọc danh sách theo User đã đăng nhập? Chương 9: "Dashboard & Reporting" sẽ hướng dẫn bạn cách xây dựng trung tâm chỉ huy (Command Center) cho doanh nghiệp.
8.4 Tài liệu tham khảo (Google Docs)
- Valid_If: Valid_If column constraint
- Show_If: Show_If column constraint
- Dropdown from Valid_If: Dependent Dropdowns