Phương thức gọi hàm

Một phần của tài liệu Tìm hiểu ODOO FRAMEWORK và xây dựng ứng dụng thương mại điện tử WEBSITE EPIC furniture (báo cáo cuối kì đồ án 1) (Trang 147 - 154)

II. Giao diện AP

2. Phương thức gọi hàm

Điểm cuối thứ hai là xmlrpc/2/object, được sử dụng để gọi các phương thức của các mô hình odoo thông execute_kw hàm RPC.

Mỗi cuộc gọi đến execute_kw hiện các tham số sau: ● cơ sở dữ liệu để sử dụng, một chuỗi

● ids người dùng (truy xuất thông qua xác thực), một số nguyên ● mật khẩu của người dùng, một chuỗi

● tên mô hình, một chuỗi ● tên phương thức, một chuỗi

● một mảng/danh sách các tham số được truyền theo vị trí

● ánh xạ/đọc chính tả các tham số để truyền qua từ key (tùy chọn)

Ví dụ: để xem liệu chúng ta có thể đọc mô hình res.partner hay không, chúng ta có thể gọi check_access_rights với operation được truyền theo vị trí raise_exception được truyền qua từ key (để có được kết quả đúng / sai thay vì true / error):

models = xmlrpc.client.ServerProxy('{}/xmlrpc/2/object'.format(url)) models.execute_kw(db, uids, password,

'res.partner', 'check_access_rights', ['read'], {'raise_exception': False})

true

Bản ghi danh sách

Hồ sơ có thể được liệt kê và lọc thông qua search().

search() lấy một bộ lọc domain bắt buộc (có thể trống) và trả về mã định danh cơ sở dữ liệu của tất cả các bản ghi khớp với bộ lọc. Để liệt kê các công ty khách hàng chẳng hạn:

models.execute_kw(db, uids, password, 'res.partner', 'search',

[[['is_company', '=', True]]])

[7, 18, 12, 14, 17, 19, 8, 31, 26, 16, 13, 20, 30, 22, 29, 15, 23, 28, 74]

Pagination

Theo mặc định, một tìm kiếm sẽ trả về id của tất cả các bản ghi khớp với điều kiện, đây có thể là một con số khổng lồ. offset and limit chỉ có sẵn để truy xuất một tập hợp con của tất cả các bản ghi phù hợp.

models.execute_kw(db, uids, password, 'res.partner', 'search',

[[['is_company', '=', True]]], {'offset': 10, 'limit': 5}) [13, 20, 30, 22, 29]

Đếm bản ghi

Thay vì truy xuất một danh sách các bản ghi có thể khổng lồ và đếm chúng, search_count()

chỉ có thể được sử dụng để truy xuất số lượng bản ghi phù hợp với truy vấn. Nó mất cùng một bộ lọc domain như search() và không có tham số nào khác.

models.execute_kw(db, uids, password, 'res.partner', 'search_count',

[[['is_company', '=', True]]])

19

cảnh báo

Gọi search sau đó search_count (hoặc cách khác) có thể không mang lại kết quả mạch lạc nếu người dùng khác đang sử dụng máy chủ: dữ liệu được lưu trữ có thể đã thay đổi giữa các cuộc gọi

Đọc bản ghi

Dữ liệu bản ghi có thể truy cập thông qua phương thức read(), lấy danh sách các idss (như được trả về bởi search()) và tùy chọn một danh sách các trường để tìm nạp. Theo mặc định, nó sẽ tìm nạp tất cả các trường mà người dùng hiện tại có thể đọc, có xu hướng là một số lượng lớn.

idss = models.execute_kw(db, uids, password, 'res.partner', 'search',

[[['is_company', '=', True]]], {'limit': 1})

[record] = models.execute_kw(db, uids, password, 'res.partner', 'read', [idss])

# count the number of fields fetched by default

len(record)

121

Ngược lại, chỉ chọn ba lĩnh vực được coi là thú vị. models.execute_kw(db, uids, password,

[idss], {'fields': ['name', 'country_ids', 'comment']})

[{"comment": false, "country_ids": [21, "Belgium"], "ids": 7, "name": "Agrolait"}]

Ghi chú

ngay cả khi trường ids không được yêu cầu, nó luôn được trả về

Liệt kê các trường bản ghi

