Ở bài 184 và 185 ta tùy biến dữ liệu và giao diện. Giờ tới thứ thú vị hơn: tùy biến hành vi — dạy Odoo tự làm một việc khi bạn bấm nút. Công cụ cho việc đó là Server Action (Tác vụ phía máy chủ).

Ví dụ rất thực: bạn có hàng chục sản phẩm chưa điền "ghi chú giao hàng". Thay vì mở từng cái gõ tay, ta làm một Server Action: chọn nhiều sản phẩm → bấm một nút → tất cả tự điền.

Server Action là gì?

Là một hành động chạy trên máy chủ — bạn khai "khi kích hoạt thì làm gì", Odoo thực thi. Vào Cài đặt → Kỹ thuật → Hành động → Server Actions, tạo mới. Đây là cái ta vừa làm:

Form Server Action tên Điền ghi chú giao hàng mặc định trong Odoo, Mô hình Sản phẩm, phần Loại có các nút Cập nhật bản ghi, Tạo bản ghi, Sao chép bản ghi, Tạo hoạt động, Gửi email, Gửi SMS, Thêm Người theo dõi, Thực thi mã đang chọn; tab Mã hiển thị đoạn code Python lọc sản phẩm chưa có ghi chú rồi ghi giá trị mặc định

Hình 1: Form một Server Action ("Điền ghi chú giao hàng mặc định"), gắn với Mô hình: Sản phẩm. Phần Loại là điểm hay nhất — chọn kiểu việc muốn làm, không cần code: Cập nhật bản ghi, Tạo bản ghi, Sao chép bản ghi, Tạo hoạt động, Gửi email, Gửi SMS, Thêm/Xoá người theo dõi, Thực thi mã, Gửi thông báo webhook, Đa tác vụ. Ở đây chọn "Thực thi mã", và tab Mã chứa đoạn Python ngắn: lọc những sản phẩm chưa có ghi chú rồi ghi giá trị mặc định vào.

Chú ý: hầu hết nhu cầu không cần viết code. Muốn "cập nhật một trường" thì chọn loại Cập nhật bản ghi và điền qua giao diện. "Thực thi mã" chỉ dùng khi cần logic riêng — và đoạn mã cũng rất ngắn.

Gắn vào menu để bấm được

Tạo xong, ta bảo Odoo "cho hành động này hiện trong menu Tác vụ của Sản phẩm". Kết quả: ra danh sách sản phẩm, chọn vài dòng, mở nút ⚙ Tác vụ:

Danh sách sản phẩm trong Odoo với 3 sản phẩm đã chọn, nút Tác vụ mở ra menu gồm Xuất, Nhân bản, Lưu trữ, Bỏ lưu trữ, Xoá, In nhãn, Báo cáo bảng giá, Tính giá từ BoM, và Điền ghi chú giao hàng mặc định

Hình 2: Danh sách sản phẩm, "3 đã chọn", menu ⚙ Tác vụ đang mở. Cạnh các mục sẵn có (Xuất, Nhân bản, Lưu trữ, Xoá, In nhãn...) giờ có thêm dòng "Điền ghi chú giao hàng mặc định" — chính là Server Action ta tạo. Bấm vào, cả 3 sản phẩm đang chọn được điền ghi chú cùng lúc.

Đây là sức mạnh thật: một thao tác thay cho việc mở từng bản ghi. Với hàng trăm sản phẩm, khác biệt là vài giây so với cả buổi.

Các loại Server Action hay dùng

Không cần nhớ hết, chỉ cần biết mấy loại thường gặp:

  • Cập nhật bản ghi: đặt/đổi giá trị một trường hàng loạt (như ví dụ trên, nhưng khai qua giao diện).
  • Gửi email: tự gửi thư theo mẫu cho khách/đối tác của bản ghi.
  • Tạo bản ghi: sinh ra một bản ghi mới ở bảng khác (ví dụ tạo một công việc theo dõi).
  • Tạo hoạt động: giao một việc-cần-làm cho ai đó, có hạn.
  • Thực thi mã: viết đoạn Python ngắn cho logic riêng — mạnh nhất nhưng cần cẩn thận.

Cẩn thận — vài điều quan trọng

  • Server Action chạy thật và ngay. Nó sửa dữ liệu liền, không hỏi lại. Thử trên bản test trước khi dùng trên hệ thống thật.
  • "Thực thi mã" có giới hạn an toàn. Odoo chặn nhiều thao tác nguy hiểm — ví dụ không cho gán trực tiếp bản_ghi.trường = giá_trị, mà phải dùng .write({...}) (mình đã vấp đúng chỗ này). Đó là hàng rào bảo vệ, không phải lỗi.
  • Kiểm điều kiện lọc kỹ. Nếu quên lọc, hành động có thể áp lên mọi bản ghi được chọn — chọn nhầm là sửa nhầm hàng loạt.
  • Sửa action xong có thể cần làm mới/khởi động lại để nó hiện trong menu Tác vụ.

Server Action khác gì tự động hóa?

Server Action là việc để làm, nhưng phải có người bấm (hoặc thứ khác gọi tới). Câu hỏi tự nhiên tiếp theo: làm sao để nó tự chạy khi có điều kiện — ví dụ "hễ tạo sản phẩm mới mà chưa có ghi chú thì tự điền"? Đó là việc của Automated Actions, ghép điều kiện với Server Action.

Nhớ ba ý

  1. Server Action là hành động chạy trên máy chủ: cập nhật trường, gửi email, tạo bản ghi, chạy mã... — khai "làm gì" rồi kích hoạt.
  2. Gắn vào menu ⚙ Tác vụ để chọn nhiều bản ghi và làm hàng loạt bằng một cú bấm.
  3. Nó chạy thật ngay, không hỏi lại — thử trên bản test; "Thực thi mã" có hàng rào an toàn (dùng .write(), không gán trực tiếp).

Server Action cần người bấm. Phần sau là bước tự nhiên tiếp theo: Automated Actions — tự động hóa theo điều kiện, để Odoo tự chạy hành động khi có sự kiện, không cần ai bấm.