Odoo Terminal, Odoo Toolbox và Owl Devtools: một dòng lệnh ORM ngay trong trình duyệt, tên model và ID bản ghi bạn vẫn phải đi tra, và cây component để debug OWL.
Nếu cả ngày bạn sống trong Odoo — viết module, debug lỗi cho khách, hay lọ mọ trên Odoo.SH — có vài extension trình duyệt sẽ thay đổi cách bạn làm việc. Không phải theo kiểu “có thì hay”, mà theo kiểu “không hiểu trước đây mình làm việc thế nào mà không có nó”.
Bài này nói về ba extension như vậy.
1. Odoo Terminal
GitHub: Tardo/OdooTerminal · Chrome Web Store
Odoo Terminal cho bạn một giao diện dòng lệnh ngay trong trình duyệt để tương tác với bất kỳ hệ thống Odoo nào qua JSON-RPC. Hãy nghĩ về nó như một REPL cho ORM của Odoo — không cần mở shell, không cần SSH, không cần rời khỏi trang bạn đang xem.
Bạn làm được gì
Tìm bản ghi theo điều kiện:
search -m res.partner -d [['is_company','=',true]]
Đọc một bản ghi cụ thể theo ID:
read -m res.partner -i [1]
Cập nhật giá trị của bản ghi:
write -m res.partner -i [42] -v {name: 'Trobz Vietnam'}
Gọi bất kỳ phương thức nào của model:
call -m res.partner -c address_get -a [8]
Cài một module:
install -m contacts
Bí danh tùy chỉnh — đặt lối tắt cho những lệnh bạn chạy đi chạy lại:
alias -n companies -c "search -m res.partner -d [['is_company','=',true]]"
Rồi chỉ cần gõ companies bất cứ lúc nào. Bí danh sống sót qua các lần tải lại trang và hỗ trợ tham số, điều kiện và lệnh lồng nhau.
Trên đây mới là phần cơ bản; còn rất nhiều lệnh khác đang đợi bạn. Hãy khám phá bằng:
help
Vì sao nó hữu ích
Trường hợp dùng thiết thực nhất là debug các vấn đề về quyền truy cập và dữ liệu trong lúc phát triển hoặc hỗ trợ. Thay vì viết một đoạn python_external_id() hay mở một Jupyter notebook, bạn chạy một lệnh search, soi kết quả, rồi gọi phương thức liên quan — tất cả mà không phải chuyển ngữ cảnh.
Nó hỗ trợ Odoo 11 đến 19, và không bao giờ vá vào các lớp nội bộ của Odoo, nên dùng an toàn trên mọi môi trường, kể cả production (với các lệnh chỉ đọc) hay staging.
2. Odoo Toolbox
GitHub: odoo-lux-dev/odoo-toolbox · Tài liệu · Chrome Web Store
Odoo Toolbox là một extension cho DevTools, nhắm tới lập trình viên và người dùng Odoo.SH. Nó đưa ra mặt ngoài những thông tin kỹ thuật mà Odoo mặc định giấu đi, và thêm hẳn một bảng kiểm thử RPC ngay trong DevTools của trình duyệt.
Bạn làm được gì
Thanh bên cho lập trình viên — khi đang xem một bản ghi, một bảng thu gọn được hiển thị tên kỹ thuật của model, ID bản ghi hiện tại, các trường đang hoạt động và ngữ cảnh database. Không còn phải đoán xem một view ánh xạ tới model nào.
Hình dung bạn đang ở form của một khách hàng. Thanh bên hiện:
Model: res.partner
Record: 42
View Type: form
Action Name: Contacts
Action ID: 172
Rồi bên dưới nó liệt kê các trường (tên, kiểu dữ liệu) của model hiện tại.
Bạn cần tên model để viết một domain filter, hay cần ID bản ghi để dựng nhanh một lệnh write. Tất cả đều có sẵn mà không phải mở URL hay đào bới trong Settings → Technical.
Bảng kiểm thử RPC — mở DevTools (F12) → vào tab Odoo Toolbox. Bạn bắn được một lời gọi JSON-RPC ngay tại đó:
Model: sale.order
Record IDs: [1, 2, 3]
Fields: ['email', 'display_name']
Domain: ['field', '=', 'value']
Nhấn Execute Query. Phản hồi hiện ra đã được định dạng ngay trong bảng. Không Postman, không curl, không phải rời trình duyệt.
Nút bật chế độ debug — nhấp vào biểu tượng extension → bật/tắt Debug Mode chỉ bằng một cú nhấp. Bạn cũng đặt được để nó tự bật mỗi khi truy cập một URL Odoo bất kỳ, nên không bao giờ phải tự thêm ?debug=1 nữa.
Tên model ngay trên bản ghi — hiển thị tên kỹ thuật của model ngay trên phần đầu của form (Odoo v17.2 trở lên), rất tiện khi đi qua những view lạ hoặc các module tùy chỉnh của khách. Ví dụ, khi bạn mở một mục menu tùy chỉnh dẫn tới một form không quen, thay vì rê chuột lên URL hay vào Settings để đoán xem mình đang xem cái gì, tên model x_custom_approval.request được in thẳng ở khu vực tiêu đề trang.
Tiện ích cho Odoo.SH — nếu ngày nào bạn cũng làm việc với Odoo.SH, mấy bổ sung nhỏ này cắt bớt kha khá cú nhấp:
- Đánh dấu sao các dự án yêu thích để chúng nổi lên đầu dashboard SH
- Chép tên nhánh hiện tại chỉ bằng một cú nhấp (tiện khi đặt tên PR hoặc viết commit)
- Liên kết nhánh tới các URL tùy chỉnh bằng mẫu regex — ví dụ tự dẫn tới ticket Jira của bạn
- Nhảy thẳng sang repository GitHub từ trang của một nhánh
Vì sao nó hữu ích
Odoo Toolbox giải quyết một ma sát hằng ngày: bạn đang ở trên một bản ghi mà không biết tên model, ID bản ghi hay có những trường nào. Bình thường thì phải mở URL, đọc model= trong phần hash, hoặc vào Settings → Technical. Với thanh bên luôn hiện, thông tin đó lúc nào cũng chỉ cách một cái liếc mắt.
Riêng với người dùng Odoo.SH, chỉ mấy tính năng quản lý nhánh thôi cũng đủ lý do để cài: đánh dấu sao dự án và chép tên nhánh bỏ đi được vài cú nhấp trong quy trình SH thường ngày.
3. Owl Devtools
GitHub: odoo/owl · Chrome Web Store
Từ Odoo 15, phần frontend được dựng trên OWL — framework component JavaScript của chính Odoo. Nếu bạn có làm bất cứ việc gì ở frontend Odoo, Owl Devtools chính là thứ tương đương React DevTools hay Vue Devtools. Nó do chính đội Odoo duy trì.
Bạn làm được gì
Sau khi cài, một tab Owl xuất hiện trong DevTools của trình duyệt (F12 → Owl).
Soi cây component — bảng bên trái hiển thị mọi component Owl đang render trên trang dưới dạng cây. Ví dụ, trên form đơn bán hàng bạn có thể thấy:
▼ WebClient
▼ ActionContainer
▼ FormView
▼ FormRenderer
▼ Field (name="partner_id")
└─ Many2OneField
▼ Field (name="order_line")
└─ One2ManyField
▼ ListRenderer
└─ SaleOrderLine ← nhấp vào đây
Nhấp vào một nút bất kỳ và bảng bên phải lập tức hiện props, state và env hiện tại của nó — không console.log, không phải tải lại trang.
Một tình huống debug cụ thể — giả sử một widget tùy chỉnh không cập nhật như bạn mong đợi. Mở tab Owl, tìm component đó trong cây, rồi xem state của nó. Nếu state đã mang giá trị mới mà giao diện chưa đổi, vấn đề nằm ở template. Nếu state vẫn là giá trị cũ, vấn đề nằm ở cách state bị thay đổi (một lỗi hay gặp: sửa thẳng một thuộc tính lồng bên trong một đối tượng reactive thay vì gán lại nó).
Lần vết render — tích vào “Trace Renderings” trong tab Owl, rồi thao tác trên trang. Mọi sự kiện render đều được ghi ra console kèm một vết ngăn xếp:
[OWL] Rendering <SaleOrderLine> (id=12)
triggered by: state.qty_delivered changed
at SaleOrderLine.setup (sale_order_line.js:34)
Nó cho bạn biết chính xác thay đổi state nào đã gây ra lần render lại — hoặc vì sao một component lại render lại quá nhiều lần.
Công cụ đo hiệu năng — nhấn Start, thao tác trên trang, nhấn Stop. Công cụ này hiện ra một dòng thời gian kiểu Gantt cho mọi lần render component: component nào đã chạy, theo thứ tự nào, và mỗi cái mất bao lâu. Nếu một list view có cảm giác ì ạch, đây là cách tìm ra component nào là nút thắt.
Hỗ trợ iframe — POS của Odoo chạy phần frontend bên trong một iframe. Không có tính năng này, mở DevTools trên trang POS sẽ cho bạn thấy cây component của trang cha, không phải của POS. Extension tự phát hiện các iframe chạy Owl và thêm một ô chọn ở đầu bảng Owl để bạn chuyển qua lại giữa ứng dụng chính và iframe POS — nhờ đó soi được ProductCard, PaymentScreen hay bất kỳ component POS nào y như mọi component Owl khác.
Vì sao nó hữu ích
Debug component OWL mà không có extension này nghĩa là phải dựa vào console.log đặt trong các lifecycle hook và đoán xem cái gì đã kích hoạt lần render lại. Với Owl Devtools, bạn nhìn được cả cây component ngay tại chỗ, soi thay đổi state theo thời gian thực, và đo hiệu năng render để tìm nút thắt — đúng quy trình mà lập trình viên frontend bên React hay Vue coi là chuyện đương nhiên.
Nó đặc biệt giá trị khi làm việc với các view đã tùy biến, các component OWL tự viết, hoặc khi debug xem vì sao một widget không cập nhật sau một thay đổi state.
Tóm tắt
| Extension | Hợp nhất với việc |
|---|---|
| Odoo Terminal | Chạy truy vấn ORM, gọi phương thức, thao tác dữ liệu bằng lệnh — tất cả từ trình duyệt |
| Odoo Toolbox | Đưa thông tin kỹ thuật ra mặt ngoài, kiểm thử RPC, quản lý dự án Odoo.SH |
| Owl Devtools | Soi cây component OWL, debug state/props, đo hiệu năng render |
Cả ba đều miễn phí, mã nguồn mở, và có trên Chrome Web Store. Cài một lần rồi chúng trở thành thứ hạ tầng vô hình — luôn sẵn khi bạn cần, và không tốn gì khi bạn không cần.