Tra cứu mã nguồn để lập trình Odoo

  Jan 20, 2025      2m      0   
 

Tut 17: Tra cứu mã nguồn để lập trình Odoo

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.

Chọn mã nguồn phiên bản Odoo trên odoo.minhng.info

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

Odoo filtered

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

Odoo auth

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.

Odoo product product

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ả.

Odoo sequence

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.templateproduct.product (thừa kế chỉnh sửa hành vi)

Odoo extra prices

Odoo


Cài đặt Odoo:

Danh sách bài viết series Odoo:

Tham gia ngay group trên Facebook để cùng thảo luận với đồng bọn nhé:

Khám phá Odoo


Khám phá xử lý ảnh - GVGroup




-->