Cùng là "tự động", nhưng cron và Automated Action trả lời hai câu hỏi khác nhau. Cron hỏi "mấy giờ rồi?" — đến giờ hẹn thì chạy. Automated Action hỏi "có ai vừa động vào dữ liệu không?" — có bản ghi được tạo/sửa/xoá thì chạy ngay. Chọn nhầm cơ chế là hoặc trễ (đợi cron tới lượt) hoặc lãng phí (cron quét liên tục thứ vốn chỉ cần phản ứng khi có thay đổi). Bài này dựng một Automated Action thật và đo nó bắn tức thì.
Automated Action chạy theo sự kiện
Automated Action là model base.automation (cần app base_automation). Nó gắn vào một model, chọn một trigger (loại sự kiện), và chạy một server action mỗi khi sự kiện đó xảy ra trên bản ghi:

Hình 1: Một base.automation với trigger="on_create" gắn vào model thẻ, kèm một ir.actions.server (base_automation_id trỏ về quy tắc). Khi có thẻ mới được tạo, Odoo tự chạy server action đó với biến record là chính bản ghi vừa tạo. Danh sách trigger rất giàu: on_create, on_write, on_create_or_write, on_unlink, on_change, on_archive, on_state_set... — tất cả đều là sự kiện dữ liệu, không dính gì tới đồng hồ.
Trên giao diện, quy tắc này nằm ở Cài đặt → Kỹ thuật → Quy tắc tự động hoá:

Hình 2: Quy tắc tự động hoá thật. Kích hoạt: "Khi tạo" (on_create); Mô hình: Thẻ thành viên; ô Áp dụng cho cho phép thêm điều kiện lọc (chỉ chạy khi thẻ khớp domain nào đó); tab Tác vụ cần thực hiện chứa server action "Đăng lời chào lên thẻ mới". Đây là bản dựng bằng XML, nhưng người vận hành có thể tạo/sửa ngay trên giao diện này mà không cần lập trình.
Đo: nó bắn tức thì
Khác biệt lớn nhất so với cron là thời điểm. Tạo một thẻ trong shell và kiểm ngay:
new = env['quan.the.thanh.vien'].create({'name': 'TEST-AUTO-001', 'hang_the': 'bac'})
# ngay sau create, automation on_create đã chạy:
new.message_ids.filtered(lambda m: 'Chào mừng thẻ mới' in (m.body or ''))
# -> 1 message: "Chào mừng thẻ mới được tạo tự động (automated action)"
Không chờ một giây nào — thẻ vừa create xong đã có lời chào trong khung trao đổi. So với cron ở phần trước: cron phải đợi tới nextcall mới chạy. Đó là toàn bộ sự khác biệt về bản chất.
Chọn cái nào

Hình 3: Hai cơ chế, hai câu trả lời. Automated Action phản ứng tức thì theo thao tác — hợp khi cần validate/điền/ghi log ngay lúc người dùng tạo hay sửa bản ghi, và code có sẵn record để làm việc trực tiếp. Cron chạy theo chu kỳ — hợp khi cần quét toàn bộ, dọn dữ liệu, nhắc hạn hàng loạt, và phải tự search vì không có bản ghi cụ thể.
Một điểm hay nhầm: on_time của Automated Action nghe như "theo thời gian" nhưng nó vẫn là theo mốc của từng bản ghi (ví dụ "3 ngày sau ngày cấp") — Odoo hiện thực nó bằng một ir.cron ngầm quét các bản ghi tới mốc. Nếu việc của bạn là "mỗi đêm quét tất cả", dùng cron thẳng vẫn rõ ràng hơn.
Ba ý mang về
- Cron chạy theo LỊCH (
interval_number/interval_type, tựsearchvì không có bản ghi cụ thể); Automated Action chạy theo SỰ KIỆN dữ liệu (on_create/on_write/...), có sẵnrecordvừa kích hoạt. - Automated Action bắn tức thì ngay lúc tạo/sửa — đo thật: thẻ vừa
createđã có message; cron thì phải tớinextcall. - Chọn theo nhu cầu: phản ứng tức thì theo thao tác → Automated Action (cần app
base_automation); quét/dọn/nhắc theo chu kỳ → cron.on_timechỉ là cron ngầm theo mốc từng bản ghi.
Cả hai cơ chế trên hay đi kèm việc gửi email tự động — chào khách mới, nhắc hạn. Muốn email đẹp và tái dùng được thì cần một mẫu. Phần sau dựng mail.template khai bằng XML: nội dung động, trường QWeb, và cách gọi gửi từ code.