Tài liệu này được dịch bởi AI. Đối với bất kỳ thông tin không chính xác nào, vui lòng tham khảo phiên bản tiếng Anh
Plugin Sự kiện Trước Thao tác cung cấp một cơ chế chặn các thao tác. Cơ chế này được kích hoạt sau khi yêu cầu tạo mới, cập nhật hoặc xóa một bản ghi được gửi đi, nhưng trước khi yêu cầu đó được xử lý.
Nếu một nút “Kết thúc luồng công việc” được thực thi trong luồng công việc đã kích hoạt, hoặc nếu bất kỳ nút nào khác thực thi thất bại (do lỗi hoặc không hoàn thành), thao tác trên biểu mẫu sẽ bị chặn. Ngược lại, thao tác dự kiến sẽ được thực thi bình thường.
Khi sử dụng cùng với nút “Thông báo phản hồi”, bạn có thể cấu hình thông báo phản hồi trả về cho client, cung cấp các thông tin gợi ý phù hợp. Sự kiện Trước Thao tác có thể được dùng để thực hiện xác thực nghiệp vụ hoặc kiểm tra logic, nhằm chấp thuận hoặc chặn các yêu cầu thao tác tạo mới, cập nhật và xóa do client gửi đi.
Khi tạo một luồng công việc, hãy chọn loại “Sự kiện Trước Thao tác”:

Trong bộ kích hoạt của một luồng công việc chặn, điều đầu tiên cần cấu hình là bộ sưu tập tương ứng với thao tác:

Sau đó, chọn chế độ chặn. Bạn có thể chọn chỉ chặn các nút thao tác đã liên kết với luồng công việc này, hoặc chặn tất cả các thao tác đã chọn cho bộ sưu tập này (không phân biệt đến từ biểu mẫu nào và không cần liên kết với luồng công việc tương ứng):

Hiện tại, các loại thao tác được hỗ trợ bao gồm “Tạo mới”, “Cập nhật” và “Xóa”. Bạn có thể chọn nhiều loại thao tác cùng lúc.
Nếu bạn đã chọn chế độ “Chỉ kích hoạt chặn khi biểu mẫu liên kết với luồng công việc này được gửi” trong cấu hình kích hoạt, bạn cần quay lại giao diện biểu mẫu và liên kết luồng công việc này với nút thao tác tương ứng:

Trong cấu hình liên kết luồng công việc, hãy chọn luồng công việc tương ứng. Thông thường, ngữ cảnh dữ liệu kích hoạt mặc định là “Toàn bộ dữ liệu biểu mẫu” là đủ:

Các nút có thể liên kết với Sự kiện Trước Thao tác hiện chỉ hỗ trợ các nút “Gửi” (hoặc “Lưu”), “Cập nhật dữ liệu” và “Xóa” trong các biểu mẫu tạo mới hoặc cập nhật. Nút “Kích hoạt luồng công việc” không được hỗ trợ (nút này chỉ có thể liên kết với “Sự kiện Sau Thao tác”).
Trong “Sự kiện Trước Thao tác”, có hai điều kiện sẽ khiến thao tác tương ứng bị chặn:
Sau khi các điều kiện chặn được đáp ứng, thao tác tương ứng sẽ không còn được thực thi. Ví dụ, nếu việc gửi đơn hàng bị chặn, dữ liệu đơn hàng tương ứng sẽ không được tạo.
Trong luồng công việc loại “Sự kiện Trước Thao tác”, đối với các thao tác khác nhau, bộ kích hoạt có các dữ liệu khác nhau có thể được sử dụng làm biến trong luồng công việc:
| Loại thao tác \ Biến | “Người thực hiện” | “Mã định danh vai trò người thực hiện” | Tham số thao tác: “ID” | Tham số thao tác: “Đối tượng dữ liệu đã gửi” |
|---|---|---|---|---|
| Tạo một bản ghi | ✓ | ✓ | - | ✓ |
| Cập nhật một bản ghi | ✓ | ✓ | ✓ | ✓ |
| Xóa một hoặc nhiều bản ghi | ✓ | ✓ | ✓ | - |
Biến “Dữ liệu kích hoạt / Tham số thao tác / Đối tượng dữ liệu đã gửi” của Sự kiện Trước Thao tác không phải là dữ liệu thực tế trong cơ sở dữ liệu, mà chỉ là các tham số liên quan được gửi cùng thao tác. Nếu bạn cần dữ liệu thực tế từ cơ sở dữ liệu, bạn cần truy vấn dữ liệu liên quan thông qua nút “Truy vấn dữ liệu” trong luồng công việc.
Ngoài ra, đối với thao tác xóa, khi nhắm mục tiêu một bản ghi duy nhất, “ID” trong các tham số thao tác là một giá trị đơn giản, trong khi khi nhắm mục tiêu nhiều bản ghi, “ID” trong các tham số thao tác là một mảng.
Sau khi cấu hình bộ kích hoạt, bạn có thể tùy chỉnh logic phán đoán liên quan trong luồng công việc. Thông thường, bạn sẽ sử dụng chế độ phân nhánh của nút “Điều kiện” để quyết định có “Kết thúc luồng công việc” hay không và trả về “Thông báo phản hồi” đã đặt trước, dựa trên kết quả phán đoán điều kiện nghiệp vụ cụ thể:

Đến đây, cấu hình của luồng công việc tương ứng đã hoàn tất. Bạn có thể thử gửi một dữ liệu không đáp ứng cấu hình điều kiện trong luồng công việc để kích hoạt logic chặn của bộ chặn. Lúc này, bạn sẽ thấy thông báo phản hồi được trả về:

