Действия определяют поведение системы в ответ на действия пользователя например: авторизация, нажатие кнопки, выбор позиции в списке, и т.д.
Действия могут храниться в базе данных или возвращаться непосредственно в виде словарей, например, в методах при нажатии кнопок. Все действия имеют два обязательных атрибута:
type
Категория текущего действия, определяет, какие поля могут использоваться и как интерпретируется действие
name
Короткое, удобочитаемое описание действия для отображения в интерфейсе клиента
Клиент может получить команду на действие в 4-х видах:
False
Если какое либо диалоговое окно открыто и пользователь закрыл его
- A string
если действие клиента совпадает, действие клиент интерпритируется как тег действия клиента, в противном случае будет восприниматься как число
- A number
- read the corresponding action record from the database, may be a database identifier or an external id
- A dictionary
рассматривается в качестве дескриптора действия клиента, а затем выполняется
Действия Окна (Window Actions) (ir.actions.act_window
)
Наиболее распространенный тип действия, используется для визуализации моделей данных с помощью представлений: действия окна определяются набор представлений (или конкретного представления) для модели данных (или конкретного набора записей модели данных).
Используемые поля:
res_model
модель данных, к которой будет применено представление
views
Список пар [UNKNOWN NODE title_reference]. Второй элемент каждой пары - это категория представления (дерево, форма, граф, ...), а первый - это необязательный идентификатор базы данных (или `` Ложный``). Если идентификатор не указан, клиенту необходимо получить стандартное представление указанного типа для запрошенной модели (это автоматически выполняется: meth: [UNKNOWN NODE title_reference]). Первый тип списка является типом представления по умолчанию и будет открыт по умолчанию при выполнении действия. Каждый тип представления должен присутствовать не более одного раза в списке
res_id
(опционално)если базовое представление
form
, определяет запись, которая будет загружена в форму (в противном случае запись будет создана)search_view_id
(опционально)пара
(id, name)
,id
- идентификатор базы данных для конкретного представления поиска, который будет загружен для действия. По умолчанию выбирает дефолтное представление поиска для модели данныхtarget
(опционально)Должны ли представления быть открытыми в области основного содержимого (`` current``) в полноэкранном режиме (`` fullscreen``) или в диалоговом окне / popup (`` new``). Используйте `` main`` вместо `` current``, чтобы очистить панировочные сухари. По умолчанию используется `` current``.
context
(опционально)дополнительные данные для контекста, передаваемого в представление
domain
(опционально)фильтр, который добавляется ко всем поисковым запросам
limit
(опционально)Количество записей, отображаемых в списках по умолчанию. По умолчанию 80 в веб-клиенте
auto_search
(опционально)будет ли выполняться поиск сразе после загрузки представления по умолчанию. По умолчанию
True
.
Например, для открытия клиентов (партнеров с установленным флагом 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
Список типов видов, разделенных запятыми, в виде строки. Все эти типы будут присутствовать в созданном списке
views
(с как минимум `` ложным`` view_id)view_ids
M2M1 объектов представления, определяет начальное содержание
представлений
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)
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
(опционально)Контекстные данные для использования при выполнении действия сервера
Записи в базе данных значительно богаче и могут выполнять ряд конкретных или общих действий, основанных на их «состоянии». Некоторые поля (и соответствующие модели поведения) разделяются между состояниями:
model_id
Odoo модель данных связанная с действием, делает доступным вычисляемый контекст
condition
(опционально)оценивается как код Python, используя вычисляемый контекст действия сервера. Если
False
, предотвращает запуск действия. По умолчанию:True
Допустимые типы действий (поле state
(состояние)) являются расширяемыми, типы по умолчанию:
code
Стандартное и наиболее гибкое серверное действие, исполняет произвольный Python код с вычисляемым контекстом. Использует только один определенный тип поля:
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="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>
Попросит клиента открыть форму для записи, если она удовлетворяет некоторому условию
Это, как правило, единственный тип записи создаваемый из файлов данных, остальные типы не связаны с multi и их проще определить из UI в отличии от Python кода , но не из файлов данных.
object_create
Создает новую запись с нуля (посредством: meth: [UNKNOWN NODE title_reference]) или путем копирования существующей записи (через: meth:` ~ odoo.models.Model.copy`)
use_create
Политика создания, одна из:
new
создает запись в модели данных определенной
model_id
new_other
создает запись в модели данных определенной
crud_model_id
copy_current
копирует запись, из которой было вызвано действие
copy_other
копирует другую запись, используя
ref_object
fields_lines
Поля для переопределения при создании или копировании записи. : Class: [UNKNOWN NODE title_reference] с полями:
col1
ir.model.fields
установить в модели данных подразумеваемойuse_create
value
значение для поля интерпретируемое через
type
type
Если
value
, тоvalue
поля интерпретируется как буквенное значение (возможно преобразованное), еслиequation
, тоvalue
поля интерпретируется как Python выражение и проходит соответствующую оценку
crud_model_id
модель данных в которой будет создана новая запись, если
use_create
установлено какnew_other
ref_object
: Class: [UNKNOWN NODE title_reference] на произвольную запись для копирования, используемую, если` use_create`` установлена в `` copy_other``
link_new_record
логический флаг связывающий новую запись с текущей через many2one поле определенное через
link_field_id
, по умолчаниюFalse
link_field_id
many2one в
ir.model.fields
, определяет m2o поле текущей записи к которому будут установлены вновь создаваемые записи (модели данных должны совпадать)
object_write
То же что и object_create, но изменяет уже существующие записи, вместо создания новых
use_write
политика записи, одна из:
current
Записать в текущую запись
other
Записать в другую запись, выбранную с помощью
crud_model_id
иref_object
expression
Запись в другую запись, модель которой выбирается с помощью
crud_model_id
и чей идентификатор выбирается путем оценкиwrite_expression
write_expression
Python выражение возвращающее идентификатор записи или объекта, используется, когда
use_write
установлено, какexpression
значение для того, чтобы решить какие записи должны быть измененыfields_lines
смотрите object_create
crud_model_id
смотрите object_create
ref_object
смотрите object_create
multi
Выполняется несколько действий одно за одним. Действия для выполнения определяются через child_ids
m2m. Если суб-действия сами возвращают действия, то последнее будет возвращено клиенту как следующие действие всей последовательности
trigger
Подает сигнал бизнес-процессу.
wkf_transition_id
: Class: [UNKNOWN NODE title_reference] в` [UNKNOWN NODE title_reference] для запуска
use_relational_model
если
base
(по умолчанию), это триггер для вызова сигнала от имени текущей записи. Еслиrelational
, то это триггер для вызова сигнала от имени поля выбранного черезwkf_model_id
иwkf_field_id
client_action
Направление для прямого возврата другого действия, определенного с помощью action_id
. Просто возвращает это действие клиенту для выполнения.
Вычисляемый контекст
Ряд ключевых слов, доступных в вычисляемом контексте или окружающих действий сервера:
model
Объект модели данных, связанный с действием через
model_id
object
,obj
Доступно только если
active_model
иactive_id
предоставляются (через контекст) иначеNone
. Актуальная запись выбирается черезactive_id
pool
текущий реестр базы данных
datetime
,dateutil
,time
соответствующие модули Python
cr
текущий курсор базы данных
user
запись текущего пользователя
context
контекст выполнения
Warning
конструктор для
Warning
исключений
Действия печатных форм (ir.actions.report.xml
)
Подача команды для печати соответствующих форм.
name
(обязательно)Полезен только в качестве мнемоники/описания печатной формы, при поиске в списке форм
model
(обязательно)модель данных к которой относится ваша печатная форма
report_type
(обязательно)или
qweb-pdf
для создания PDF файлов печатных форм, илиqweb-html
для HTMLreport_name
имя печатной формы (которое будет присвоено выданному PDF файлу)
groups_id
: Класс: поле [UNKNOWN NODE title_reference] для групп, разрешенных для просмотра / использования текущего отчета
paperformat_id
: Класс: поле `` odoo.fields.Many2one` в формат бумаги, который вы хотите использовать для этого отчета (если не указан, будет использоваться формат компании)
attachment_use
если установлено
True
, то печатная форма только однажды сгенерируется при первом использовании, и при следующих вызовах будет браться из сохраненной копии.Может использоваться для отчетов, которые должны генерироваться только один раз (например, по юридическим причинам)
attachment
python выражение, которое определяет имя печатной формы; запись доступна как переменная
object
Действия клиента (ir.actions.client
)
Запускает действие, которое реализуется полностью на стороне клиента.
tag
идентификатор действия на стороне клиента, произвольная строка, о том как действовать получив ее клиент должен уже знать
params
(опционально)словарь Python дополнительных данных для отправки клиенту, наряду с тегом действий клиента
target
(опционально)Должно ли действие клиента быть открытым в области основного содержимого (`` current``) в полноэкранном режиме (`` fullscreen``) или в диалоговом окне / popup (`` new``). Используйте `` main`` вместо `` current``, чтобы очистить панировочные сухари. По умолчанию используется `` current``.
{
"type": "ir.actions.client",
"tag": "pos.ui"
}
говорит клиенту запустить интерфейс POS, сервер вообще не в курсе, как он работает.
технически не M2M: добавляет поле последовательности и может состоять только из типа представления без идентификатора представления.