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

Bài 11 · Xây bằng Sub Flow

Bạn đã xây một thư viện mà không nhận ra. Giờ là lúc gọi nó.

Bài toán

Một quy trình hằng ngày thực thụ xâu chuỗi những việc bạn đã giải: về màn hình đã biết (Bài 09), dọn popup nếu có (Bài 04), thu N lần (Bài 07). Copy-paste đống node đó vào một flow khổng lồ thì chạy được — một lần. Sau đó mỗi lần sửa phải sửa ở ba nơi.

Node Sub Flow (Luồng con) gọi một flow đã lưu như một hàm: chạy nó, truyền đối số, rẽ nhánh theo kết quả của nó.

Bạn sẽ học được

  • Gọi flow bằng Sub Flow và rẽ nhánh theo trạng thái kết thúc của flow con.
  • Truyền đối số vào Flow Input của con.
  • Thiết kế flow con với hợp đồng sạch (ý nghĩa của success/failure).
  • Đọc cột Relations — Uses / Used by — trên màn hình Flows.

Trước khi bắt đầu

  • Các bài 04, 0709 đã lưu — chúng sắp thành thư viện chuẩn của bạn.

Flow

Flow Bài 11 trong trình soạn thảo

Badge đánh số node theo thứ tự đọc, khớp phần Dựng flow. Để ý xem có rất ít thứ phải đọc: mỗi thẻ Sub Flow che đi cả một quy trình, và đó đúng là lý do một orchestrator đáng có.

Ba lời gọi Sub Flow, hai lối ra thất bại, một thành công. Hơn mười sáu node logic nằm đằng sau ba tấm thẻ đó, mà canvas này vẫn đọc được trong một cái liếc.

Dựng flow

  1. Flow mới. Nhóm Control, thêm một node Sub Flow; chọn Lesson 09 - Recovery Routine trong bộ chọn flow. Đặt tên 1. Make sure we are on the dashboard.
  2. Sub Flow thứ hai → Lesson 04, tên 2. Clear any reward popup.
  3. Sub Flow thứ ba → Lesson 07, tên 3. Collect three times. Trong danh sách Inputs của nó, thêm một ánh xạ: input target_count = 3. Giá trị đó gieo vào Flow Input của con — không form Run nào hỏi, không sửa flow con.
  4. Các kết thúc: routine complete (success), recovery failed (failure), collection failed (failure).
  5. Nối như sơ đồ — chú ý cả hai port của bước popup đều dẫn tiếp sang thu thập.
  6. Save, Auto Layout. Trên màn hình Flows, cột Relations giờ hiển thị flow này Uses 3, và Bài 09 mang Used by — thư viện hiện ra trước mắt:

Danh sách Flows với các huy hiệu quan hệ

Ý tưởng hợp đồng

Một lời gọi Sub Flow rẽ nhánh theo cách flow con kết thúc — node Stop của con chính là giá trị trả về của nó:

Con kết thúc bằngLời gọi rẽ qua
Stop: successPort Success
Stop: failurePort Failure

Vậy nên các kết thúc của mỗi con tạo thành hợp đồng của nó, và flow cha đơn giản mã hóa ý nghĩa của từng hợp đồng tại đây:

  • Khôi phục hỏng → hủy. Failure của Bài 09 nghĩa là "không ở màn hình đã biết"; thu mù lúc đó là vô nghĩa. Failure là điểm dừng cứng.
  • Xử lý popup "hỏng" → vẫn đi tiếp. Ca xấu nhất là popup còn mở; vòng thu thập sẽ hỏng một cách nhìn thấy được nếu vậy. Cả hai port đều đi tiếp.
  • Thu thập hỏng → báo cáo. Mục đích chính của quy trình đã hỏng; kết thúc nói thẳng điều đó.

Quyết định thất bại nào của con thì hủy flow cha là phần lớn công việc thiết kế trong automation lắp ghép — và bạn chỉ quyết được vì mỗi con kết thúc trung thực.

Đối số. target_count = 3 đi từ cha sang con tại thời điểm gọi. Flow con vẫn chạy độc lập được (form Run của nó vẫn hỏi), từ mục queue, hoặc từ cha khác với con số khác. Một flow, nhiều bên gọi — đó là điều Flow Input đã chuẩn bị từ Bài 07.

Chạy thử

Từ bất kỳ màn hình nào, chạy quy trình:

  1. Bài 09 làm mọi việc cần thiết để về dashboard (hoặc hủy một cách trung thực).
  2. Bài 04 dọn popup nếu có.
  3. Bài 07 chạm Collect ba lần và log bộ đếm của nó.
  4. success · Routine finished.

Nhìn nhật ký chạy: bạn đọc được ranh giới từng flow con và thông điệp riêng của mỗi con — lắp ghép không che mất câu chuyện.

Best practices

  • Mỗi con một việc, đặt tên như hành động (Recovery Routine, không phải Utils).
  • Thiết kế kết thúc cho bên gọi. Mỗi con cần ít nhất một success và một failure có nghĩa.
  • Quyết theo từng lời gọi thất bại nào thì hủy. Không có luật vạn năng — chỉ có logic quy trình của bạn.
  • Truyền đối số thay vì sửa flow con.
  • Không tái dùng kiểu copy-paste. Đang nhân bản node giữa các flow nghĩa là bạn đã cần một Sub Flow.

Lỗi thường gặp

LỗiHậu quảCách sửa
Copy node thay vì gọiSửa một chỗ phải sửa N chỗSub Flow
Bỏ mặc port Failure của conCha băng băng đi tiếp sau bước hỏngNối nó có chủ đích — kể cả khi "đi tiếp" là lựa chọn, hãy biến nó thành lựa chọn
Tên đối số ≠ tên input của conCon lặng lẽ dùng mặc địnhKhớp đúng tên đã khai
Kỳ vọng các con chạy song songCon chạy nội tuyến, lần lượtSong song đến từ instance, không từ node
Flow tự gọi mìnhBị từ chối lúc chạyTái cấu trúc

Khắc phục sự cố

Lời gọi luôn rẽ Failure. Chạy riêng flow con. Lắp ghép không thay đổi con — con hỏng ở đây thì chạy độc lập cũng hỏng.

Con phớt lờ đối số của tôi. Tên trong ánh xạ input phải trùng tên Flow Input con đã khai (target_count), và con phải khai nó là Input.

Đổi tên con — cha có vỡ không? Không. Lời gọi gắn với id của flow; tên chỉ là nhãn.

Tóm tắt

  • Sub Flow = lời gọi, truyền đối số và rẽ-theo-kết-quả trong một node.
  • Các Stop của con là hợp đồng; cha quyết mỗi kết cục nghĩa là gì tại chỗ.
  • Thư viện mọc lên từ kết thúc trung thực + input được khai — thứ bạn đã xây từ Bài 01.

Tiếp theo

Còn một bài. Bài 12 · Capstone: Quy trình hằng ngày lắp ráp tất cả — khôi phục, OCR, vòng lặp có chốt chặn, retry, bộ đếm, kết thúc trung thực — thành hình dạng mà automation sản xuất thực thụ mang.

Xem thêm: Sub Flow · Stop · Hướng dẫn Sub Flow