Dịch vụ¶
Dịch vụ là những đoạn mã tồn tại lâu dài cung cấp một tính năng. Chúng có thể được nhập theo các thành phần (với useService
) hoặc bởi các dịch vụ khác. Ngoài ra, họ có thể khai báo một tập hợp các phụ thuộc. Theo nghĩa đó, các dịch vụ về cơ bản là một hệ thống DI dependency dependency. Ví dụ: dịch vụ thông báo
cung cấp cách hiển thị thông báo hoặc dịch vụ rpc
là cách thích hợp để thực hiện yêu cầu tới máy chủ SoOn.
Ví dụ sau đăng ký một dịch vụ đơn giản hiển thị thông báo cứ sau 5 giây:
import { registry } from "@web/core/registry";
const myService = {
dependencies: ["notification"],
start(env, { notification }) {
let counter = 1;
setInterval(() => {
notification.add(`Tick Tock ${counter++}`);
}, 5000);
}
};
registry.category("services").add("myService", myService);
Khi khởi động, máy khách web khởi động tất cả các dịch vụ có trong sổ đăng ký services
. Lưu ý rằng tên được sử dụng trong sổ đăng ký là tên của dịch vụ.
Ghi chú
Hầu hết mã không phải là thành phần phải được đóng gói trong một dịch vụ, đặc biệt nếu nó thực hiện một số tác dụng phụ. Điều này rất hữu ích cho mục đích thử nghiệm: thử nghiệm có thể chọn dịch vụ nào đang hoạt động, do đó sẽ có ít khả năng xảy ra các tác dụng phụ không mong muốn ảnh hưởng đến mã đang được thử nghiệm.
Xác định một dịch vụ¶
Một dịch vụ cần triển khai giao diện sau:
- dependencies¶
Danh sách các chuỗi tùy chọn. Đó là danh sách tất cả các phụ thuộc (các dịch vụ khác) mà dịch vụ này cần
- start(env, deps)¶
- Đối số
env (
Environment()
) -- môi trường ứng dụngdeps (
Object()
) -- tất cả các phụ thuộc được yêu cầu
- Trả về
giá trị dịch vụ hoặc Lời hứa<giá trị dịch vụ>
Đây là định nghĩa chính cho dịch vụ. Nó có thể trả về một giá trị hoặc một lời hứa. Trong trường hợp đó, trình tải dịch vụ chỉ cần đợi lời hứa phân giải thành một giá trị, sau đó là giá trị của dịch vụ.
Một số dịch vụ không xuất bất kỳ giá trị nào. Họ có thể chỉ thực hiện công việc của mình mà không cần phải gọi trực tiếp bằng mã khác. Trong trường hợp đó, giá trị của chúng sẽ được đặt thành
null
trongenv.services
.
- async¶
Giá trị tùy chọn. Nếu được cung cấp, nó phải là
true
hoặc một danh sách các chuỗi.Một số dịch vụ cần cung cấp API không đồng bộ. Ví dụ: dịch vụ
rpc
là một hàm không đồng bộ hoặc dịch vụorm
cung cấp một tập hợp các hàm để gọi máy chủ SoOn.Trong trường hợp đó, có thể các thành phần sử dụng dịch vụ sẽ bị hủy trước khi kết thúc lệnh gọi hàm không đồng bộ. Trong hầu hết các trường hợp, lệnh gọi hàm không đồng bộ cần được bỏ qua. Làm khác đi tiềm ẩn rất nhiều rủi ro vì thành phần cơ bản không còn hoạt động nữa. Cờ
async
là một cách để thực hiện điều đó: nó báo hiệu cho người tạo dịch vụ rằng tất cả các cuộc gọi không đồng bộ đến từ các thành phần sẽ được chờ xử lý nếu thành phần đó bị hủy.
Sử dụng một dịch vụ¶
Một dịch vụ phụ thuộc vào các dịch vụ khác và đã khai báo đúng phụ thuộc
của nó chỉ nhận được một tham chiếu đến các dịch vụ tương ứng trong đối số thứ hai của phương thức start
.
Hook useService
là cách thích hợp để sử dụng một dịch vụ trong một thành phần. Nó chỉ đơn giản trả về một tham chiếu đến giá trị dịch vụ, sau đó thành phần này có thể sử dụng giá trị đó. Ví dụ:
import { useService } from "@web/core/utils/hooks";
class MyComponent extends Component {
setup() {
const rpc = useService("rpc");
onWillStart(async () => {
this.someValue = await rpc(...);
});
}
}
Danh sách tham khảo¶
Tên kỹ thuật |
Mô tả ngắn |
---|---|
đọc hoặc sửa đổi cookie |
|
hiển thị hiệu ứng đồ họa |
|
thực hiện cuộc gọi http cấp thấp |
|
hiển thị thông báo |
|
quản lý url trình duyệt |
|
gửi yêu cầu đến máy chủ |
|
xử lý các nhấp chuột vào các phần tử neo |
|
đọc hoặc sửa đổi tiêu đề cửa sổ |
|
cung cấp một số thông tin liên quan đến người dùng hiện tại |
Tổng quan¶
Tên kỹ thuật:
cookie
Người phụ thuộc: không có
Cung cấp một cách để thao tác cookie. Ví dụ:
cookieService.setCookie("hello", "odoo");
API¶
- current¶
Đối tượng đại diện cho mỗi cookie và giá trị của nó nếu có (hoặc chuỗi trống)
- setCookie(name[, value, ttl])¶
- Đối số
name (
string()
) -- tên của cookie cần được đặtvalue (
any()
) -- không bắt buộc. Nếu được cung cấp, cookie sẽ được đặt thành giá trị đóttl (
number()
) -- không bắt buộc. thời gian tính bằng giây trước khi cookie bị xóa (mặc định=1 năm)
Đặt cookie
name
thành giá trịvalue
với độ tuổi tối đa làttl
- deleteCookie(name)¶
- Đối số
name (
string()
) -- tên của bánh quy
Xóa cookie
name
.
Dịch vụ hiệu ứng¶
Tổng quan¶
Tên kỹ thuật:
hiệu ứng
Người phụ thuộc: Không có
Hiệu ứng là các thành phần đồ họa có thể được hiển thị tạm thời trên đầu trang, thường là để cung cấp phản hồi cho người dùng rằng có điều gì đó thú vị đã xảy ra.
Một ví dụ điển hình là người đàn ông cầu vồng:

