Действия определяют поведение системы в ответ манипуляции пользователя например: авторизация, нажатие кнопки, выбор позиции в списке, и т.д.
Действия могут храниться в базе данных или возвращаться непосредственно в виде словарей, например, в методах кнопок при нажатии на них. Все действия имеют два обязательных атрибута:
type
- категория текущего действия, определяет, какие поля могут использоваться и как интерпретируется действие
name
- короткое, удобочитаемое описание действия для отображения в интерфейсе клиента
Клиент может получить действие в 4-х видах:
False
- если какое либо диалоговое окно открыто то оно закроется
- Строка
- если действие клиента совпадает, интерпретируется как тег клиентского действия, иначе рассматривать как число
- Число
- считывает соответствующую запись действия из базы данных, может быть id в базе данных или external id
- Словарь
- рассматривается в качестве дескриптора действия клиента, а затем выполняется
Действия Окна (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
auto_search
(optional)- whether a search should be performed immediately after loading the default
view. Defaults to
True
Например, для открытия клиентов (партнеров с установленным флагом 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
- comma-separated list of view types as a string. All of these types will be
present in the generated
views
list (with at least aFalse
view_id) view_ids
- M2M1 ссылка на объекты представлений, определяет начальное содержание
views
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": "http://odoo.com",
"target": "self",
}
заменит текущее содержимое страницы официальным сайтом Odoo.
Действия Сервера (ir.actions.server
)
Позволяет запускать произвольных серверный код из любого допустимого места действия. Только два поля относятся к клиентам:
id
- внутренний идентификатор действия сервера для запуска.
context
(необязательный параметр)- Данные контекста для использования при выполнении действия сервера
Записи в базе данных значительно богаче и могут выполнять ряд конкретных или общих действий, основанных на их state
. Некоторые поля (и соответствующее поведение) разделяются между состояниями:
model_id
- Odoo model linked to the action, made available in evaluation contexts
condition
(optional)- evaluated as Python code using the server action’s
evaluation context. If
False
, prevents the action from running. Default:True
Valid action types (state
field) are extensible, the default types are:
code
The default and most flexible server action type, executes arbitrary Python code with the action’s evaluation context. Only uses one specific type-specific field:
code
- a piece of Python code to execute when the action is called
<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="code">
raise Warning(object.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="code">
if object.some_condition():
action = {
"type": "ir.actions.act_window",
"view_mode": "form",
"res_model": object._name,
"res_id": object.id,
}
</field>
</record>
попросит клиента открыть форму записи, если она удовлетворяет некоторому условию
This tends to be the only action type created from data files, other types aside from multi are simpler than Python code to define from the UI, but not from data files.
object_create
Creates a new record, from scratch (via create()
)
or by copying an existing record (via copy()
)
use_create
the creation policy, one of:
new
- creates a record in the model specified by
model_id
new_other
- creates a record in the model specified by
crud_model_id
copy_current
- copies the record on which the action was invoked
copy_other
- copies an other record, obtained via
ref_object
fields_lines
поля для переопределения при создании или копировании записи.
One2many
с полями:col1
ir.model.fields
to set in the model implied byuse_create
value
- значение для поля интерпретируемое через
type
type
- Если
value
установлено, тоvalue
поля интерпретируется как буквенное значение (возможно преобразованное), еслиequation
, тоvalue
поля интерпретируется как Python выражение и выполняется
crud_model_id
- model in which to create a new record, if
use_create
is set tonew_other
ref_object
Reference
to an arbitrary record to copy, used ifuse_create
is set tocopy_other
link_new_record
- boolean flag linking the newly created record to the current one via a
many2one field specified through
link_field_id
, defaults toFalse
link_field_id
- many2one ссылка на
ir.model.fields
, определяет m2o поле текущей записи где будут установлены вновь создаваемые записи (модели должны совпадать)
object_write
Similar to object_create but alters an existing records instead of creating one
use_write
write policy, one of:
current
- write to the current record
other
- write to an other record selected via
crud_model_id
andref_object
expression
- write to an other record whose model is selected via
crud_model_id
and whose id is selected by evaluatingwrite_expression
write_expression
- Python expression returning a record or an object id, used when
use_write
is set toexpression
in order to decide which record should be modified fields_lines
- see object_create
crud_model_id
- see object_create
ref_object
- see object_create
multi
Executes multiple actions one after the other. Actions to execute are defined
via the child_ids
m2m. If sub-actions themselves return actions, the last
one will be returned to the client as the multi’s own next action
client_action
Indirection for directly returning an other action defined using
action_id
. Simply returns that action to the client for execution.
Вычисляемый контекст
Ряд ключевых слов, доступных в вычисляемом контексте или окружающих действий сервера:
model
- the model object linked to the action via
model_id
object
,obj
- only available if
active_model
andactive_id
are provided (via context) otherwiseNone
. The actual record selected byactive_id
pool
- the current database registry
datetime
,dateutil
,time
- corresponding Python modules
cr
- the current cursor
user
- the current user record
context
- execution context
Warning
- constructor for the
Warning
exception
Действия отчетов (ir.actions.report.xml
)
Инициирует печать отчета
name
(обязательный параметр)- полезен только в качестве запоминающегося описания, чтобы можно было найти в списке аналогичных объектов
model
(обязательный параметр)- модель к которой относится отчет
report_type
(обязательный параметр)- укажите
qweb-pdf
для создания PDF файлов печатных форм, илиqweb-html
для HTML report_name
- имя отчета (которое будет присвоено выданному PDF файлу)
groups_id
Many2many
поле со ссылкой на группы которым разрешено использовать отчет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"
}
говорит клиенту запустить интерфейс Рабочего Места Кассира, сервер вообще не в курсе, как он работает.