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ụng

  • deps (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 trong env.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

cookie

đọc hoặc sửa đổi cookie

effect

hiển thị hiệu ứng đồ họa

http

thực hiện cuộc gọi http cấp thấp

thông báo

hiển thị thông báo

bộ định tuyến

quản lý url trình duyệt

rpc

gửi yêu cầu đến máy chủ

scroller

xử lý các nhấp chuột vào các phần tử neo

title

đọc hoặc sửa đổi tiêu đề cửa sổ

người dùng

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 đặt

  • value (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:

Hiệu ứng người 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ả

params.Component

cú.Thành phần?

Lớp thành phần để khởi tạo bên trong RainbowMan (sẽ thay thế thông báo).

params.props

đối tượng?={}

Nếu params.Component được cung cấp, props của nó có thể được truyền với đối số này.

params.message

string?="Làm tốt lắm!"

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).

params.messageIsHtml

boolean?=false

Đặ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.

params.img_url

string?=/web/static/img/smile.svg

Url của hình ảnh sẽ hiển thị bên trong cầu vồng.

params.fadeout

("chậm"|"trung bình"|"nhanh"|"không")?="trung bình"

Trì hoãn để Rainbowman biến mất.

"nhanh" sẽ khiến người cầu vồng biến mất nhanh chóng.

"trung bình""chậm" sẽ đợi lâu hơn một chút trước khi biến mất (có thể được sử dụng khi params.message dài hơn).

"không" sẽ giữ Rainbowman trên màn hình cho đến khi người dùng nhấp vào bất kỳ nơi nào bên ngoài Rainbowman.

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 được

  • params (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" });
SoOn màu nâu đỏ

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 getpost http.

API

async get(route[, readMethod = "json"])
Đối số
  • route (string()) -- url để gửi yêu cầu tới

  • readMethod (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ới

  • params (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ầu

  • readMethod (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");
          },
      },
  ],
});
Ví dụ về thông báo

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àng

  • bă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ượng hash 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ầu

  • params (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ượng XMLHTTPRequest. Trong trường hợp đó, phương thức rpc 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 API XMLHTTPRequest.

  • im lặng (boolean) Nếu được đặt thành true, 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óa error.

  • 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ả

yếu tố

Phần tử HTML | giá trị

Phần tử neo được nhắm mục tiêu bởi href

id

chuỗi

Id chứa trong href

bản gốcEv

Sự kiện

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ỗi value_i là một giá trị (không null) được tìm thấy trong đối tượng Parts (được trả về bởi hàm getParts)

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ành null.

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ị currentSoOn - 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``

Đối tượng

bối cảnh người dùng

db

Đối tượng

Thông tin về cơ sở dữ liệu

home_action_id

(số | sai)

Id của hành động được sử dụng làm nhà cho người dùng

isAdmin

`` boolean``

Người dùng có phải là quản trị viên hay không (nhóm base.group_erp_manager hoặc superuser)

isSystem

`` boolean``

Người dùng có phải là thành viên của nhóm hệ thống hay không (base.group_system)

`` lang``

chuỗi

ngôn ngữ được sử dụng

tên

chuỗi

Tên của người dùng

Id đối tác

`` số``

Id phiên bản đối tác của người dùng

`` tz``

chuỗi

Múi giờ của người dùng

ID người dùng

`` số``

Id của người dùng

tên người dùng

chuỗi

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")