Đây là cách điều này có thể được hiển thị:
const effectService = useService("effect");
effectService.add({
type: "rainbow_man", // can be omitted, default type is already "rainbow_man"
message: "Boom! Team record for the past 30 days.",
});
Cảnh báo
Hook useEffect
không liên quan đến dịch vụ hiệu ứng.
API¶
- effectService.add(options)¶
- Đối số
options (
object()
) -- các tùy chọn cho hiệu ứng. Chúng sẽ được chuyển đến thành phần hiệu ứng cơ bản.
Hiển thị một hiệu ứng
Các tùy chọn được xác định bởi:
interface EffectOptions {
// The name of the desired effect
type?: string;
[paramName: string]: any;
}
Hiệu ứng có sẵn¶
Hiện tại, hiệu ứng duy nhất là người đàn ông cầu vồng.
Cầu Vồng¶
effectService.add({ type: "rainbow_man" });
Tên |
Kiểu |
Sự miêu tả |
---|---|---|
|
|
Lớp thành phần để khởi tạo bên trong RainbowMan (sẽ thay thế thông báo). |
|
|
Nếu params.Component được cung cấp, props của nó có thể được truyền với đối số này. |
|
|
Tin nhắn là thông báo mà người cầu vồng nắm giữ. Nếu người dùng tắt hiệu ứng, cầu vồng sẽ không xuất hiện và một thông báo đơn giản sẽ được hiển thị dưới dạng dự phòng. Nếu hiệu ứng được bật và params.Component được cung cấp thì params.message sẽ không được sử dụng. Thông báo là một chuỗi đơn giản hoặc một chuỗi biểu thị html (thích sử dụng params.Component nếu bạn muốn tương tác trong DOM). |
|
|
Đặt thành true nếu thông báo đại diện cho html, s.t. nó sẽ được chèn chính xác vào DOM. |
|
|
Url của hình ảnh sẽ hiển thị bên trong cầu vồng. |
|
|
Trì hoãn để Rainbowman biến mất.
|
Cách thêm hiệu ứng¶
Các hiệu ứng được lưu trữ trong sổ đăng ký có tên là effect
. Bạn có thể thêm các hiệu ứng mới bằng cách cung cấp tên và chức năng.
const effectRegistry = registry.category("effects");
effectRegistry.add("rainbow_man", rainbowManEffectFunction);
Hàm phải tuân theo API này:
- <newEffectFunction>(env, params)¶
- Đối số
env (
Env()
) -- môi trường mà dịch vụ nhận đượcparams (
object()
) -- các thông số nhận được từ hàm thêm trên dịch vụ.
- Trả về
({Component, props} | void)
Một thành phần và các props của nó hoặc không có gì.
Hàm này phải tạo một thành phần và trả về nó. Thành phần này được gắn bên trong thùng chứa thành phần hiệu ứng.
Ví dụ¶
Giả sử chúng ta muốn thêm một hiệu ứng làm cho trang có màu nâu đỏ.
/** @odoo-module **/
import { registry } from "@web/core/registry";
const { Component, tags } = owl;
class SepiaEffect extends Component {}
SepiaEffect.template = tags.xml`
<div style="
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
pointer-events: none;
background: rgba(124,87,0, 0.4);
"></div>
`;
export function sepiaEffectProvider(env, params = {}) {
return {
Component: SepiaEffect,
};
}
const effectRegistry = registry.category("effects");
effectRegistry.add("sepia", sepiaEffectProvider);
Và sau đó, gọi nó ở đâu đó bạn muốn và bạn sẽ thấy kết quả. Ở đây, nó được gọi trong webclient.js để làm cho nó hiển thị ở mọi nơi trong ví dụ.
const effectService = useService("effect");
effectService.add({ type: "sepia" });