Nếu nút “Kết thúc luồng công việc” được cấu hình để thoát với trạng thái “Thành công”, và khi nút này được thực thi, yêu cầu thao tác vẫn sẽ bị chặn, nhưng thông báo phản hồi trả về sẽ hiển thị với trạng thái “Thành công” (thay vì “Lỗi”):

Kết hợp với các hướng dẫn cơ bản ở trên, chúng ta hãy lấy một kịch bản “Gửi đơn hàng” làm ví dụ. Giả sử chúng ta cần kiểm tra tồn kho của tất cả các sản phẩm mà người dùng đã chọn khi họ gửi đơn hàng. Nếu tồn kho của bất kỳ sản phẩm nào không đủ, việc gửi đơn hàng sẽ bị chặn và một thông báo gợi ý tương ứng sẽ được trả về. Luồng công việc sẽ lặp lại để kiểm tra từng sản phẩm cho đến khi tất cả các sản phẩm đều có đủ tồn kho, sau đó sẽ tiếp tục và tạo dữ liệu đơn hàng cho người dùng.
Các bước khác tương tự như trong hướng dẫn. Tuy nhiên, vì một đơn hàng liên quan đến nhiều sản phẩm, ngoài việc thêm mối quan hệ nhiều-nhiều “Đơn hàng” <-- m:1 -- “Chi tiết đơn hàng” -- 1:m --> “Sản phẩm” khi mô hình hóa dữ liệu, bạn còn cần thêm một nút “Lặp” vào luồng công việc “Sự kiện Trước Thao tác” để lặp lại kiểm tra xem tồn kho của từng sản phẩm có đủ hay không:

Đối tượng cho vòng lặp được chọn là mảng “Chi tiết đơn hàng” từ dữ liệu đơn hàng đã gửi:

Nút điều kiện trong luồng công việc lặp được sử dụng để xác định xem tồn kho của đối tượng sản phẩm hiện tại trong vòng lặp có đủ hay không:

Các cấu hình khác tương tự như trong phần sử dụng cơ bản. Khi đơn hàng cuối cùng được gửi, nếu bất kỳ sản phẩm nào có tồn kho không đủ, việc gửi đơn hàng sẽ bị chặn và một thông báo gợi ý tương ứng sẽ được trả về. Khi thử nghiệm, hãy thử gửi một đơn hàng với nhiều sản phẩm, trong đó một sản phẩm có tồn kho không đủ và một sản phẩm khác có đủ tồn kho. Bạn có thể thấy thông báo phản hồi được trả về:

Có thể thấy, thông báo phản hồi không chỉ ra rằng sản phẩm đầu tiên “iPhone 15 pro” thiếu tồn kho, mà chỉ chỉ ra rằng sản phẩm thứ hai “iPhone 14 pro” thiếu tồn kho. Điều này là do trong vòng lặp, sản phẩm đầu tiên có đủ tồn kho nên không bị chặn, trong khi sản phẩm thứ hai thiếu tồn kho nên đã chặn việc gửi đơn hàng.
Bản thân Sự kiện Trước Thao tác được đưa vào giai đoạn xử lý yêu cầu, vì vậy nó cũng hỗ trợ kích hoạt thông qua các lệnh gọi HTTP API.
Đối với các luồng công việc được liên kết cục bộ với một nút thao tác, bạn có thể gọi chúng như sau (lấy nút tạo của bộ sưu tập posts làm ví dụ):
Trong đó, tham số URL triggerWorkflows là khóa (key) của luồng công việc; nhiều khóa luồng công việc được phân tách bằng dấu phẩy. Khóa này có thể được lấy bằng cách di chuột qua tên luồng công việc ở phía trên cùng của canvas luồng công việc:

Sau khi lệnh gọi trên được thực hiện, Sự kiện Trước Thao tác cho bộ sưu tập posts tương ứng sẽ được kích hoạt. Sau khi luồng công việc tương ứng được xử lý đồng bộ, dữ liệu sẽ được tạo và trả về bình thường.
Nếu luồng công việc đã cấu hình đi đến “nút kết thúc”, logic sẽ tương tự như thao tác trên giao diện: yêu cầu sẽ bị chặn và không có dữ liệu nào được tạo. Khi trạng thái của nút kết thúc được cấu hình là thất bại, mã trạng thái phản hồi trả về sẽ là 400; nếu thành công, nó sẽ là 200.
Nếu nút “Thông báo phản hồi” cũng được cấu hình trước nút kết thúc, thông báo được tạo cũng sẽ được trả về trong kết quả phản hồi, trong đó cấu trúc khi có lỗi là:
Cấu trúc thông báo khi “nút kết thúc” được cấu hình là thành công là:
Vì có thể thêm nhiều nút “Thông báo phản hồi” trong một luồng công việc, nên cấu trúc dữ liệu của thông báo trả về là một mảng.
Nếu Sự kiện Trước Thao tác được cấu hình ở chế độ toàn cục, khi gọi HTTP API, bạn không cần sử dụng tham số URL triggerWorkflows để chỉ định luồng công việc tương ứng, mà chỉ cần gọi trực tiếp thao tác của bộ sưu tập tương ứng là có thể kích hoạt.
Khi gọi HTTP API để kích hoạt Sự kiện Trước Thao tác, bạn cũng cần chú ý đến trạng thái kích hoạt của luồng công việc và liệu cấu hình bộ sưu tập có khớp hay không, nếu không, lệnh gọi có thể không thành công hoặc xảy ra lỗi.