Hủy workflow đang chạy là yêu cầu thay đổi tương lai của quy trình, không phải chiếc nút đưa mọi hệ thống về quá khứ. Nếu bước giữ hàng đã xong và bước thanh toán đang chờ kết quả, việc dừng worker không đủ để kết luận đơn hàng đã hủy. Cần biết tác động nào đã xảy ra, tác động nào chưa rõ và bước bù trừ nào được phép thực hiện.
Hủy workflow cần một trạng thái trung gian
“Đã nhận yêu cầu hủy” khác “đã hủy xong”. Trạng thái như cancel_requested giúp hệ thống ngừng nhận thêm bước mới nhưng vẫn theo dõi phần đang chạy. Nếu giao diện đổi ngay sang canceled, nhân viên có thể hoàn tiền hoặc giao lại hàng trong khi thao tác cũ chưa dừng. Tên trạng thái cần phản ánh điều đã biết, không chỉ điều người dùng mong muốn.
Quy trình phải chỉ rõ ai được yêu cầu hủy, hạn cuối và phạm vi. Có bước có thể bỏ qua trước khi bắt đầu; có bước hỗ trợ hủy từ nhà cung cấp; có bước đã hoàn tất chỉ còn cách bù trừ. Mỗi loại cần một quyết định riêng, thay vì dùng cùng lệnh stop cho toàn bộ chuỗi.
Lập sổ tác động trước khi lập nút hủy
| Bước | Bằng chứng tác động | Phương án hủy |
|---|---|---|
| Giữ hàng | Mã giữ và trạng thái kho | Giải phóng đúng lượt giữ |
| Thu tiền | Mã giao dịch, trạng thái đối soát | Hoàn tiền theo quyền và quy tắc |
| Gửi hàng | Mã vận đơn và mốc bàn giao | Hỏi nhà vận chuyển, không xóa dòng |
| Gửi thông báo | Thông báo đã gửi | Thông báo đính chính nếu cần |
Bảng là minh họa giả định. Nó cho thấy “undo” không phải lúc nào cũng tồn tại: email đã đọc không thể thu hồi bằng cách xóa log; hàng đã giao không trở về kho vì một trường trạng thái thay đổi. Mỗi tác động cần giữ ID đối chiếu và điều kiện nghiệp vụ cho phương án xử lý tiếp theo.

Bù trừ không phải rollback cơ sở dữ liệu
Theo mẫu Compensating Transaction của Azure, bù trừ là hành động phù hợp nghiệp vụ để xử lý tác động của các bước trước; nó không nhất thiết phục hồi nguyên trạng. Khi đã có giao dịch khác diễn ra xen kẽ, ghi đè về bản cũ có thể làm mất thay đổi hợp lệ. Cần biết bước bù trừ phụ thuộc gì và dữ liệu nào phải giữ lại để tiếp tục nếu chính nó gặp lỗi.
Ví dụ một lượt giữ hàng đã chuyển thành phiếu xuất. Lệnh giải phóng lượt giữ cũ có thể không còn ý nghĩa; cần quy trình xử lý phiếu xuất theo trạng thái thực tế. Không biến ví dụ thành công thức chung cho kế toán hay vận chuyển. Người phụ trách nghiệp vụ phải duyệt điều kiện và quyền thực hiện trước khi tự động hóa.
Cuộc đua giữa hoàn tất và yêu cầu hủy
Worker có thể hoàn tất đúng lúc người dùng nhấn hủy. Nếu hai phía ghi trạng thái độc lập, bản ghi cuối cùng có thể nói canceled trong khi tác động đã xảy ra. Cần dùng phiên bản trạng thái hoặc cơ chế chuyển trạng thái có điều kiện, rồi đọc lại tác động thực. Kết quả hủy phải ghi rõ bước nào dừng, bước nào đã hoàn tất và bước nào đang cần xác minh.
Trường hợp request bên ngoài timeout càng cần thận trọng. Không tự gửi lệnh bù trừ cho một tác động chưa biết có xảy ra hay không. Trước hết tra cứu bằng mã giao dịch theo hợp đồng nhà cung cấp. Nếu không thể xác minh, chuyển cho người phụ trách với dữ liệu tối thiểu cần thiết, không ép hệ thống chọn một trạng thái cuối đẹp mắt.
Gói bàn giao để kiểm thử đúng ranh giới
Chuẩn bị ca yêu cầu hủy trước bước đầu, giữa hai bước, trong lúc chờ kết quả và sau mốc không thể đảo ngược. Cần thêm ca bù trừ thất bại và yêu cầu hủy lặp lại. Tiêu chí là tác động được đối chiếu, thao tác không nhân đôi và người dùng thấy trạng thái trung thực. Đây là danh sách ca cần chạy, chưa phải bằng chứng nghiệm thu.
Để trao đổi với Onter về một workflow hiện có, hãy cung cấp sơ đồ các bước, hệ thống ngoài liên quan và mốc nghiệp vụ không thể tự đảo ngược. Phần việc cần làm có thể chỉ là bổ sung sổ tác động và màn hình chờ xác minh; không nên bắt đầu bằng cam kết “hủy được mọi trường hợp”.
Đọc thêm theo vấn đề liên quan: API timeout khi tạo đơn: xác minh kết quả trước khi gửi lại.
Đọc thêm theo vấn đề liên quan: Phê duyệt hết hạn trước khi thực thi: kiểm lại đúng phiên bản yêu cầu.
Trao đổi phạm vi phát triển và tích hợp tại dịch vụ gia công phần mềm Onter. Tài liệu mẫu cần được che thông tin nhạy cảm trước khi chia sẻ.
Nguồn kỹ thuật
Tài liệu chính thức cho chủ đề hủy workflow. Quy trình, bảng kiểm và ví dụ trong bài là đề xuất biên tập; chưa phải log triển khai hay chứng nhận sản phẩm.

