Đang tải... (xem toàn văn)
Lập trình OdooOpenERP Phần 4: Các phương thức ORM trong OdooOpenERPHướng dẫn sử dụng cơ bản các phương thức ORM trong OdooOpenERP bao gồm các phương thức như read, write, create, search, unlinkPHương pháp override các phương thức trên
TRƯỜNG ĐẠI HỌC NGUYỄN TẤT THÀNH KHOA CÔNG NGHỆ THÔNG TIN MÃ NGUỒN MỞ LAB_4 ORM METHOD Hướng dẫn: Nguyễn Yên Bảo Điện thoại: Email: nybao@ntt.edu.vn NỘI DUNG Giới thiệu ORM Các phương thức thường dùng ORM Override phương thức ORM Những cải tiến Odoo (v8) 2 NỘI DUNG Giới thiệu ORM Các phương thức thường dùng ORM Override phương thức ORM Những cải tiến Odoo (v8) 3 GIỚI THIỆU VỀ ORM ORM gì? ORM (Object Relation Mapping) kĩ thuật ánh xạ từ mơ hình hướng đối tượng xuống CSDL quan hệ Cho phép thao tác table CSDL mà không cần phải quan tâm nhiều đến việc viết câu truy vấn cho lần truy xuất CSDL 4 GIỚI THIỆU VỀ ORM Ưu điểm Độc lập hệ quản trị sở liệu Cung cấp API đơn giản – dễ dùng Giúp cho thiết kế gần gũi với lập trình viên Nhược điểm Các ORM thường tự sinh SQL để select, insert, update, delete… khó can thiệp sâu để tối ưu hóa Ảnh hưởng đến hiệu suất Cấu trúc bảng bên phức tạo lạm dụng việc kế thừa nhiều Khó khăn việc quản lý session 5 PHƯƠNG THỨC ORM THƯỜNG DÙNG Odoo framework hỗ trợ nhiều phương thức giúp tương tác với CSDL thực số chức mở rộng Các đối tượng Odoo thừa kế từ lớp osv.osv nên đối tượng thừa kế tất phương thức ORM Chúng ta gọi đến phương thức bên đối tượng; tạo thể đối tượng, sau gọi phương thức từ thể 6 PHƯƠNG THỨC ORM THƯỜNG DÙNG Nếu bên đối tượng thể self Nếu muốn tạo thể đối tượng khác Chúng ta dùng lệnh self.pool.get('ten_doi_tuong') VD: đối tượng x_sinhvien lại muốn thực phương thức test_method() đối tượng x_khoa Ta thực lệnh self.pool.get(x_khoa').test_method() 7 PHƯƠNG THỨC ORM THƯỜNG DÙNG Một số tham số thường dùng ORM Tên tham số Ý nghĩa cr uid id người dùng thao tác (current id) id ids list chứa id ghi; số nguyên có id context kết nối sở liệu (con trỏ csdl) dictionaries chứa tham số ngữ cảnh như: ngơn ngữ sử dụng gì, múi gì, model đang sử dụng, id Hoặc thêm ngữ cảnh để xử lý số trường hợp cụ thể Ví dụ: {'lang': 'en_US', ‘khongdcxoa’:True } PHƯƠNG THỨC ORM THƯỜNG DÙNG Một số phương thức thường dùng Odoo Tên p.thức Ý nghĩa Browse Read Lấy số field định record truyền vào (Tương đương với SQL: SELECT cot1,cot2 FROM model WHERE id=…) Create Tạo ghi với giá trị truyền vào (tương đương với button CreateSave giao diện lệnh INSERT SQL) Write Cập nhật thông tin cho ghi có id danh sách ids truyền vào ( với button EditSave lệnh UPDATE) Unlink Xóa ghi có id nằm danh sách ids truyền vào Search Tìm số ghi thỏa mãn điều kiện mà truyền vào Copy Trả ghi (record) dạng đối tượng list đối tượng; cho phép truy xuất tới trường (field) quan hệ đối tượng cách dùng kí pháp dấu '.' Tạo ghi; số trường lấy giá trị mặc định mà ta định sẵn ( với button Duplicate) PHƯƠNG THỨC ORM THƯỜNG DÙNG 2.1 Browse Input - ID danh sách ID record cần truy xuất Output - Các record dạng đối tượng list record dạng đối tượng Cú pháp - browse(cr, uid, ids,context=context) 10 10 PHƯƠNG THỨC ORM THƯỜNG DÙNG 2.3 Create Input - Một dictionary record mà muốn thêm vào - Với key tên field value giá trị field Output - ID record vừa tạo Cú pháp - create(cr, uid, vals, context=context) - Với vals dictionary 14 14 PHƯƠNG THỨC ORM THƯỜNG DÙNG 2.3 Create Ví dụ Giả xử thực code đối tượng x_sinhvien - Thực bên đối tượng vals = {'mssv':'1000', 'name':'nguyễn yên bảo'} new_id = self.create(cr,uid,vals,context=context) print new_id - Thực cho đối tượng bên nganh_obj = self.pool.get('x_nganh') vals = {'msnganh':'2000', 'name':'CNTT'} nganh_id = nganh_obj.create(cr,uid,vals,context=context) print nganh_id 15 15 PHƯƠNG THỨC ORM THƯỜNG DÙNG 2.4 Write Input - ID danh sách ID record cần cập nhật - Một dictionaries với key tên field cần cập nhật values giá trị cần cập nhật Output - True/False Cú pháp - write(cr, uid, ids, vals, context=context) 16 16 PHƯƠNG THỨC ORM THƯỜNG DÙNG 2.4 Write Ví dụ Giả xử thực code đối tượng x_sinhvien - Thực bên đối tượng ids = [4,5] vals = {'gioitinh':'nam'} self.write(cr,uid,ids,vals,context=context) - Thực cho đối tượng bên nganh_obj = self.pool.get('x_nganh') ids = [10,15] vals = {‘name':‘Quản trị kinh doanh'} nganh_obj.write(cr,uid,ids,vals,context=context) 17 17 PHƯƠNG THỨC ORM THƯỜNG DÙNG 2.5 Unlink Input - ID danh sách ID record muốn xóa Output - True/False Cú pháp - unlink(cr, uid, ids, context=context) 18 18 PHƯƠNG THỨC ORM THƯỜNG DÙNG 2.5 Unlink Ví dụ Giả xử thực code đối tượng x_sinhvien - Thực bên đối tượng ids = [4,5] self.unlink(cr, uid, ids, context=context) - Thực cho đối tượng bên nganh_obj = self.pool.get('x_nganh') ids = [10,15] nganh_obj.unlink(cr, uid, ids, context=context) 19 19 PHƯƠNG THỨC ORM THƯỜNG DÙNG 2.6 Copy Input - ID record cần nhân (Chỉ có ID) - Một dictionaries với key tên field key giá trị mặc định Sau copy trường liệu có giá trị giống cũ, khác field mà ta dictionaries (defaults) Output - True/False 20 Cú pháp - copy(cr, uid, id, defaults, context=context) 20 PHƯƠNG THỨC ORM THƯỜNG DÙNG 2.6 Copy Ví dụ Giả xử thực code đối tượng x_sinhvien - Thực bên đối tượng defaults = {'nganh':10} id = 12 self.copy(cr, uid, id, defaults,context=context) - Thực cho đối tượng bên nganh_obj = self.pool.get('x_nganh') id = 15 defaults = {'diachi':'Nguyễn Khoái'} nganh_obj.copy(cr, uid, id, defaults, context=context) 21 21 PHƯƠNG THỨC ORM THƯỜNG DÙNG 2.7 Search Input - args: list tuple chứa tiêu chí tìm kiếm ['|', ('id', 'in', [1,2,3]), ('name', 'like', 'Nguyễn%')] 22 - Các option input • offset: bắt đầu lấy record từ vị trí • limit: giới số lượng record trả • order: xếp thứ tự record • count: True, trả số lượng record tìm thấy (Khơng trả ids) • Các tốn tử: =, !=, >, >=,