Dịch vụ http¶
Tổng quan¶
Tên kỹ thuật:
http
Người phụ thuộc: Không có
Mặc dù hầu hết các tương tác giữa máy khách và máy chủ trong odoo đều là RPC
(XMLHTTPRequest
), đôi khi có thể cần phải kiểm soát các yêu cầu ở cấp độ thấp hơn.
Dịch vụ này cung cấp cách gửi các yêu cầu http get
và post
http.
API¶
- async get(route[, readMethod = "json"])¶
- Đối số
route (
string()
) -- url để gửi yêu cầu tớireadMethod (
string()
) -- loại nội dung phản hồi. Có thể là "văn bản", "json", "formData", "blob", "arrayBuffer".
- Trả về
kết quả của yêu cầu có định dạng được xác định bởi đối số readMethod.
Gửi yêu cầu nhận.
- async post(route[, params = {}, readMethod = "json"])¶
- Đối số
route (
string()
) -- url để gửi yêu cầu tớiparams (
object()
) -- dữ liệu giá trị khóa được đặt trong phần dữ liệu biểu mẫu của yêu cầureadMethod (
string()
) -- loại nội dung phản hồi. Có thể là "văn bản", "json", "formData", "blob", "arrayBuffer".
- Trả về
kết quả của yêu cầu có định dạng được xác định bởi đối số readMethod.
Gửi yêu cầu đăng bài.
Ví dụ¶
const httpService = useService("http");
const data = await httpService.get("https://something.com/posts/1");
// ...
await httpService.post("https://something.com/posts/1", { title: "new title", content: "new content" });
Dịch vụ thông báo¶
Tổng quan¶
Tên kỹ thuật:
thông báo
Người phụ thuộc: Không có
Dịch vụ notification
cho phép hiển thị thông báo trên màn hình.
const notificationService = useService("notification");
notificationService.add("I'm a very simple notification");
API¶
- add(message[, options])¶
- Đối số
message (
string()
) -- tin nhắn thông báo sẽ hiển thịoptions (
object()
) -- các tùy chọn của thông báo
- Trả về
chức năng đóng thông báo
Hiển thị một thông báo.
Các tùy chọn được xác định bởi:
Tên
Kiểu
Sự miêu tả
tiêu đề
sợi dây
Thêm tiêu đề vào thông báo
loại
cảnh báo
|nguy hiểm
|thành công
|thông tin
Thay đổi màu nền theo loại
dính
boolean
Thông báo có nên ở lại cho đến khi bị loại bỏ hay không
tên lớp
sợi dây
lớp css bổ sung sẽ được thêm vào thông báo
đóng
chức năng
gọi lại sẽ được thực hiện khi thông báo đóng
nút
nút [] (xem bên dưới)
danh sách nút hiển thị trong thông báo
Các nút được xác định bởi:
Tên
Kiểu
Sự miêu tả
tên
sợi dây
Văn bản nút
onClick
chức năng
gọi lại để thực thi khi nhấp vào nút
chính
boolean
liệu nút có nên được tạo kiểu như nút chính hay không
Ví dụ¶
Thông báo khi thực hiện một giao dịch mua bán bằng một nút để chuyển đến một loại trang hoa hồng nào đó.
// in setup
this.notificationService = useService("notification");
this.actionService = useService("action");
// later
this.notificationService.add("You closed a deal!", {
title: "Congrats",
type: "success",
buttons: [
{
name: "See your Commission",
onClick: () => {
this.actionService.doAction("commission_action");
},
},
],
});

