Sub Flow (Luồng con)
Gọi một flow đã lưu như một hàm.
Đây là node biến một tập flow thành một hệ thống bảo trì được. Mọi thứ về xây automation lớn phụ thuộc vào dùng nó tốt.
Mục đích
Chạy một flow đã lưu nội tuyến trên ngữ cảnh thực thi chung, tùy chọn truyền đối số, rồi rẽ theo trạng thái con trả về.
Khi nào dùng
- Một chuỗi bước được nhiều flow dùng.
- Một flow phình quá thứ đọc được trên một màn.
- Bạn muốn test một mảnh logic riêng lẻ.
- Một routine cần hành xử khác theo bên gọi, qua đối số.
Khi nào không dùng
- Với hai node dùng một lần. Sự gián tiếp tốn hơn cái nó tiết kiệm.
- Gọi chính nó. Đệ quy bị từ chối lúc chạy qua call stack sống.
- Khi con cần ghi lại nhiều giá trị — con giao tiếp qua trạng thái, không phải qua payload trả về.
Điều kiện
Một flow đã lưu để gọi. Con nên khai mọi giá trị nó cần dưới dạng Flow Input Parameter.
Cách nó chạy
Con chạy đến Stop hay Return của chính nó. Trạng thái node đó tuyên bố là giá trị trả về của con, và nó chọn cha rời qua port nào.
Tự tham chiếu và gọi vòng bị từ chối lúc chạy bởi call stack sống — schema không biết id của chính flow, nên đây là guard runtime cộng loại trừ UI.
Thiết lập
| Thiết lập | Kiểu | Khoảng | Ghi chú |
|---|---|---|---|
| Flow | tham chiếu flow | — | Bắt buộc. Flow đã lưu để gọi |
| Flow name | string | ≤ 200 ký tự | Chỉ cache hiển thị — lời gọi gắn với id flow |
| Inputs | danh sách | — | Ánh xạ đối số: name input của con, và template value |
Truyền đối số
Mỗi input mapping gắn một Flow Input khai của con vào một template biết-biến định giá trong scope của cha:
| Input con | Value (định giá trong cha) |
|---|---|
max_per_trip | {{max_per_trip}} |
slot_index | 5 |
target_name | {{current_target}} |
Giá trị định giá được gieo làm biến cục bộ của con — truyền đối số hàm thực thụ. Con không biết gì về bên gọi, nên cùng một con chạy được từ mục queue, từ lịch, hay từ ba cha khác nhau.
Danh sách trống hay vắng nghĩa là không ánh xạ, hợp lệ; con dùng mặc định khai của nó.
Đổi tên an toàn
Lời gọi gắn với id flow. Đổi tên con không bao giờ vỡ bên gọi — flowName chỉ là cache hiển thị.
Port
| Port | Đi vào khi | Bắt buộc |
|---|---|---|
| Success | Con kết thúc với success | Có |
| Failure | Con kết thúc với failure | Không |
| Cancelled | Con kết thúc với cancelled | Không — không bao giờ được đi |
| Fatal | Không chạy được con, hoặc phát hiện đệ quy | Không — không bao giờ được đi |
Ví dụ cơ bản
Trích một routine tái dùng:
- Flow: Return to base
- Inputs: không
Nối Success → đi tiếp, Failure → phục hồi.
Ví dụ thực tế — orchestrator mỏng
Hình flow-lớn sạch nhất là một flow đỉnh nhỏ không làm gì ngoài gọi một worker kèm tham số:
Orchestrator khai các Flow Input người vận hành điền, rồi truyền xuống. Đổi chiến lược nghĩa sửa worker; đổi tham số nghĩa không sửa gì cả.
Ví dụ nâng cao — thư viện các hàm nhỏ
Phân rã một automation lớn thành các con đơn-mục-đích, mỗi cái hai kết thúc:
| Flow con | Inputs | Success nghĩa | Failure nghĩa |
|---|---|---|---|
Return To Base | — | Đang ở căn cứ | Không tới được |
Open Target List | — | Danh sách mở | Không mở được |
Process One Target | target_index | Xử lý xong | Bỏ qua hoặc không với tới |
Check Capacity | — | Còn chỗ | Đầy |
Cha trở nên đọc được trong một cái liếc:
Mỗi con test được độc lập, và cha đọc như một mô tả quy trình.
Best practices
- Cho mỗi con đúng các kết thúc bên gọi cần — thường một thành công một thất bại, mỗi cái có thông điệp.
- Khai input trên con, gắn tại điểm gọi. Không bao giờ khắc cứng giá trị trong con mà bên gọi có thể muốn đổi.
- Giữ con một việc bạn gọi tên trong một câu.
- Test con riêng lẻ trước khi nối vào cha.
- Canh lời gọi lặp lại tới cùng con trên nhiều nhánh. Nếu năm đường đều gọi "về căn cứ", cân nhắc cấu trúc lại để lời gọi diễn ra một lần.
- Đặt tên con như hành động —
Return To Base,Process One Target. - Nhớ
maxNodeExecutionscũng đếm node con. Cha gọi con 20-node 50 lần thực thi 1000+ node.
Ghi chú hiệu năng
- Con chạy nội tuyến trong cùng session — không ranh giới process, không song song. Tổng thời gian là thời gian cha cộng mọi con.
- Gọi con trong vòng lặp nhân trọn chi phí mỗi lượt. Con nặng phát hiện là nơi điều này cắn.
- Sub Flow thêm overhead riêng không đáng kể; chi phí trọn là thân con.
- Vì mọi thứ một session, con chậm chặn cả lần chạy — phân rã là cho bảo trì, không phải tốc độ.
Ghi chú bộ nhớ
- Con chia ngữ cảnh thực thi của lần chạy. Input gắn được gieo làm biến cục bộ con.
- Mọi node con thực thi được ghi vào
nodeResultscủa lần chạy, nên cây gọi sâu trong vòng dài phình ngữ cảnh đều đặn. - Runtime Memory scope
runthuộc lần chạy, nên con thấy cùng bộ nhớ run như cha.
Lỗi thường gặp
| Lỗi | Hậu quả | Cách sửa |
|---|---|---|
| Kỳ vọng song song | Con chạy nội tuyến, tuần tự | Dùng nhiều instance cho đồng thời |
| Con không có kết thúc thất bại | Cha không phát hiện được vấn đề | Cho nó Stop failure có thông điệp |
| Giá trị khắc cứng trong con | Không tái dùng được | Khai input, gắn tại điểm gọi |
| Gọi flow gọi ngược | Bị từ chối lúc chạy | Phá vòng |
Bỏ qua maxNodeExecutions | Chết giữa chừng | Nâng rào chắn |
| Trích hai node vào con | Gián tiếp nhiều hơn giá trị | Giữ nội tuyến |
Khắc phục sự cố
Cha luôn lấy Success dù con rõ ràng thất bại.
Node kết thúc của con tuyên bố success. Kiểm Stop/Return nào nó tới.
Con không thấy đối số. Giá trị gắn vào tên con không khai làm Flow Input. Tên phải khớp chính xác.
Node rẽ Fatal. Không chạy được flow, hoặc phát hiện đệ quy.
Lần chạy chết MAX_NODE_EXECUTIONS_EXCEEDED.
Node con có đếm. Nhân cỡ con với số lần gọi.
Đổi tên con mà không vỡ gì — đúng không? Đúng. Lời gọi gắn với id flow.
FAQ
Con chạy song song với cha không? Không — nội tuyến và tuần tự trong cùng session.
Con đổi biến của cha được không? Nó nhận input gắn làm biến cục bộ. Truyền kết quả ngược qua trạng thái kết thúc, hoặc một scope bộ nhớ chia sẻ.
Flow gọi chính nó được không? Không — đệ quy bị từ chối lúc chạy.
Lồng gọi sâu cỡ nào?
Giới hạn thực tế bởi maxNodeExecutions và guard call-stack của runtime.
Port Failure của Sub Flow có bắt buộc? Chỉ Success bắt buộc, nhưng nối Failure rất nên.
Node liên quan
- Stop / Return — định giá trị trả về của con
- Start — mỗi con có riêng
- Loop — gọi con lặp lại
- Variable — chuẩn bị giá trị đối số
Trang liên quan
- Biến và bộ nhớ — khai input
- Sub Flows — hướng dẫn soạn thảo
- Mô hình thực thi