Tài liệu RunMacro
Tạo robot đầu tiên, rồi tiến xa theo nhu cầu.
Hướng dẫn rõ ràng từng bước để tạo, chạy và cải thiện robot cho công việc máy tính lặp lại.
Gọi và thực thi Subflow (Call Subflow) có truyền tham số trong RunMacro
Lệnh Gọi Subflow kích hoạt một luồng con đã định nghĩa trong dự án macro, truyền giá trị vào các tham số đầu vào và gán kết quả đầu ra về luồng gọi.
Điều kiện cần#
- Dự án macro đã có ít nhất một Subflow hợp lệ được tạo thông qua tab Thêm Subflow.
- Subflow mục tiêu không phải chính là luồng đang gọi và không tạo ra chu trình gọi lặp đệ quy.
- Các biến nguồn ở luồng gọi đã được khởi tạo nếu muốn truyền giá trị động vào tham số.
Chế độ hỗ trợ#
- Chế độ Desktop — Thực thi các lệnh thao tác desktop bên trong frame của Subflow.
- Chế độ Browser — Thực thi các lệnh thao tác web/CDP bên trong frame của Subflow mà không làm gián đoạn phiên duyệt.
- RunMacro Runner — Runner thực thi trơn tru toàn bộ chuỗi subflow theo cấu trúc frame gọi lồng nhau.
Chức năng này làm gì#
Lệnh Gọi Subflow (Call Subflow) kích hoạt và thực thi một luồng con (Subflow) đã được tạo sẵn trong cùng dự án macro. Khi chạy, RunMacro tạo ra một execution frame cục bộ riêng biệt cho Subflow, truyền các giá trị hoặc biến từ luồng gọi (Caller) vào các tham số đầu vào (Tham số đầu vào) của Subflow theo đúng kiểu dữ liệu. Sau khi Subflow hoàn thành (hoặc gặp lệnh Return Subflow), các giá trị kết quả đầu ra (Output Mappings) sẽ được tự động gán ngược lại vào các biến của luồng gọi. Hệ thống tích hợp sẵn cơ chế kiểm tra đồ thị cuộc gọi (Call Graph) để ngăn chặn tự gọi chính mình hoặc đệ quy vòng tròn gây treo máy.
Hình ảnh & video#

Khi nào nên dùng#
- Tái sử dụng các đoạn logic xuất hiện nhiều lần (như đăng nhập, giải captcha, ghi log, định dạng dữ liệu) thay vì phải sao chép lệnh thủ công.
- Chia nhỏ một macro phức tạp, đồ sộ thành các module/luồng con rõ ràng, dễ bảo trì và kiểm thử độc lập.
- Thực hiện gọi hàm có truyền đối số đầu vào (inputs) và nhận kết quả trả về (outputs) mà không làm ô nhiễm các biến toàn cục.
Khi nào không nên dùng#
- Chỉ cần nhảy mốc lệnh tuyến tính đơn giản trong cùng một luồng.
- Chèn và thực thi một tệp kịch bản bên ngoài độc lập.
- Thực hiện vòng lặp lặp đi lặp lại một khối lệnh đơn giản.
Các bước cấu hình#
- Tạo Subflow mục tiêu thông qua tab + Thêm Subflow hoặc cửa sổ Subflow Interface trong RunMacro.
- Trong luồng gọi (Main hoặc một Subflow khác), thêm lệnh Điều khiển luồng › Gọi Subflow (Call Subflow).
- Tại mục Subflow cần gọi (Target Subflow), chọn Subflow mong muốn từ danh sách (các subflow gây vòng lặp đệ quy sẽ tự động bị ẩn).
- Trong bảng Tham số đầu vào (Tham số đầu vào), nhập giá trị trực tiếp hoặc chọn biến nguồn (ví dụ:
{username},{row_id}). - Trong bảng Gán kết quả đầu ra (Output Return Mappings), chọn biến ở luồng gọi để nhận từng giá trị trả về của Subflow.
- Nhấn Chèn / Lưu để hoàn tất.
Giải thích từng tùy chọn#
Kết quả mong đợi#
Luồng con được thực thi tuần tự từ đầu đến cuối sau đó quyền điều khiển và các giá trị kết quả được trả về luồng gọi.
Ví dụ thực tế#
Ví dụ: Gọi Subflow "DangNhap" với tài khoản và mật khẩu#
- Tạo Subflow "DangNhap" với 2 tham số đầu vào: {user} và {pass}, cùng 1 kết quả đầu ra: {is_logged_in}.
- Ở Main flow, thêm lệnh Call Subflow: Target = "DangNhap".
- Gán tham số: {user} = {tai_khoan_hien_tai}, {pass} = {mat_khau_ma_hoa}.
- Gán kết quả: {is_logged_in} lưu vào biến {ket_qua_dang_nhap}.
- Dùng lệnh IF {ket_qua_dang_nhap} == true để tiếp tục xử lý nghiệp vụ.
Ví dụ: Gọi Subflow tính toán số dư và phí giao dịch#
- Khai báo Subflow "TinhPhi" nhận {so_tien} (Number) và trả về {phi} cùng {tong_tien}.
- Thêm lệnh Call Subflow trong luồng duyệt đơn hàng, truyền {so_tien} = {order_total}.
- Nhận kết quả {tong_tien} vào biến {final_amount} để ghi ra file CSV.
- Kiểm tra lại kết quả ghi file để đảm bảo dữ liệu đơn hàng khớp chính xác.
Giới hạn và trường hợp lỗi#
- Độ sâu gọi lồng nhau tối đa là 32 cấp vượt quá 32 cấp hệ thống sẽ báo lỗi giới hạn call stack.
- Biến cục bộ khai báo trong Subflow chỉ tồn tại trong vòng đời của Subflow và không thể đọc trực tiếp từ Main flow nếu không qua Outputs.
- Không thể tự gọi chính Subflow đang chạy hoặc gọi vòng tròn vì hệ thống chủ động chặn đệ quy.
- Nếu Subflow mục tiêu bị xóa hoặc đổi tên ngoài dự kiến lệnh gọi sẽ báo lỗi thiếu target subflow.
- Kiểu dữ liệu của giá trị truyền vào cần tương thích với kiểu dữ liệu của tham số đã khai báo.
- Lệnh chỉ gọi được các Subflow nằm trong cùng tệp dự án pmacro không dùng để gọi tệp macro nằm ngoài ổ đĩa.
Mẹo & lỗi thường gặp#
Thông tin kiểm chứng#
commands/subflow.pyui/subflow_command_dialog.py