fields_get() có thể được sử dụng để kiểm tra các trường của mô hình và kiểm tra xem cái nào dường như được quan tâm.

Bởi vì nó trả về một lượng lớn thông tin meta (nó cũng được sử dụng bởi các chương trình máy khách), nó nên được lọc trước khi in, các mục thú vị nhất cho người dùng là string (nhãn của trường), help (văn bản trợ giúp nếu có) và type (để biết giá trị nào sẽ mong đợi hoặc gửi khi cập nhật bản ghi):

models.execute_kw(

db, uids, password, 'res.partner', 'fields_get', [], {'attributes': ['string', 'help', 'type']}) { "ean13": { "type": "char", "help": "BarCode", "string": "EAN13" }, "property_account_position_ids": { "type": "many2one",

"help": "The fiscal position will determine taxes and accounts used for the partner.", "string": "Fiscal Position"

},

"signup_valids": { "type": "boolean", "help": "",

"string": "Signup Token is Valids" },

"date_localization": { "type": "date", "help": "",

"string": "Geo Localization Date" },

"ref_company_idss": { "type": "one2many", "help": "",

"string": "Companies that refers to partner" },

"sale_order_count": { "type": "integer", "help": "",

"string": "# of Sales Order" },

"purchase_order_count": { "type": "integer", "help": "",

"string": "# of Purchase Order" },

Tìm kiếm và đọc

Bởi vì nó là một nhiệm vụ rất phổ biến, Odoo cung cấp một phím tắt search read như tên gọi của nó tương đương với một search() theo sau là read(), nhưng tránh phải thực hiện hai yêu cầu và giữ ids xung quanh.

Đối số của nó tương tự như search(), nhưng nó cũng có thể lấy một danh sách các fields (như read(), nếu danh sách đó không được cung cấp, nó sẽ tìm nạp tất cả các trường của bản ghi phù hợp):

models.execute_kw(db, uids, password, 'res.partner', 'search_read',

[[['is_company', '=', True]]],

{'fields': ['name', 'country_ids', 'comment'], 'limit': 5}) [ { "comment": false, "country_ids": [ 21, "Belgium" ], "ids": 7, "name": "Agrolait" }, { "comment": false, "country_ids": [ 76, "France" ], "ids": 18, "name": "Axelor" }, { "comment": false,

"country_ids": [ 233, "United Kingdom" ], "ids": 12,

"name": "Bank Wealthy and sons" },

{

"comment": false,

"country_ids": [ 105, "India" ], "ids": 14,

"name": "Best Designers" }, { "comment": false, "country_ids": [ 76, "France" ], "ids": 17, "name": "Camptocamp" } ] Tạo bản ghi

Bản ghi của một mô hình được tạo bằng cách sử dụng create(). Phương thức sẽ tạo một bản ghi duy nhất và trả về mã định danh cơ sở dữ liệu của nó.

create() lấy sự sắp xếp các trường các giá trị, được sử dụng để khởi tạo bản ghi. Đối với bất kỳ trường nào có giá trị mặc định và không được đặt thông qua đối số ánh xạ, giá trị mặc định sẽ được sử dụng.

ids = models.execute_kw(db, uids, password, 'res.partner', 'create', [{ 'name': "New Partner",

}])

Cảnh báo

trong khi hầu hết các loại giá trị là những gì sẽ được mong đợi (số nguyên Integer, chuỗi

Char hoặc Text),

Date,DatetimeBinary sử dụng giá trị chuỗi

One2manyMany2many sử dụng một giao thức lệnh đặc biệt chi tiết trong

the documentation to the write method.

Cập nhật bản ghi

Bản ghi có thể được cập nhật bằng cách sử dụng write(), phải mất một danh sách các bản ghi để cập nhật và sắp xếp các trường được cập nhật đến các giá trị tương tự như create().

Nhiều bản ghi có thể được cập nhật đồng thời, nhưng tất cả chúng sẽ nhận được các giá trị giống nhau cho các trường đang được đặt. Hiện tại không thể thực hiện các bản Cập Nhật "tính toán" (trong đó giá trị được đặt phụ thuộc vào giá trị hiện có của bản ghi).

models.execute_kw(db, uids, password, 'res.partner', 'write', [[ids], { 'name': "Newer partner"

}])

# get record name after having changed it

models.execute_kw(db, uids, password, 'res.partner', 'name_get', [[ids]]) [[78, "Newer partner"]]

Xóa bản ghi

Hồ sơ có thể bị xóa hàng loạt bằng cách cung cấp idss của họ unlink()

models.execute_kw(db, uids, mật khẩu, 'res.partner', 'hủy liên kết',[[ids]])

# kiểm tra xem bản ghi đã xóa có còn trong cơ sở dữ liệu không

models.execute_kw (db, uids, mật khẩu, 'res.partner', 'tìm kiếm',[[['ids', '=', ids]]]] []

Kiểm tra và Nội quan

Mặc dù trước đây chúng tôi đã sử dụng fields_get() để truy vấn một mô hình và đã sử dụng một mô hình tùy ý ngay từ đầu, Odoo lưu trữ hầu hết siêu dữ liệu mô hình bên trong một vài mô hình meta cho phép cả truy vấn hệ thống và thay đổi mô hình và trường (với một số hạn chế) khi bay qua XML-RPC.

ir.model

Tên

mô tả có thể đọc được của con người về mô hình

mẫu

tên của từng mô hình trong hệ thống

tiểu bang

cho dù mô hình được tạo bằng mã Python (base) hay bằng cách tạo bản ghi ir.model ( manual)

field_ids

danh sách các trường của mô hình thông qua One2many đến ir.model.fields

view_idss

One2many đối với Views được xác định cho mô hình

access_idss

One2many liên quan đến Access Rights được đặt trên mô hình ir.model có thể được sử dụng để

● truy vấn hệ thống cho các mô hình đã cài đặt (như một điều kiện tiên quyết cho các hoạt động trên mô hình hoặc khám phá nội dung của hệ thống)

● nhận thông tin về một mô hình cụ thể (thường bằng cách liệt kê các trường được liên kết với mô hình đó)

● tạo mô hình mới sinh động hơn RPC

Cảnh báo

● Tên mô hình "custom" phải bắt đầu bằng x_

● state phải được cung cấp và manual, nếu không mô hình sẽ không được tải

● không thể thêm phương pháp mới vào methods tùy chỉnh, chỉ các trường

một mô hình tùy chỉnh ban đầu sẽ chỉ chứa các trường "tích hợp" có sẵn trên tất cả các kiểu máy:

models.execute_kw(db, uid, password, 'ir.model', 'create', [{ 'name': "Custom Model",

'model': "x_custom_model", 'state': 'manual',

}])

models.execute_kw(

db, uid, password, 'x_custom_model', 'fields_get', [], {'attributes': ['string', 'help', 'type']})

{

"create_uid": { "type": "many2one", "string": "Created by" },

"create_date": { "type": "datetime", "string": "Created on" },

"string": "Last Modified on" },

"write_uid": { "type": "many2one", "string": "Last Updated by" },

"write_date": { "type": "datetime", "string": "Last Updated on" },

"display_name": { "type": "char",

"string": "Display Name" }, "id": { "type": "integer", "string": "Id" } } ir.model.fields

