Chuyển tới nội dung chính

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ậpKiểuKhoảngGhi chú
Flowtham chiếu flowBắt buộc. Flow đã lưu để gọi
Flow namestring≤ 200 ký tựChỉ cache hiển thị — lời gọi gắn với id flow
Inputsdanh 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 conValue (định giá trong cha)
max_per_trip{{max_per_trip}}
slot_index5
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 khiBắt buộc
SuccessCon kết thúc với success
FailureCon kết thúc với failureKhông
CancelledCon kết thúc với cancelledKhông — không bao giờ được đi
FatalKhông chạy được con, hoặc phát hiện đệ quyKhô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 conInputsSuccess nghĩaFailure nghĩa
Return To BaseĐang ở căn cứKhông tới được
Open Target ListDanh sách mởKhông mở được
Process One Targettarget_indexXử lý xongBỏ qua hoặc không với tới
Check CapacityCò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 độngReturn To Base, Process One Target.
  • Nhớ maxNodeExecutions cũ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 nodeResults củ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 run thuộc lần chạy, nên con thấy cùng bộ nhớ run như cha.

Lỗi thường gặp

LỗiHậu quảCách sửa
Kỳ vọng song songCon 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ạiCha 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 conKhông tái dùng đượcKhai input, gắn tại điểm gọi
Gọi flow gọi ngượcBị từ chối lúc chạyPhá vòng
Bỏ qua maxNodeExecutionsChết giữa chừngNâng rào chắn
Trích hai node vào conGiá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