Действия определяют поведение системы в ответ манипуляции пользователя например: авторизация, нажатие кнопки, выбор позиции в списке, и т.д.
Действия могут храниться в базе данных или возвращаться непосредственно в виде словарей, например, в методах кнопок при нажатии на них. Все действия имеют два обязательных атрибута:
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_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» представление, даже в том случае если оно не является представлением по умолчанию для данной модели.
Составление последовательности 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с полями:col1ir.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_idrecord/recordsзапись/набор записей на которых будет исполнено действие, может быть недействительным.envOdoo окружениеdatetime,dateutil,time,timezoneсоответствующие Python мудулиlog: log(message, level='info')функция логирования для записи отладочной информации в таблицуir.loggingWarningконструктор дляWarningисключений
Действия отчетов (ir.actions.report.xml)
Инициирует печать отчета
name(обязательный параметр)- полезен только в качестве запоминающегося описания, чтобы можно было найти в списке аналогичных объектов
model(обязательный параметр)- модель к которой относится отчет
report_type(default=qweb-pdf)- укажите
qweb-pdfдля создания PDF файлов печатных форм, илиqweb-htmlдля HTML report_name(обязательный параметр)- имя отчета (которое будет присвоено выданному PDF файлу)
groups_idMany2manyполе со ссылкой на группы которым разрешено использовать отчетmulti- если установлено
True,действие не будет отображаться в представлении Form. paperformat_idMany2oneформат бумаги, который вы хотите использовать для этого отчета (если не указан, будет использоваться формат компании)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)