Tra cứu mã nguồn để lập trình Odoo
Tut 17: Tra cứu mã nguồn để lập trình Odoo
Trước khi xem bài viết này, bạn vui lòng hoàn thành các hướng dẫn ở những bài viết trước để hiểu được cơ bản lập trình Odoo. Bài viết này sẽ hướng dẫn cách tra cứu mã nguồn để lập trình Odoo nhanh và hiệu quả hơn.
Vì sao phải cần tra cứu mã nguồn Odoo khi lập trình
Odoo là một dự án mã nguồn mở
Mã nguồn chính thức của Odoo phiên bản community nằm tại: https://github.com/odoo/odoo. Do đó, ta có thể tải về mã nguồn của Odoo các phiên bản cũ đến mới từ Github. Chính nhờ Odoo có mã nguồn mở, và cho phép linh hoạt mở rộng thông qua cơ chế thừa kế mà ta có thể và cần phải tra cứu mã nguồn gốc.
Lưu ý: đối với các framework mã nguồn đóng ta không thể làm việc này.
Việc đọc mã nguồn hiện thực của Odoo cũng giúp ta nắm được "code convention" (cách viết code chuẩn) của framework và từ đó tra cứu để bắt chước viết tương tự cho một addon để mở rộng.
Thừa kế để mở rộng những thành phần đã có
Odoo cho phép phát triển chỉnh sửa / mở rộng tính năng thông qua cơ chế thừa kế, cụ thể bạn có thể thừa kế cả 3 thành phần trong kiến trúc MVC:
- Model: lập trình Python thừa kế class
odoo.models.Model
với thuộc tính_inherit = "<TÊN MODEL>"
- View: lập trình XML với thuộc tính
inherit_id
tham chiếu đến id của view - Controller: lập trình Python thừa kế theo cách tiêu chuẩn của Python (thừa kế class cha, và định nghĩa phương thức cùng tên để override)
Do đó, việc xem mã nguồn gốc sẽ rất hữu ích trước khi ta quyết định thừa kế để chỉnh sửa nội dung gốc. Đôi khi, để trả lời một câu hỏi nghiệp vụ ("business logic") ta có thể tra cứu xem mã nguồn viết thực thi như thế nào.
Lập trình bằng cách tra cứu cách hiện thực
Odoo là một framework, vì để hiện thực một module mới ta phải định nghĩa theo cấu trúc của một module mà Odoo quy định. Vì khung sườn hệ thống của Odoo sẽ theo đó mà load module vào ở thời điểm thực thi. Chính vì vậy, khi ta viết mới một module có thể tra cứu các module đã viết của Odoo. Các module nhiều tính năng và hay dùng như: sale (bán hàng), point_of_sale (bán lẻ), stock (kho vận), purchase (mua hàng), mrp (sản xuất), hr (nhân sự), …
Ta không nên chỉ đọc mã nguồn Odoo một cách không có mục đích, vì đọc cũng không biết phải làm gì với nó. Nên ta sẽ chỉ nên đọc mã nguồn Odoo liên quan đến các việc lập trình Odoo mà ta đang làm.
Làm việc với Odoo phiên bản cũ
Odoo qua các phiên bản dần bổ sung tính năng hoặc thay đổi các thành phần trong framework, dẫn đến các breaking changes về mặt kỹ thuật qua từng phiên bản mà không được thống kê rõ ràng. Một vài ví dụ cụ thể:
- Odoo 13 bỏ thuộc tính
<field name="view_type">form</field>
trong view action, trong khi phiên bản Odoo 12 trở về trước vẫn có thể dùng. - Odoo 17 bỏ cách khai báo các file javascript của web.assets_backend trong
templates.xml
, mà thay vào đó, ta phải khai báo chúng trong__manifest__.py
- Odoo 18 thay thế hoàn toàn thành phần giao diện tree bằng list
Do đó, khi bảo trì và phát triển các addon trên Odoo phiên bản cũ ta nên tra cứu mã nguồn trên Odoo phiên bản tương ứng để lập trình dễ dàng hơn.
Hướng dẫn tra cứu nhanh mã nguồn Odoo đa phiên bản
Bạn có thể tự làm bằng cách vào trang Github của Odoo (https://github.com/odoo/odoo) để tải mã nguồn phiên bản theo branch (ví dụ: 18.0, 17.0, …).
hoặc bạn cũng có thể truy cập vào trang https://odoo.minhng.info/ để tra cứu mã nguồn đa phiên bản Odoo một cách trực tuyến.
Chọn mã nguồn theo phiên bản Odoo
File > Open Folder > chọn src > chọn phiên bản Odoo 18 (odoo_18) > OK
Như vậy, việc tra cứu như tìm kiếm (Ctrl + Shift + F) chỉ thực hiện trên Odoo phiên bản 18.
Tra cứu trong Odoo
Bạn nên chọn phiên bản trước khi tra cứu (mục trên), để kết quả tìm kiếm lọc đúng phiên bản Odoo mà bạn đang làm việc.
Một vài ví dụ cụ thể sau sẽ gợi ý cho bạn cách dùng công cụ odoo.minhng.info, từ đó hãy phát huy cách sử dụng hiệu quả của riêng mình nhé:
1. Tra cứu cách sử dụng phương thức
Ta có phương thức filtered trong recordset của Odoo cho phép lọc record theo hàm tiêu chí mình tự định nghĩa. Trong lúc lập trình "chúng tôi" có thể nhanh chóng tra cứu cách sử dụng và ngữ cảnh qua các thao tác sau:
- Nhấn tổ hợp phím Ctrl + Shift + F
- Nhập .filtered( vào ô tìm kiếm
- Nhấn Enter
2. Tra cứu các lựa chọn tham số
- Nhấn tổ hợp phím Ctrl + Shift + F
- Nhập auth= vào ô tìm kiếm
- Nhấn Enter
Nhìn danh sách kết quả ta nhanh chóng thấy được một vài lựa chọn như: user, public, none
3. Mở nhanh file hiện thực gốc
- Nhấn tổ hợp phím Ctrl + P
- Nhập product_product.py vào ô tìm kiếm
- Chọn kết quả cần tìm để mở file
Model product.product hiện thực gốc trong product/models/product_product.py, tuy nhiên, khá nhiều module khác thừa kế mở rộng model này nên ta sẽ thấy có nhiều kết quả tìm kiếm.
4. Học cách sử dụng "sequence" để cho phép sắp xếp thứ tự
Trên giao diện danh sách (tree/list view) của Odoo, một số giao diện cho phép người dùng sắp thứ tự các dòng dữ liệu bằng kéo thả. Odoo đã hiện thực tính năng này, và ta có thể tra cứu cách làm bằng từ khóa sequence.
- Nhấn tổ hợp phím Ctrl + Shift + F
- Nhập sequence vào ô tìm kiếm
- Lựa chọn tìm chính xác và chỉ bao gồm file Python và XML để ta có thể định nghĩa field trong model và dùng ở view như thế nào (
*.py
,*.xml
) - Xem kết quả tìm kiếm để biết ngữ cảnh dùng.
Với các bước làm trên ta có thể biết cách làm như sau:
- Trong model ta định nghĩa thêm field
sequence = fields.Integer('Sequence')
- Trong list view ta đặc tả
<field name="sequence" widget="handle"/>
để người dùng có thể kéo thả.
5. Học cách tạo một nút thông tin trong form view
- Trong Odoo chế độ debug mode, ta rê chuột vào nút thông tin trong form view
- Nó sẽ hiện ra tên hàm là open_pricelist_rules
- Từ đó, ta vào odoo.minhng.info để tra cứu theo từ khóa này
- Kiểm tra file XML để đặc tả nút nhấn này trong form view
- Và hiện thực ở phương thức open_pricelist_rules() trong model product.template và product.product (thừa kế chỉnh sửa hành vi)
- Khóa học lập trình Odoo TP.HCM: Thông tin và đăng ký khóa học
- Khảo sát nhu cầu học nghiệp vụ Odoo Offline @ HCM & đăng ký sớm: https://forms.gle/auBXLNbfuNqhJSbj8
Cài đặt Odoo:
- Docker Compose for Odoo 10
- Docker Compose for Odoo 11
- Docker Compose for Odoo 12
- Docker Compose for Odoo 13
- Docker Compose for Odoo 14
- Docker Compose for Odoo 15
- Docker Compose for Odoo 16
- Docker Compose for Odoo 17
- Docker Compose for Odoo 18
Danh sách bài viết series Odoo:
- Tut 0: Học lập trình Odoo - tutorials
- Tut 1: Odoo là gì?
- Tut 2: Hướng dẫn cài đặt Odoo version 10, 11, 12, 13, 14, 15, 16, 17, 18
- Tut 3: Tạo model trong Odoo
- Tut 4: View trong Odoo
- Tut 5: Controller trong Odoo
- Tut 6: Thừa kế model trong Odoo
- Tut 7: Thừa kế view trong Odoo
- Tut 8: Thừa kế controller trong Odoo
- Tut 9: API trong Odoo - XML-RPC
- Tut 10: Hiện thực wizard trong Odoo
- Tut 11: Tạo widget trong Odoo
- Tut 12: Tạo settings trong Odoo cho custom addon
- Tut 13: Thêm button cho list/tree view trong Odoo
- Tut 14: Search, Filter, Group By trong Odoo
- Tut 15: Kết nối PostgreSQL database của Odoo bằng câu lệnh
- Tut 16: Kết nối pgAdmin vào PostgreSQL database của Odoo
- Tut 17: Tra cứu mã nguồn để lập trình Odoo
Tham gia ngay group trên Facebook để cùng thảo luận với đồng bọn nhé:
- Fanpage Minh: https://www.facebook.com/minhng.info
- Khám phá Odoo: https://www.facebook.com/groups/odoo-dev
Khám phá Odoo