Дії¶
Дії визначають поведінку системи у відповідь на дії користувача: вхід, кнопка дії, вибір рахунку, …
Дії можна зберігати в базі даних або повертати безпосередньо як словники, напр. кнопкові методи. Усі дії мають два обов’язкові атрибути:
typeкатегорія поточної дії визначає, які поля можна використовувати та як інтерпретується дія
nameкороткий опис дії, зрозумілий для користувача, може відображатися в інтерфейсі клієнта
Клієнт може отримати дії в 4 формах:
Falseякщо наразі відкрито будь-яке діалогове вікно дії, закрийте його
- Рядок
якщо клієнтська дія збігається, інтерпретувати як тег клієнтської дії, інакше розглядати як число
- Номер
читати відповідний запис дії з бази даних, може бути ідентифікатором бази даних або external id
- Словник
розглядати як дескриптор дії клієнта та виконати
Зв’язування¶
Окрім двох обов’язкових атрибутів, усі дії також мають додаткові атрибути, які використовуються для представлення дії в контекстному меню довільної моделі:
binding_model_idвказує, до якої моделі прив’язана дія
Примітка
Для дій сервера використовуйте
model_id.binding_typeвказує тип прив’язки, який, здебільшого, полягає в тому, під яким контекстним меню дія відображатиметься
action(за замовчуванням)Вказує, що дія з’явиться в контекстному меню пов’язаної моделі.
reportВказує, що дія з’явиться в контекстному меню пов’язаної моделі.
binding_view_typesрозділений комами список типів представлення, для яких дія відображається в контекстному меню, переважно «list» і / або «form». За замовчуванням
list,form(і list, і form)
Дії вікна (ir.actions.act_window)¶
Найпоширеніший тип дії, що використовується для візуалізацій моделі через представлення: дія вікна визначає набір типів представлень (і, можливо, певних представлень) для моделі (і, можливо, певного запису моделі).
Його поля:
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_idsM2M1 для перегляду об’єктів, визначає початковий вміст
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)доступні значення:
new: відкриває URL-адресу в новому вікні/сторінціself: відкриває URL-адресу в поточному вікні/сторінці (замінює фактичний вміст)download: перенаправляє на URL-адресу завантаження
приклад:
{
"type": "ir.actions.act_url",
"url": "https://odoo.com",
"target": "self",
}
Це замінить поточний розділ контенту головною сторінкою Odoo.
Дії сервера (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_linesmulti: Виконує кілька дій, заданих через аргумент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з полями:col1ir.model.fieldsдля встановлення у відповідній моделі (crud_model_idдля створення,model_idдля оновлень)valueзначення для поля, інтерпретоване через
typetype(value|reference|equation)Якщо
value, полеvalueінтерпретується як літеральне значення (можливо, перетворене), якщоequation, полеvalueінтерпретується як вираз Python і обчислюється
child_ids(multi)Укажіть декілька піддій (
ir.actions.server), які потрібно виконати в стані multi. Якщо самі піддії повертають дії, остання буде повернена клієнту як наступна дія мульти
Контекст оцінки¶
Кілька ключів доступні в контексті оцінки чи оточуючих діях сервера:
об’єкт моделі
model, пов’язаний з дією черезmodel_idrecord/recordsrecord/recorset, на яких ініціюється дія, може бути недійсним.середовище
envOdooвідповідні модулі Python
datetime,dateutil,time,timezonelog: 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(обов’язково)назва (external id) шаблону qweb, який використовується для відтворення звіту
print_report_nameвираз python, що визначає назву звіту.
groups_idMany2manyдля груп, яким дозволено переглядати/використовувати поточний звітmultiякщо встановлено значення
True, дія не відображатиметься в поданні форми.paperformat_idMany2oneу паперовому форматі, який ви бажаєте використовувати для цього звіту (якщо не вказано, використовуватиметься формат компанії)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Одиниця вимірювання частотного інтервалу (
minutes,hours,days,weeks,months)numbercallСкільки разів потрібно виконати цю дію. Якщо очікується, що дія триватиме необмежений час, встановіть значення
-1.doallЛогічне значення, яке визначає, чи потрібно виконувати пропущені дії у разі перезапуску сервера.
model_idМодель, на якій буде викликана ця дія
codeКод змісту дії. Може бути простим викликом методу моделі:
model.<method_name>()
nextcallНаступна запланована дата виконання цієї дії (формат дати/часу)