Действия определяют поведение системы в ответ манипуляции пользователя например: авторизация, нажатие кнопки, выбор позиции в списке, и т.д.
Действия могут храниться в базе данных или возвращаться непосредственно в виде словарей, например, в методах кнопок при нажатии на них. Все действия имеют два обязательных атрибута:
type
категория текущего действия, определяет, какие поля могут использоваться и как интерпретируется действие
name
короткое, удобочитаемое описание действия для отображения в интерфейсе клиента
Клиент может получить действие в 4-х видах:
False
если какое либо диалоговое окно открыто то оно закроется
- Строка
если действие клиента совпадает, интерпретируется как тег клиентского действия, иначе рассматривать как число
- Число
считывает соответствующую запись действия из базы данных, может быть id в базе данных или external id
- Словарь
рассматривается в качестве дескриптора действия клиента, а затем выполняется
Действия Окна (Window Actions) (ir.actions.act_window
)
Это наиболее распространенный тип действия, используется для визуализации моделей с помощью представлений: действия окна определяются набор представлений (или конкретного представления) для модели (или конкретного набора записей модели).
Его поля:
res_model
модель, к которой будет применено представление
views
- a list of
(view_id, view_type)
pairs. The second element of each pair is the category of the view (tree, form, graph, ...) and the first is an optional database id (orFalse
). If no id is provided, the client should fetch the default view of the specified type for the requested model (this is automatically done byfields_view_get()
). The first type of the list is the default view type and will be open by default when the action is executed. Each view type should be present at most once in the list res_id
(необязательный параметр)если представление
form
стоит по умолчанию, то этот параметр определяет запись, которая будет загружена в форму (в противном случае запись будет создана)search_view_id
(необязательный параметр)пара
(id, name)
,id
- идентификатор базы данных для конкретного представления поиска, который будет загружен для действия. По умолчанию берется представление поиска назначенное по умолчанию для моделиtarget
(необязательный параметр)- whether the views should be open in the main content area (
current
) or in a dialog/popup (new
). Defaults tocurrent
. 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 (tree, form, ...) 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">
print self, object
</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>
will ask the client to open a form for the record if it fullfils some condition
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
fields to override when creating or copying the record.
One2many
with the fields: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
trigger
Sends a signal to a workflow.
wkf_transition_id
Many2one
to aworkflow.transition
to triggeruse_relational_model
- if
base
(the default), trigger the signal on behalf of the current record. Ifrelational
, trigger the signal on behalf of a field of the current record selected throughwkf_model_id
andwkf_field_id
client_action
Indirection for directly returning an other action defined using
action_id
. Simply returns that action to the client for execution.
Вычисляемый контекст
Ряд ключевых слов, доступных в вычисляемом контексте или окружающих действий сервера:
self
- 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
Report Actions (ir.actions.report.xml
)
Инициирует печать отчета
name
(обязательный параметр)полезен только в качестве запоминающегося описания, чтобы можно было найти в списке аналогичных объектов
model
(обязательный параметр)модель к которой относится отчет
report_type
(обязательный параметр)укажите
qweb-pdf
для создания PDF файлов печатных форм, илиqweb-html
для HTMLreport_name
имя отчета (которое будет присвоено выданному PDF файлу)
groups_id
Many2many
field to the groups allowed to view/use the current reportpaperformat_id
Many2one
field to the paper format you wish to use for this report (if not specified, the company format will be used)attachment_use
если установлено
True
, то отчет сгенерируется один раз при первом использовании, и при следующих вызовах будет браться из сохраненной копии.Может использоваться для отчетов, которые должны генерироваться только один раз (например, по юридическим причинам)
attachment
python выражение, которое определяет имя печатной формы; запись доступна как переменная
object
Действия клиента (ir.actions.client
)
Запускает действие, которое реализуется полностью на стороне клиента.
tag
идентификатор действия на стороне клиента, произвольная строка. О том как действовать получив, ее клиент должен уже знать
params
(необязательный параметр)словарь Python дополнительных данных для отправки клиенту, наряду с тегом действия клиента
{
"type": "ir.actions.client",
"tag": "pos.ui"
}
говорит клиенту запустить интерфейс Рабочего Места Кассира, сервер вообще не в курсе, как он работает.
технически не M2M: добавляет поле последовательности и может состоять только из типа представления без id представления.