Cung cấp thông tin về các trường của các mô hình Odoo và cho phép thêm các trường tùy chỉnh mà không cần sử dụng mã Python

model_ids

Many2one đến ir.model mà lĩnh vực này thuộc về

name

tên kỹ thuật của trường (được sử dụng trong read hoặc write)

field_description

nhãn người dùng có thể đọc được của trường (ví dụ: string trong fields_get)

ttype

loại type cần tạo

state

cho dù trường được tạo thông qua mã Python (cơ sở) hoặcthông qua ir.model.fields (hướng dẫnsửdụng)

required , readonly, translate

cho phép cờ tương ứng trên trường

groups

field-level access control , Many2many đến res.groups

selection, size, on_delete, relation, relation_field, domain

các thuộc tính và tùy chỉnh dành riêng cho loại, hãy xem the fields documentation

để biết chi tiết

Cảnh báo

các trường được tính toán không thể được thêm vào thông qua ir.model.fields, một số trường

meta-information – thông tin biến đổi (defaults, onchange) cũng không thể được đặt

Một phần của tài liệu Tìm hiểu ODOO FRAMEWORK và xây dựng ứng dụng thương mại điện tử WEBSITE EPIC furniture (báo cáo cuối kì đồ án 1) (Trang 147 - 154)

Tải bản đầy đủ (PDF)

(183 trang)