Một thông báo sẽ đóng sau một giây:
const notificationService = useService("notification");
const close = notificationService.add("I will be quickly closed");
setTimeout(close, 1000);
Dịch vụ định tuyến¶
Tổng quan¶
Tên kỹ thuật:
bộ định tuyến
Người phụ thuộc: không có
Dịch vụ router
cung cấp ba tính năng:
thông tin về tuyến đường hiện tại
một cách để ứng dụng cập nhật url, tùy thuộc vào trạng thái của nó
lắng nghe mọi thay đổi băm và thông báo cho phần còn lại của ứng dụng
API¶
- current
Tuyến đường hiện tại có thể được truy cập bằng phím
current
. Nó là một đối tượng có thông tin sau:pathname (string)
: đường dẫn cho vị trí hiện tại (rất có thể là/web
)tìm kiếm (đối tượng)
: một từ điển ánh xạ từng từ khóa tìm kiếm (chuỗi truy vấn) từ url tới giá trị của nó. Chuỗi trống là giá trị nếu không có giá trị nào được đưa ra rõ ràngbăm (đối tượng)
: tương tự như trên, nhưng đối với các giá trị được mô tả trong hàm băm.
Ví dụ:
// url = /web?debug=assets#action=123&owl&menu_id=174
const { pathname, search, hash } = env.services.router.current;
console.log(pathname); // /web
console.log(search); // { debug="assets" }
console.log(hash); // { action:123, owl: "", menu_id: 174 }
Việc cập nhật URL được thực hiện bằng phương thức pushState
:
- pushState(hash: object[, replace?: boolean])¶
- Đối số
hash (
Object()
) -- đối tượng chứa ánh xạ từ một số khóa đến một số giá trịreplace (
boolean()
) -- nếu đúng, url sẽ được thay thế, nếu không thì chỉ các cặp khóa/giá trị từbăm
mới được cập nhật.
Cập nhật URL với từng cặp khóa/giá trị từ đối tượng
hash
. Nếu một giá trị được đặt thành một chuỗi trống, khóa sẽ được thêm vào url mà không có bất kỳ giá trị tương ứng nào.Nếu đúng, đối số
replace
sẽ cho bộ định tuyến biết rằng hàm băm url phải được thay thế hoàn toàn (vì vậy các giá trị không có trong đối tượnghash
sẽ bị xóa).Cuộc gọi phương thức này không tải lại trang. Nó cũng không kích hoạt sự kiện
hashchange
, cũng nhưROUTE_CHANGE
trong main bus. Điều này là do phương pháp này chỉ nhằm mục đích cập nhật url. Mã gọi phương thức này có trách nhiệm đảm bảo rằng màn hình cũng được cập nhật.
Ví dụ:
// url = /web#action_id=123
routerService.pushState({ menu_id: 321 });
// url is now /web#action_id=123&menu_id=321
routerService.pushState({ yipyip: "" }, replace: true);
// url is now /web#yipyip
Cuối cùng, phương thức redirect
sẽ chuyển hướng trình duyệt đến một url được chỉ định:
- redirect(url[, wait])¶
- Đối số
url (
string()
) -- một url hợp lệwait (
boolean()
) -- nếu đúng, hãy đợi máy chủ sẵn sàng và chuyển hướng sau
Chuyển hướng trình duyệt tới
url
. Phương pháp này tải lại trang. Đối sốwait
hiếm khi được sử dụng: nó hữu ích trong một số trường hợp mà chúng tôi biết rằng máy chủ sẽ không khả dụng trong một khoảng thời gian ngắn, thường là ngay sau thao tác cài đặt hoặc cập nhật tiện ích bổ sung.
Ghi chú
Dịch vụ bộ định tuyến phát ra sự kiện ROUTE_CHANGE
trên bus chính bất cứ khi nào tuyến đường hiện tại thay đổi.
Dịch vụ RPC¶
Tổng quan¶
Tên kỹ thuật:
rpc
Người phụ thuộc: không có
Dịch vụ rpc
cung cấp một chức năng không đồng bộ duy nhất để gửi yêu cầu đến máy chủ. Việc gọi một bộ điều khiển rất đơn giản: tuyến đường phải là đối số đầu tiên và tùy ý, một đối tượng params
có thể được đưa ra làm đối số thứ hai.
// in setup
this.rpc = useService("rpc");
// somewhere else, in an async function:
const result = await this.rpc("/my/route", { some: "value" });
Ghi chú
Lưu ý rằng dịch vụ rpc
được coi là dịch vụ cấp thấp. Nó chỉ nên được sử dụng để tương tác với bộ điều khiển SoOn. Để làm việc với các mô hình (cho đến nay đây là trường hợp sử dụng quan trọng nhất), thay vào đó, người ta nên sử dụng dịch vụ orm
.
API¶
- rpc(route, params, settings)¶
- Đối số
route (
string()
) -- tuyến đường được nhắm mục tiêu theo yêu cầuparams (
Object()
) -- (tùy chọn) các tham số được gửi đến máy chủsettings (
Object()
) -- (tùy chọn) cài đặt yêu cầu (xem bên dưới)
Đối tượng
settings
có thể chứa:xhr
, phải là một đối tượngXMLHTTPRequest
. Trong trường hợp đó, phương thứcrpc
sẽ chỉ sử dụng nó thay vì tạo một phương thức mới. Điều này hữu ích khi một người truy cập các tính năng nâng cao của APIXMLHTTPRequest
.im lặng (boolean)
Nếu được đặt thànhtrue
, máy khách web sẽ không cung cấp phản hồi rằng có một rpc đang chờ xử lý.
Dịch vụ rpc
giao tiếp với máy chủ bằng cách sử dụng đối tượng XMLHTTPRequest
, được định cấu hình để hoạt động với loại nội dung application/json
. Vì vậy, rõ ràng nội dung của yêu cầu phải được tuần tự hóa JSON. Mỗi yêu cầu được thực hiện bởi dịch vụ này đều sử dụng phương thức http POST
.
Lỗi máy chủ thực sự trả về phản hồi với mã http 200. Nhưng dịch vụ rpc
sẽ coi chúng là lỗi.
Xử lý lỗi¶
Một rpc có thể bị lỗi vì hai lý do chính:
hoặc máy chủ odoo trả về lỗi (vì vậy, chúng tôi gọi đây là lỗi
máy chủ
). Trong trường hợp đó, yêu cầu http sẽ trả về với mã http 200 NHƯNG với đối tượng phản hồi chứa khóaerror
.hoặc có một số loại lỗi mạng khác
Khi một rpc bị lỗi thì:
lời hứa đại diện cho rpc bị từ chối, do đó mã gọi sẽ bị lỗi, trừ khi nó xử lý được tình huống
một sự kiện
RPC_ERROR
được kích hoạt trên bus ứng dụng chính. Tải trọng sự kiện chứa mô tả về nguyên nhân gây ra lỗi:Nếu đó là lỗi máy chủ (mã máy chủ đã đưa ra một ngoại lệ). Trong trường hợp đó, tải trọng sự kiện sẽ là một đối tượng có các khóa sau:
`` gõ = 'máy chủ'``
tin nhắn(chuỗi)
mã(số)
name(string)
(tùy chọn, được dịch vụ lỗi sử dụng để tìm hộp thoại thích hợp để sử dụng khi xử lý lỗi)subType(string)
(tùy chọn, thường được sử dụng để xác định tiêu đề hộp thoại)data(object)
(đối tượng tùy chọn có thể chứa nhiều khóa khác nhau, trong đódebug
: thông tin gỡ lỗi chính, với ngăn xếp cuộc gọi)
Nếu là lỗi mạng thì mô tả lỗi chỉ đơn giản là một đối tượng
{type: 'network'}
. Khi xảy ra lỗi mạng, notification được hiển thị và máy chủ sẽ được liên lạc thường xuyên cho đến khi có phản hồi. Thông báo sẽ bị đóng ngay khi máy chủ phản hồi.
Dịch vụ cuộn¶
Tổng quan¶
Tên kỹ thuật:
scroller
Người phụ thuộc: không có
Bất cứ khi nào người dùng nhấp vào một điểm neo trong máy khách web, dịch vụ này sẽ tự động cuộn đến mục tiêu (nếu thích hợp).
Dịch vụ này thêm một trình xử lý sự kiện để nhận được click
trên tài liệu. Dịch vụ sẽ kiểm tra xem bộ chọn có trong thuộc tính href của nó có hợp lệ hay không để phân biệt các neo và hành động SoOn (ví dụ: <a href="#target_element"></a>
). Nó không làm gì nếu nó không phải là trường hợp.
Một sự kiện SCROLLER:ANCHOR_LINK_CLICKED
được kích hoạt trên bus ứng dụng chính nếu lần nhấp chuột dường như được nhắm mục tiêu vào một phần tử. Sự kiện này chứa một sự kiện tùy chỉnh chứa phần tử trùng khớp và id
của nó làm tham chiếu. Nó có thể cho phép các bộ phận khác xử lý một hành vi liên quan đến chính các điểm neo. Sự kiện ban đầu cũng được đưa ra vì nó có thể cần được ngăn chặn. Nếu sự kiện không được ngăn chặn thì giao diện người dùng sẽ cuộn đến phần tử đích.
API¶
Các giá trị sau có trong sự kiện tùy chỉnh anchor-link-click
được giải thích ở trên.
Tên |
Kiểu |
Sự miêu tả |
---|---|---|
|
|
Phần tử neo được nhắm mục tiêu bởi href |
|
|
Id chứa trong href |
|
|
Sự kiện nhấp chuột ban đầu |
Ghi chú
Dịch vụ cuộn phát ra sự kiện SCROLLER:ANCHOR_LINK_CLICKED
trên bus chính. Để tránh hành vi cuộn mặc định của dịch vụ cuộn, bạn phải sử dụng preventDefault()
trên sự kiện được cung cấp cho trình nghe để bạn có thể triển khai hành vi của riêng mình một cách chính xác từ trình nghe.
Dịch vụ Tiêu đề¶
Tổng quan¶
Tên kỹ thuật:
title
Người phụ thuộc: không có
Dịch vụ title
cung cấp một API đơn giản cho phép đọc/sửa đổi tiêu đề tài liệu. Ví dụ: nếu tiêu đề tài liệu hiện tại là "SoOn", chúng ta có thể thay đổi nó thành "SoOn 15 - Apple" bằng cách sử dụng lệnh sau:
// in some component setup method
const titleService = useService("title");
titleService.setParts({ odoo: "Odoo 15", fruit: "Apple" });
API¶
Dịch vụ title
thao tác với giao diện sau:
interface Parts {
[key: string]: string | null;
}
Mỗi khóa đại diện cho danh tính của một phần tiêu đề và mỗi giá trị là chuỗi được hiển thị hoặc null
nếu nó đã bị xóa.
API của nó là:
- current
Đây là một chuỗi đại diện cho tiêu đề hiện tại. Nó được cấu trúc theo cách sau:
value_1 - ... - value_n
trong đó mỗivalue_i
là một giá trị (không null) được tìm thấy trong đối tượngParts
(được trả về bởi hàmgetParts
)
- getParts()¶
- Trả về
Parts đối tượng
Parts
hiện tại được duy trì bởi dịch vụ tiêu đề
- setParts(parts)¶
- Đối số
parts (
Parts()
) -- đối tượng đại diện cho sự thay đổi cần thiết
Phương thức
setParts
cho phép thêm/thay thế/xóa một số phần của tiêu đề. Xóa một phần (giá trị) được thực hiện bằng cách đặt giá trị khóa liên quan thànhnull
.Lưu ý rằng người ta chỉ có thể sửa đổi một phần duy nhất mà không ảnh hưởng đến các phần khác. Ví dụ: nếu tiêu đề bao gồm các phần sau:
{ odoo: "Odoo", action: "Import" }
với giá trị
current
làSoOn - Import
, thìsetParts({ action: null, });
sẽ thay đổi tiêu đề thành
SoOn
.
Dịch vụ người dùng¶
Tổng quan¶
Tên kỹ thuật:
người dùng
Các phần phụ thuộc:
rpc
Dịch vụ người dùng
cung cấp một loạt dữ liệu và một số chức năng trợ giúp liên quan đến người dùng được kết nối.
API¶
Tên |
Kiểu |
Sự miêu tả |
---|---|---|
`` bối cảnh`` |
|
|
|
|
Thông tin về cơ sở dữ liệu |
|
|
Id của hành động được sử dụng làm nhà cho người dùng |
|
`` boolean`` |
Người dùng có phải là quản trị viên hay không (nhóm |
|
`` boolean`` |
Người dùng có phải là thành viên của nhóm hệ thống hay không ( |
`` lang`` |
|
ngôn ngữ được sử dụng |
|
|
Tên của người dùng |
|
`` số`` |
Id phiên bản đối tác của người dùng |
`` tz`` |
|
Múi giờ của người dùng |
|
`` số`` |
Id của người dùng |
|
|
Tên nick thay thế của người dùng |
- updateContext(update)¶
- Đối số
update (
object()
) -- đối tượng để cập nhật bối cảnh với
cập nhật user context với đối tượng đã cho.
userService.updateContext({ isFriend: true })
- removeFromContext(key)¶
- Đối số
key (
string()
) -- khóa của thuộc tính được nhắm mục tiêu
xóa giá trị bằng khóa đã cho khỏi user context
userService.removeFromContext("isFriend")
- hasGroup(group)¶
- Đối số
group (
string()
) -- xml_id của nhóm cần tìm
- Trả về
Promise<boolean>
là người dùng trong nhóm
kiểm tra xem người dùng có phải là thành viên của một nhóm không
const isInSalesGroup = await userService.hasGroup("sale.group_sales")