Действия определяют поведение системы в ответ на действия пользователя например: авторизация, нажатие кнопки, выбор позиции в списке, и т.д.
Действия могут храниться в базе данных или возвращаться непосредственно в виде словарей, например, в методах при нажатии кнопок. Все действия имеют два обязательных атрибута:
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Список пар
(view_id, view_type). Второй элемент каждой пары - это категория представления (дерево, форма, граф, ...), а первый - это необязательный идентификатор базы данных (или `` Ложный``). Если идентификатор не указан, клиенту необходимо получить стандартное представление указанного типа для запрошенной модели (это автоматически выполняется: meth:~ odoo.models.Model.fields_view_get). Первый тип списка является типом представления по умолчанию и будет открыт по умолчанию при выполнении действия. Каждый тип представления должен присутствовать не более одного раза в списке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_idsM2M1 объектов представления, определяет начальное содержание
представлений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_idOdoo модель данных связанная с действием, делает доступным вычисляемый контекст
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: ~ odoo.models.Model.create) или путем копирования существующей записи (через: meth:` ~ odoo.models.Model.copy`)
use_createПолитика создания, одна из:
newсоздает запись в модели данных определенной
model_idnew_otherсоздает запись в модели данных определенной
crud_model_idcopy_currentкопирует запись, из которой было вызвано действие
copy_otherкопирует другую запись, используя
ref_object
fields_linesПоля для переопределения при создании или копировании записи. : Class:
~ odoo.fields.One2manyс полями:col1ir.model.fieldsустановить в модели данных подразумеваемойuse_createvalueзначение для поля интерпретируемое через
typetypeЕсли
value, тоvalueполя интерпретируется как буквенное значение (возможно преобразованное), еслиequation, тоvalueполя интерпретируется как Python выражение и проходит соответствующую оценку
crud_model_idмодель данных в которой будет создана новая запись, если
use_createустановлено какnew_otherref_object: Class:
~ odoo.fields.Referenceна произвольную запись для копирования, используемую, если` use_create`` установлена в `` copy_other``link_new_recordлогический флаг связывающий новую запись с текущей через many2one поле определенное через
link_field_id, по умолчаниюFalselink_field_idmany2one в
ir.model.fields, определяет m2o поле текущей записи к которому будут установлены вновь создаваемые записи (модели данных должны совпадать)
object_write
То же что и object_create, но изменяет уже существующие записи, вместо создания новых
use_writeполитика записи, одна из:
currentЗаписать в текущую запись
otherЗаписать в другую запись, выбранную с помощью
crud_model_idиref_objectexpressionЗапись в другую запись, модель которой выбирается с помощью
crud_model_idи чей идентификатор выбирается путем оценкиwrite_expression
write_expressionPython выражение возвращающее идентификатор записи или объекта, используется, когда
use_writeустановлено, какexpressionзначение для того, чтобы решить какие записи должны быть измененыfields_linesсмотрите object_create
crud_model_idсмотрите object_create
ref_objectсмотрите object_create
multi
Выполняется несколько действий одно за одним. Действия для выполнения определяются через child_ids m2m. Если суб-действия сами возвращают действия, то последнее будет возвращено клиенту как следующие действие всей последовательности
client_action
Направление для прямого возврата другого действия, определенного с помощью action_id. Просто возвращает это действие клиенту для выполнения.
Вычисляемый контекст
Ряд ключевых слов, доступных в вычисляемом контексте или окружающих действий сервера:
modelОбъект модели данных, связанный с действием через
model_idobject,objДоступно только если
active_modelиactive_idпредоставляются (через контекст) иначеNone. Актуальная запись выбирается черезactive_idpoolтекущий реестр базы данных
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: Класс: поле
~ odoo.fields.Many2manyдля групп, разрешенных для просмотра / использования текущего отчетаpaperformat_id: Класс: поле `` odoo.fields.Many2one` в формат бумаги, который вы хотите использовать для этого отчета (если не указан, будет использоваться формат компании)
attachment_useесли установлено
True, то печатная форма только однажды сгенерируется при первом использовании, и при следующих вызовах будет браться из сохраненной копии.Может использоваться для отчетов, которые должны генерироваться только один раз (например, по юридическим причинам)
attachmentpython выражение, которое определяет имя печатной формы; запись доступна как переменная
object
Действия клиента (ir.actions.client)
Запускает действие, которое реализуется полностью на стороне клиента.
tagидентификатор действия на стороне клиента, произвольная строка, о том как действовать получив ее клиент должен уже знать
params(опционально)словарь Python дополнительных данных для отправки клиенту, наряду с тегом действий клиента
target(опционально)Должно ли действие клиента быть открытым в области основного содержимого (`` current``) в полноэкранном режиме (`` fullscreen``) или в диалоговом окне / popup (`` new``). Используйте `` main`` вместо `` current``, чтобы очистить панировочные сухари. По умолчанию используется `` current``.
{
"type": "ir.actions.client",
"tag": "pos.ui"
}
говорит клиенту запустить интерфейс POS, сервер вообще не в курсе, как он работает.
технически не M2M: добавляет поле последовательности и может состоять только из типа представления без идентификатора представления.