Hướng dẫn di chuyển phía Client từ v1 sang v2
Hướng dẫn này mô tả cách di chuyển code phía client của plugin mở rộng Workflow từ v1 sang v2. Thay đổi cốt lõi trong client v2 là thay thế cấu hình UI khai báo bằng Formily Schema sang phương pháp Loader + component React/antd thuần.
Tổng quan
Các thay đổi chính
- Thay đổi đường dẫn import:
@nocobase/plugin-workflow/client→@nocobase/plugin-workflow/client-v2, class cơ sở plugin@nocobase/client→@nocobase/client-v2 - Thay đổi mô hình cấu hình UI: Từ đối tượng Formily Schema (
fieldset) sang component React được lazy-load bởi Loader (FieldsetLoader) - Loại bỏ thuộc tính
scope/components: Không còn cần inject đối tượng scope hoặc component vào Schema, chỉ cần import và sử dụng trực tiếp trong component React
Ánh xạ đường dẫn import
Quy tắc chung
Mô hình Loader
v2 sử dụng các thuộc tính kiểu LoaderOf để thay thế fieldset và các đối tượng Formily Schema khác của v1. Loader về bản chất là một hàm trả về Promise<{ default: ComponentType }>, cho phép tách code và lazy loading thông qua import() động:
Nếu cần trỏ tới một named export (thay vì default export), sử dụng .then() để ánh xạ lại:
Cú pháp component cấu hình
Component được load bởi Loader là một React function component tiêu chuẩn, sử dụng Form.Item của antd để xây dựng form. Đường dẫn trường luôn sử dụng định dạng mảng lồng nhau ['config', 'fieldName']:
Di chuyển Trigger
Bảng ánh xạ thuộc tính
Ví dụ di chuyển
Cú pháp v1:
Cú pháp v2:
Đăng ký plugin
Di chuyển Node
Bảng ánh xạ thuộc tính
Ví dụ di chuyển
Cú pháp v1:
Cú pháp v2:
Lưu ý khác
Các phần không thay đổi
Các thuộc tính và phương thức sau về cơ bản có chữ ký giống nhau trong v1 và v2, có thể giữ nguyên khi di chuyển:
useVariables(node/config, options)— Cung cấp tùy chọn biếnuseScopeVariables(node, options)— Cung cấp biến phạm vi nhánhisAvailable(ctx)— Kiểm tra tính khả dụng của Node (NodeAvailableContexttrong v2 thêm thuộc tínhenginemới)
Thuộc tính mới trong v2
getCreateModelMenuItem— Định nghĩa cấu hình mục menu tạo sub-model cho Node/Trigger trên canvas v2useTempAssociationSource— Cung cấp thông tin nguồn dữ liệu liên kết tạm thờivalidate(config)— Kiểm tra cấu hình Trigger (chỉ Trigger)branching— Khai báo Node có phải Node nhánh không (chỉ Node)end— Khai báo Node có phải Node kết thúc không (chỉ Node)testable— Khai báo Node có hỗ trợ chạy thử không (chỉ Node)
Tính nhất quán ngữ nghĩa giá trị
Khi di chuyển, cần đảm bảo các giá trị form được sinh ra bởi component v2 nhất quán với v1, đặc biệt là hình dạng payload khi thực thi thủ công. Ví dụ nếu form thực thi thủ công của v1 lưu đối tượng bản ghi hoàn chỉnh, phiên bản v2 phải duy trì cùng cấu trúc giá trị thay vì chỉ lưu khóa chính.

