Дії

Дії визначають поведінку системи у відповідь на дії користувача: вхід, кнопка дії, вибір рахунку, …

Дії можна зберігати в базі даних або повертати безпосередньо як словники, напр. кнопкові методи. Усі дії мають два обов’язкові атрибути:

type

категорія поточної дії визначає, які поля можна використовувати та як інтерпретується дія

name

короткий опис дії, зрозумілий для користувача, може відображатися в інтерфейсі клієнта

Клієнт може отримати дії в 4 формах:

  • False

    якщо наразі відкрито будь-яке діалогове вікно дії, закрийте його

  • Рядок

    якщо клієнтська дія збігається, інтерпретувати як тег клієнтської дії, інакше розглядати як число

  • Номер

    читати відповідний запис дії з бази даних, може бути ідентифікатором бази даних або зовнішній id

  • Словник

    розглядати як дескриптор дії клієнта та виконати

Зв’язування

Окрім двох обов’язкових атрибутів, усі дії також мають додаткові атрибути, які використовуються для представлення дії в контекстному меню довільної моделі:

binding_model_id

вказує, до якої моделі прив’язана дія

Примітка

Для дій сервера використовуйте model_id.

binding_type

вказує тип прив’язки, який, здебільшого, полягає в тому, під яким контекстним меню дія відображатиметься

action (за замовчуванням)

Вказує, що дія з’явиться в контекстному меню Дія пов’язаної моделі.

report

Вказує, що дія з’явиться в контекстному меню Друк пов’язаної моделі.

binding_view_types

розділений комами список типів представлення, для яких дія відображається в контекстному меню, переважно «list» і / або «form». За замовчуванням list,form (і list, і form)

Дії вікна (ir.actions.act_window)

The most common action type, used to present visualisations of a model through views: a window action defines a set of view types (and possibly specific views) for a model (and possibly specific record of the model).

Його поля:

res_model

модель для представлення представлень

views

список пар (view_id, view_type). Другим елементом кожної пари є категорія представлення (дерево, форма, графік, …), а першим є необов’язковий ідентифікатор бази даних (або False). Якщо ідентифікатор не надано, клієнт повинен отримати типове представлення вказаного типу для запитуваної моделі (це автоматично робиться fields_view_get()). Перший тип списку є типом представлення за замовчуванням і буде відкритий за замовчуванням під час виконання дії. Кожен тип представлення має бути присутнім у списку щонайбільше один раз

res_id (необов’язковий)

якщо за замовчуванням представлення form, вказує запис для завантаження (інакше слід створити новий запис)

search_view_id (необов’язковий)

Пара (id, name), id – це ідентифікатор бази даних певного представлення пошуку для завантаження для дії. За замовчуванням для моделі вибирається режим пошуку за умовчанням

target (необов’язковий)

чи дія клієнта повинна бути відкрита в області основного вмісту (current), у повноекранному режимі (fullscreen) або в діалоговому/спливаючому вікні (new). Використовуйте main замість current, щоб очистити навігаційні крихти. За замовчуванням current.

context (необов’язково)

додаткові контекстні дані для передачі до представлень

domain (необов’язково)

домен фільтрації для неявного додавання до всіх пошукових запитів представлення

limit (необов’язково)

кількість записів для відображення в списках за замовчуванням. За замовчуванням у веб-клієнті встановлено значення 80

Наприклад, щоб відкрити клієнти (партнер із встановленим прапорцем customer) зі списком і формами:

{
    "type": "ir.actions.act_window",
    "res_model": "res.partner",
    "views": [[False, "tree"], [False, "form"]],
    "domain": [["customer", "=", true]],
}

Або відкрити представлення форми для певного продукту (отриманого окремо) у новому діалоговому вікні:

{
    "type": "ir.actions.act_window",
    "res_model": "product.product",
    "views": [[False, "form"]],
    "res_id": a_product_id,
    "target": "new",
}

Дії у вікні бази даних мають кілька різних полів, які клієнти повинні ігнорувати, переважно для використання у створенні списку views:

view_mode (за замовчуванням tree,form)

розділений комами список типів представлення у вигляді рядка (/!\ Без пробілів /!\). Усі ці типи будуть присутні у створеному списку представлень (принаймні з view_id False)

view_ids

M2M1 для перегляду об’єктів, визначає початковий вміст views

Примітка

Представлення act_window також можна чітко визначити за допомогою ir.actions.act_window.view.

Якщо ви плануєте дозволити кілька представлень для вашої моделі, віддайте перевагу використанню ir.actions.act_window.view замість дії view_ids

