Дії¶
Дії визначають поведінку системи у відповідь на дії користувача: вхід, кнопка дії, вибір рахунку, …
Дії можна зберігати в базі даних або повертати безпосередньо як словники, напр. кнопкові методи. Усі дії мають два обов’язкові атрибути:
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_idFalse
)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/pageself
: 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
для HTMLreport_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
Наступна запланована дата виконання цієї дії (формат дати/часу)