Действия определяют поведение системы в ответ манипуляции пользователя например: авторизация, нажатие кнопки, выбор позиции в списке, и т.д.
Действия могут храниться в базе данных или возвращаться непосредственно в виде словарей, например, в методах кнопок при нажатии на них. Все действия имеют два обязательных атрибута:
type
- категория текущего действия, определяет, какие поля могут использоваться и как интерпретируется действие
name
- короткое, удобочитаемое описание действия для отображения в интерфейсе клиента
binding_model_id
если установлено, действие доступно в экшенбаре для данной модели
Примечание
Для действия сервера используйте
model_id
.
Клиент может получить действие в 4-х видах:
False
- если какое либо диалоговое окно открыто то оно закроется
- Строка
- если действие клиента совпадает, интерпретируется как тег клиентского действия, иначе рассматривать как число
- Число
- считывает соответствующую запись действия из базы данных, может быть id в базе данных или external id
- Словарь
- рассматривается в качестве дескриптора действия клиента, а затем выполняется
Биндинги
Помимо двух обязательных атрибутов, все действия также имеют общие необязательные атрибуты, которые используются для представления действия в контекстном меню произвольной модели:
binding_model_id
- имя модели, с которой это действие связано
binding_type
указывает тип привязки, который в основном зависит от контекстного меню, в котором будет отображаться действие
action
(по умолчанию)- Указывает, что действие появится в контекстном меню связанной модели.
report
- Указывает, что действие будет отображаться в контекстном меню связанной модели.
binding_view_types
- разделенный запятыми список типов представлений, для которых действие появится в контекстном меню, в основном это «List» и/или «Form». По умолчанию
list,form
(и List, и Form)
Действия Окна (Window Actions) (ir.actions.act_window
)
Это наиболее распространенный тип действия, используется для визуализации моделей с помощью представлений: действия окна определяются набор представлений (или конкретного представления) для модели (или конкретного набора записей модели).
Его поля:
res_model
- модель, к которой будет применено представление
views
- Список пар
(view_id, view_type)
. Второй элемент каждой пары - это категория представления (List, Form, Graph, …), а первый - это необязательный id базы данных (илиFalse
). Если id не указан, клиенту запросит возьмет представление указанного типа для запрошенной модели (это выполняется автоматическиfields_view_get()
). Тип представления, указанный в списке первым, будет назначаться по умолчанию и откроется при выполнении действия. Каждый тип представления должен быть указан в списке только один раз res_id
(необязательный параметр)- если представление
form
стоит по умолчанию, то этот параметр определяет запись, которая будет загружена в форму (в противном случае запись будет создана) search_view_id
(необязательный параметр)- пара
(id, name)
,id
- идентификатор базы данных для конкретного представления поиска, который будет загружен для действия. По умолчанию берется представление поиска назначенное по умолчанию для модели target
(необязательный параметр)- Определяет будут ли представления открыты: в области основного контента (
current
), в полноэкранном режиме (fullscreen
) или в диалоговом окне/попапе (new
). Используйтеmain
вместоcurrent
, чтобы сбросить хлебные крошки(breadcrumbs). По умолчанию используетсяcurrent
. context
(необязательный параметр)- дополнительные данные для контекста, передаваемого в представления
domain
(необязательный параметр)- фильтр, который добавляется ко всем поисковым запросам
limit
(необязательный параметр)- количество записей, отображаемых в представлении List по умолчанию. По умолчанию 80
Например, для открытия клиентов (партнеров с установленным флагом customer
) в представлении List и Form:
{
"type": "ir.actions.act_window",
"res_model": "res.partner",
"views": [[False, "tree"], [False, "form"]],
"domain": [["customer", "=", true]],
}
Или, чтобы открыть представление Form конкретного продукта (полученного отдельно) в новом диалоговом окне:
{
"type": "ir.actions.act_window",
"res_model": "product.product",
"views": [[False, "form"]],
"res_id": a_product_id,
"target": "new",
}
Действия окна, хранящиеся в базе данных имеют несколько различных полей, которые игнорируются клиентами, и используются в основном для составления списка представлений views
:
view_mode
(default=tree,form
)- Список типов представлений, разделенных запятыми, в виде строки (БЕЗ ПРОБЕЛОВ). Все эти типы будут присутствовать в созданном списке
views
(с как минимум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» представление, даже в том случае если оно не является представлением по умолчанию для данной модели.
Составление последовательности views
на стороне сервера состоит в следующем:
- берется каждый
(id, type)
изview_ids
(отсортированный поsequence
) - если
view_id
определен а его тип еще на заполнен, добавляется его(id, type)
- для каждого незаполненного тип в
view_mode
, добавляется(False, type)
URL действия (ir.actions.act_url
)
Позволяет открывать URL (вебсайт/веб страница) через действие Odoo. Может быть настроено с помощью двух полей:
url
- адрес, который открывается, когда срабатывает действие
target
- открывает адрес в новом окне/вкладке, если установлен параметр
new
. Заменяет текущую страницу следующей, еслиself
. По умолчаниюnew
{
"type": "ir.actions.act_url",
"url": "https://odoo.com",
"target": "self",
}
заменит текущее содержимое страницы официальным сайтом Odoo.
Действия Сервера (ir.actions.server
)
class odoo.addons.base.models.ir_actions.IrActionsServer(pool, cr)[исходный код]
Модель действий сервера. Действие сервера работает на модели base и предлагает различные типы действий, которые можно выполнить автоматически, например, с использованием правил базовых действий, вручную, добавив действие в контекстное меню «More».
Начиная с версии Odoo 8.0, кнопка «Create Menu Action» доступна в представлении Form модели действий. Создает запись в меню «Дополнительно» модели base. Это позволяет легко создавать действия сервера и запускать их в массовом режиме через интерфейс.
Доступные действия:
- «Execute Python Code»: блок кода Python, который будет выполнен
- «Create a new Record»: создает новую запись с новыми значениями
- «Write on a Record»: обновляет значения записи
- «Execute several actions»: определяет действие, которое запускает другие действия сервера
Позволяет запускать произвольных серверный код из любого допустимого места действия. Только два поля относятся к клиентам:
id
- внутренний идентификатор действия сервера для запуска
context
(необязательный параметр)- Данные контекста для использования при выполнении действия сервера
Записи в базе данных значительно богаче и могут выполнять ряд конкретных или общих действий, основанных на их state
. Некоторые поля (и соответствующее поведение) разделяются между состояниями:
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
(create)(required)- модель в которой будет создана новая запись
link_field_id
(create)- many2one ссылка на
ir.model.fields
, определяет m2o поле текущей записи где будут установлены вновь создаваемые записи (модели должны совпадать) fields_lines
(create/write)поля для переопределения при создании или копировании записи.
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. Если действия сами возвращают действия, последнее будет возвращено клиенту как собственное следующее действие multi
Вычисляемый контекст
Ряд ключевых слов, доступных в вычисляемом контексте или окружающих действий сервера:
model
модель, связанная с действием черезmodel_id
record
/records
запись/набор записей на которых будет исполнено действие, может быть недействительным.env
Odoo окружениеdatetime
,dateutil
,time
,timezone
соответствующие Python мудулиlog: log(message, level='info')
функция логирования для записи отладочной информации в таблицуir.logging
Warning
конструктор дляWarning
исключений
Действия отчетов (ir.actions.report.xml
)
Инициирует печать отчета
name
(обязательный параметр)- полезен только в качестве запоминающегося описания, чтобы можно было найти в списке аналогичных объектов
model
(обязательный параметр)- модель к которой относится отчет
report_type
(default=qweb-pdf)- укажите
qweb-pdf
для создания PDF файлов печатных форм, илиqweb-html
для HTML report_name
(обязательный параметр)- имя отчета (которое будет присвоено выданному PDF файлу)
groups_id
Many2many
поле со ссылкой на группы которым разрешено использовать отчетmulti
- если установлено
True
,действие не будет отображаться в представлении Form. paperformat_id
Many2one
формат бумаги, который вы хотите использовать для этого отчета (если не указан, будет использоваться формат компании)attachment_use
если установлено
True
, то отчет сгенерируется один раз при первом использовании, и при следующих вызовах будет браться из сохраненной копии.Может использоваться для отчетов, которые должны генерироваться только один раз (например, по юридическим причинам)
attachment
- python выражение, которое определяет имя печатной формы; запись доступна как переменная
object
Действия клиента (ir.actions.client
)
Запускает действие, которое реализуется полностью на стороне клиента.
tag
- идентификатор действия на стороне клиента, произвольная строка. О том как действовать получив, ее клиент должен уже знать
params
(необязательный параметр)- словарь Python дополнительных данных для отправки клиенту, наряду с тегом действия клиента
target
(необязательный параметр)- Определяет будут ли действия клиента открыты: в области основного контента (
current
), в полноэкранном режиме (fullscreen
) или в диалоговом окне/попапе (new
). Используйтеmain
вместоcurrent
, чтобы сбросить хлебные крошки(breadcrumbs). По умолчанию используетсяcurrent
.
{
"type": "ir.actions.client",
"tag": "pos.ui"
}
говорит клиенту запустить интерфейс Рабочего Места Кассира, сервер вообще не в курсе, как он работает.
Автоматические дейтсвия (ir.cron
)
Действия запускаются автоматически с заданной частотой.
name
- Название автоматического действия (в основном используется при отображении лога)
interval_number
- Число, определяющее длительность interval_type между двумя исполнениями действия
interval_type
- Единица измерения длительности интервала (
minutes
,hours
,days
,weeks
,months
, numbercall
- Количество раз, когда это действие должно быть выполнено. Если хотите чтобы действие выполнялось бесконечно, установите значение
-1
. doall
- Булево значение, уточняющее, нужно ли выполнять пропущенные действия в случае перезапуска сервера.
model_id
- Модель, в которой будет называться это действие
code
Код содержащийся в действии. Может быть простой вызов метода модели:
model.<method_name>()
nextcall
- Следующая запланированная дата выполнения этого действия (формат date/time)