<record model="ir.actions.act_window.view" id="test_action_tree">
   <field name="sequence" eval="1"/>
   <field name="view_mode">tree</field>
   <field name="view_id" ref="view_test_tree"/>
   <field name="act_window_id" ref="test_action"/>
</record>
view_id

конкретне представлення, додане до списку views, якщо його тип є частиною списку view_mode і ще не заповнений одним із представлень у view_ids

Вони переважно використовуються під час визначення дій із Файли даних:

<record model="ir.actions.act_window" id="test_action">
    <field name="name">A Test Action</field>
    <field name="res_model">some.model</field>
    <field name="view_mode">graph</field>
    <field name="view_id" ref="my_specific_view"/>
</record>

використовуватиме представлення «my_specific_view», навіть якщо це не представлення за замовчуванням для моделі.

Композиція на стороні сервера послідовності представлення така:

  • отримати кожен (id, type) з view_ids (впорядкований sequence)

  • якщо view_id визначено і його тип ще не заповнений, додайте його (id, type)

  • для кожного незаповненого типу в view_mode додайте (False, type)

1

технічно не є M2M: додає поле послідовності та може складатися лише з типу представлення без ідентифікатора представлення.

Дії URL (ir.actions.act_url)

Дозволити відкриття URL-адреси (website/web page) за допомогою дії Odoo. Можна налаштувати за допомогою двох полів:

url

адреса, яку потрібно відкрити під час активації дії

target (default= new)

the available values are :

  • new: opens the URL in a new window/page

  • self: opens the URL in the current window/page (replaces the actual content)

  • download: redirects to a download URL

example:

{
    "type": "ir.actions.act_url",
    "url": "https://odoo.com",
    "target": "self",
}

This will replace the current content section by the Odoo home page.

Дії сервера (ir.actions.server)

class odoo.addons.base.models.ir_actions.IrActionsServer(env, ids, prefetch_ids)[source]

Модель дій сервера. Дії сервера працюють за базовою моделлю та пропонують різні типи дій, які можна виконувати автоматично, наприклад, за допомогою правил базових дій, або вручну, додавши дію в контекстне меню „Більше“.

Починаючи з Odoo 8.0, у вікні форми дії доступна кнопка „Створити дію меню“. Він створює запис у меню Більше базової моделі. Це дозволяє легко створювати серверні дії та запускати їх у масовому режимі через інтерфейс.

Доступні дії:

  • „Виконати код Python“: блок коду Python, який буде виконано

  • „Створити новий запис“: створити новий запис із новими значеннями

  • „Записати в запис“: оновити значення запису

  • „Виконати кілька дій“: визначте дію, яка запускає кілька інших дій сервера

Дозволити запуск складного коду сервера з будь-якого дійсного місця дії. Для клієнтів актуальні лише два поля:

id

ідентифікатор у базі даних дії сервера, яку потрібно виконати

context (необов’язково)

контекстні дані для використання під час виконання дії сервера

Записи в базі даних значно багатші та можуть виконувати низку специфічних або загальних дій на основі свого стану. Деякі поля (і відповідна поведінка) є спільними між станами:

model_id

Модель Odoo, пов’язана з дією.

state

  • code: Виконує код python, заданий через аргумент code.

  • object_create: створює новий запис моделі crud_model_id відповідно до специфікацій fields_lines.

  • object_write: оновлює поточний(і) запис(и) відповідно до специфікацій fields_lines

  • multi: Виконує кілька дій, заданих через аргумент child_ids.

Поле стану

Залежно від його стану поведінка визначається різними полями. Відповідний стан вказується після кожного поля.

code (код)

Укажіть частину коду Python для виконання під час виклику дії

<record model="ir.actions.server" id="print_instance">
    <field name="name">Res Partner Server Action</field>
    <field name="model_id" ref="model_res_partner"/>
    <field name="state">code</field>
    <field name="code">
        raise Warning(record.name)
    </field>
</record>

Примітка

Сегмент коду може визначати змінну під назвою action, яка буде повернена клієнту як наступна дія для виконання:

<record model="ir.actions.server" id="print_instance">
    <field name="name">Res Partner Server Action</field>
    <field name="model_id" ref="model_res_partner"/>
    <field name="state">code</field>
    <field name="code">
        if record.some_condition():
            action = {
                "type": "ir.actions.act_window",
                "view_mode": "form",
                "res_model": record._name,
                "res_id": record.id,
            }
    </field>
</record>

попросить клієнта відкрити форму для запису, якщо вона виконує певну умову

