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,Datetime và Binary sử dụng giá trị chuỗi
● One2many và Many2many 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