III. Xây dựng mô-đun – Building modules
2. Xây dựng mô-đun Odoo
Cả phần mở rộng máy chủ và máy khách đều được đóng gói dưới dạng mô-đun được tải tùy chọn trong cơ sở dữ liệu.
Các mô-đun Odoo có thể thêm logic kinh doanh hoàn toàn mới vào hệ thống Odoo hoặc thay đổi và mở rộng logic kinh doanh hiện có: một mô-đun có thể được tạo để thêm các quy tắc kế toán của quốc gia bạn vào hỗ trợ kế toán chung của Odoo, trong khi mô-đun tiếp theo bổ sung hỗ trợ trực quan hóa đội xe buýt theo thời gian thực.
Mọi thứ trong Odoo do đó bắt đầu và kết thúc bằng các mô-đun.
Thành phần của một mô-đun
Một mô-đun Odoo có thể chứa một số yếu tố:
Được khai báo là lớp Python, các tài nguyên này được Odoo tự động duy trì dựa trên cấu hình của chúng
Dạng xem đối tượng
Định nghĩa đối tượng kinh doanh Hiển thị giao diện người dùng
Tệp dữ liệu
Tệp XML hoặc CSV khai báo siêu dữ liệu mô hình: ● views hoặc reports,
● dữ liệu cấu hình (mô-đun parametrization, security rules), ● dữ liệu trình diễn
● và nhiều hơn nữa
Bộ điều khiển web
Xử lý yêu cầu từ trình duyệt web
Dữ liệu web tĩnh
Hình ảnh, CSS hoặc tệp javascript được sử dụng bởi giao diện web hoặc trang web
Cấu trúc mô-đun
Mỗi mô-đun là một thư mục trong một thư mục mô-đun. Thư mục mô-đun được chỉ định bằng cách sử dụng tùy chọn --addons-path.
Mẹo
Hầu hết các tùy chọn dòng lệnh cũng có thể được đặt bằng tệp cấu hình
Một mô-đun Odoo được tuyên bố bởi biểu hiện của nó.
Một mô-đun cũng là một gói Python với tệp __init__.py, chứa hướng dẫn nhập cho các tệp Python khác nhau trong mô-đun.
Ví dụ: nếu mô-đun có một tệp mymodule.py có __init__.py có thể chứa: từ .nhập mymodule
Odoo cung cấp một cơ chế để giúp thiết lập một mô-đun mới, odoo-bin có một lệnh phụ
giàn giáo – scafford ra một mô-đun trống:
$ odoo-bin scaffold <module name> <where to put it>
Lệnh này tạo một thư mục con cho mô-đun của bạn và tự động tạo một loạt các tệp tiêu chuẩn cho mô-đun. Hầu hết trong số họ chỉ đơn giản là chứa mã nhận xét hoặc XML. Việc sử dụng hầu hết các tệp đó sẽ được giải thích trong hướng dẫn này.
Bài tập
Sử dụng dòng lệnh ở trên để tạo một mô-đun trống Open Academy và cài đặt nó trong Odoo.
Ánh xạ quan hệ đối tượng – Object-Relation Mapping
Một thành phần quan trọng của Odoo là layer ORM. Lớp này tránh phải viết hầu hết SQL bằng tay và cung cấp dịch vụ mở rộng và bảo mật.
Các đối tượng kinh doanh được khai báo là các ModelPython mở rộng Model tích hợp chúng vào hệ thống kiên trì tự động.
Các mô hình có thể được cấu hình bằng cách đặt một số thuộc tính theo định nghĩa của chúng. Thuộc tính quan trọng nhất _name được yêu cầu và xác định tên cho mô hình trong hệ thống Odoo. Dưới đây là một định nghĩa tối thiểu đầy đủ của một mô hình:
fromodooimport models
classMinimalModel(models.Model): _name = 'test.model'
Trường mô hình
Các trường được sử dụng để xác định những gì mô hình có thể lưu trữ và ở đâu. Các trường được định nghĩa là thuộc tính trên lớp mô hình:
fromodooimport models, fields
classLessMinimalModel(models.Model): _name = 'test.model2'
name = fields.Char()
Các thuộc tính phổ biến
Giống như chính mô hình, các trường của nó có thể được cấu hình, bằng cách chuyển các thuộc tính cấu hình dưới dạng tham số:
name = field.Char(required=True)
Một số thuộc tính có sẵn trên tất cả các trường, đây là những thuộc tính phổ biến nhất:
string (unicode, default: field’s name)
Nhãn của trường trong giao diện người dùng (hiển thị bởi người dùng).
required (bool, default: False)
Nếu True, trường không thể trống, nó phải có giá trị mặc định hoặc luôn được đưa ra một giá trị khi tạo bản ghi.
Dạng dài, cung cấp chú giải công cụ trợ giúp cho người dùng trong giao diện người dùng.
index (bool, mặc định: False)
Yêu cầu Odoo tạo chỉ mục cơ sở dữ liệu trên cột.
Trường đơn giản
Có hai loại trường rộng: trường "đơn giản" là các giá trị nguyên tử được lưu trữ trực tiếp trong bảng của mô hình và các trường liên kết "quan hệ" (của cùng một mô hình hoặc của các mô hình khác nhau).
Ví dụ về các trường đơn Boolean, Date, Char.
Trường dành riêng – Reserved fields
Odoo tạo ra một vài trường trong tất cả các mô hình1. Các trường này được quản lý bởi hệ thống và không nên được viết cho. Chúng có thể được đọc nếu hữu ích hoặc cần thiết:
id (Id)
Mã định danh duy nhất cho bản ghi trong mô hình của bản ghi đó.
create_date (Datetime)
Ngày tạo bản ghi.
create_uid ( Many2one)
Người dùng đã tạo bản ghi.
write_date ( Datetime)
Ngày sửa đổi cuối cùng của bản ghi.
write_uid ( Many2one)
người dùng cuối cùng đã sửa đổi bản ghi.
Các trường đặc biệt
Theo mặc định, Odoo cũng yêu cầu một trường tên trên tất cả các mô hình cho các hành vi hiển thị và tìm kiếm khác nhau. Trường được sử dụng cho các mục đích này có thể bị ghi đè bằng cách đặt _rec_name.
Excersice
Xác định mô hình
Xác định một khóa học mô hình dữ liệu mới trong mô-đun openacademy. Một khóa học
Tệp dữ liệu
Odoo là một hệ thống định hướng dữ liệu cao. Mặc dù hành vi được tùy chỉnh bằng cách sử dụng phần mã Python của giá trị mô-đun nằm trong dữ liệu mà nó thiết lập khi được tải.
Mẹo
một số mô-đun chỉ tồn tại để thêm dữ liệu vào Odoo
Dữ liệu mô-đun được khai báo thông qua các tệp dữ liệu , tệp XML với <record> của nó. Mỗi <record> hoặc cập nhật bản ghi cơ sở dữ liệu.
<odoo>
<recordmodel="{model name}"id="{record identifier}">
<fieldname="{a field name}">{a value}</field>
</record> </odoo>
● model là tên của mô hình Odoo cho bản thu âm.
● id là một mã định danh bên ngoài, nó cho phép tham chiếu đến bản ghi (mà không cần phải biết mã định danh trong cơ sở dữ liệu của nó).
● <field>elements có tên là tên của trường trong mô hình (ví dụ: mô tả). Cơ thể của họ là giá trị của lĩnh vực này.
Các tệp dữ liệu phải được khai báo trong tệp kê khai cần tải, chúng có thể được khai báo trong danh sách 'data' (luôn được tải) hoặc trong danh sách 'demo' (chỉ được tải ở chế độ trình diễn).
Bài tập
Xác định dữ liệu trình diễn
Tạo dữ liệu trình diễn điền vào mô hình Khóa học với một vài khóa học trình diễn.
Mẹo
Nội dung của các tệp dữ liệu chỉ được tải khi mô-đun được cài đặt hoặc cập nhật.
Sau khi thực hiện một số thay đổi, đừng quên sử dụng odoo-bin -u openacademy để lưu các thay đổi vào cơ sở dữ liệu của bạn.
Hành động và Menu
Hành động và menu là bản ghi thông thường trong cơ sở dữ liệu, thường được khai báo thông qua các tệp dữ liệu. Hành động có thể được kích hoạt theo ba cách:
1. bằng cách nhấp vào các mục menu (được liên kết với các hành động cụ thể)
2. bằng cách nhấp vào các nút trong chế độ xem (nếu chúng được kết nối với các hành động)
3. như hành động theo ngữ cảnh trên đối tượng
Bởi vì các menu có phần phức tạp để khai báo có một <menuitem> shortcut để khai báo một ir.ui.menu và kết nối nó với hành động tương ứng dễ dàng hơn.
<recordmodel="ir.actions.act_window"id="action_list_ideas">
<fieldname="name">Ideas</field>
<fieldname="res_model">idea.idea</field>
<fieldname="view_mode">tree,form</field> </record>
<menuitemid="menu_ideas"parent="menu_root"name="Ideas"sequence="10"
action="action_list_ideas"/>
Nguy hiểm
Hành động phải được khai báo trước menu tương ứng trong tệp XML.
Các tệp dữ liệu được thực thi tuần tự, id của hành động phải có mặt trong cơ sở dữ liệu
trước khi menu có thể được tạo.
Bài tập
Xác định các mục menu mới
Xác định các mục menu mới để truy cập các khóa học trong mục menu OpenAcademy. Người dùng sẽ có thể:
● hiển thị danh sách tất cả các khóa học
● tạo/sửa đổi khóa học