crud_model_id (створити) (обов’язково)

модель для створення нового запису

link_field_id (створити)

many2one до ir.model.fields, визначає поле m2o поточного запису, на якому має бути встановлено новостворений запис (моделі мають збігатися)

fields_lines (створення/запис)

поля для заміни під час створення або копіювання запису. One2many з полями:

col1

ir.model.fields для встановлення у відповідній моделі (crud_model_id для створення, model_id для оновлень)

value

значення для поля, інтерпретоване через type

type (value|reference|equation)

Якщо value, поле value інтерпретується як літеральне значення (можливо, перетворене), якщо equation, поле value інтерпретується як вираз Python і обчислюється

child_ids (multi)

Укажіть декілька піддій (ir.actions.server), які потрібно виконати в стані multi. Якщо самі піддії повертають дії, остання буде повернена клієнту як наступна дія мульти

Контекст оцінки

Кілька ключів доступні в контексті оцінки чи оточуючих діях сервера:

  • Об’єкт моделі model, пов’язаний з дією через model_id

  • record/records record/recorset, на яких ініціюється дія, може бути недійсним.

  • Середовище env Odoo

  • відповідні модулі Python datetime, dateutil, time, timezone

  • log: log(message, level='info') функція журналювання для запису інформації про налагодження в таблицю ir.logging

  • Увага конструктор для винятку Увага

Звіт про дії (ir.actions.report)

Запускає друк звіту.

Якщо ви визначаєте свій звіт через <record> замість тегу <report> і бажаєте, щоб дія відображалася в меню Друк подання моделі, вам також потрібно буде вказати binding_model_id з Зв’язування. Немає необхідності встановлювати binding_type на report, оскільки ir.actions.report буде неявно використовувати його за умовчанням.

name (обов’язково)

використовується як назва файлу, якщо print_report_name не вказано. В іншому випадку він корисний лише як мнемоніка/опис звіту, коли його шукають у певному списку

model (обов’язково)

модель, про яку буде ваш звіт

report_type (за замовчуванням=qweb-pdf)

qweb-pdf для звітів PDF або qweb-html для HTML

report_name (обов’язково)

назва (зовнішній id) шаблону qweb, який використовується для відтворення звіту

print_report_name

вираз python, що визначає назву звіту.

groups_id

Many2many для груп, яким дозволено переглядати/використовувати поточний звіт

multi

якщо встановлено значення True, дія не відображатиметься в поданні форми.

paperformat_id

Many2one у паперовому форматі, який ви бажаєте використовувати для цього звіту (якщо не вказано, використовуватиметься формат компанії)

attachment_use

якщо встановлено значення True, звіт генерується лише один раз, коли його запитується вперше, а потім повторно друкується зі збереженого звіту замість того, щоб генеруватися повторно кожного разу.

Можна використовувати для звітів, які потрібно створити лише один раз (наприклад, з юридичних причин)

attachment

вираз python, що визначає назву звіту; запис доступний як змінна object

Дії клієнта (ir.actions.client)

Запускає дію, реалізовану повністю в клієнті.

tag

клієнтський ідентифікатор дії, довільний рядок, на який клієнт повинен знати, як реагувати

params (необов’язковий)

словник Python додаткових даних для надсилання клієнту разом із тегом дії клієнта

target (необов’язковий)

чи дія клієнта повинна бути відкрита в області основного вмісту (current), у повноекранному режимі (fullscreen) або в діалоговому/спливаючому вікні (new). Використовуйте main замість current, щоб очистити навігаційні крихти. За замовчуванням current.

{
    "type": "ir.actions.client",
    "tag": "pos.ui"
}

повідомляє клієнту запустити інтерфейс точки продажу, сервер не має уявлення про те, як працює інтерфейс POS.

Перегляньте також

Автоматичні дії (ir.cron)

Дії запускаються автоматично з попередньо визначеною частотою.

name

Назва автоматизованої дії (в основному використовується для відображення журналу)

interval_number

Кількість interval_type uom між двома виконаннями дії

interval_type

Unit of measure of frequency interval (minutes, hours, days, weeks, months)

numbercall

Скільки разів потрібно виконати цю дію. Якщо очікується, що дія триватиме необмежений час, встановіть значення -1.

doall

Логічне значення, яке визначає, чи потрібно виконувати пропущені дії у разі перезапуску сервера.

model_id

Модель, на якій буде викликана ця дія

code

Код змісту дії. Може бути простим викликом методу моделі:

model.<method_name>()
nextcall

Наступна запланована дата виконання цієї дії (формат дати/часу)