Toggle navigation

Действия - Odoo 9.0

Действия определяют поведение системы в ответ на действия пользователя например: авторизация, нажатие кнопки, выбор позиции в списке, и т.д.

Действия могут храниться в базе данных или возвращаться непосредственно в виде словарей, например, в методах при нажатии кнопок. Все действия имеют два обязательных атрибута:

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). Второй элемент каждой пары является категорией представления (tree, form, graph, ...) , а первый элемент опционально определяет идентификатор базы данных (или False). Если не указан идентификатор, клиент самостоятельно выберет представление по умолчанию для запрашиваемой модели данных (это будет автоматически определено функцией fields_view_get()). Первый тип в списке будет назначен представлением по умолчанию и будет открываться по умолчанию каждый раз, когда выполняется действие. Каждый тип представлений должен быть указан в данном списке не более одного раза.

res_id (опционално)

если базовое представление form, определяет запись, которая будет загружена в форму (в противном случае запись будет создана)

search_view_id (опционально)

пара (id, name), id - идентификатор базы данных для конкретного представления поиска, который будет загружен для действия. По умолчанию выбирает дефолтное представление поиска для модели данных

target (опционально)

должны ли представления быть открытыми в области основной рабочей зоны (current) или в диалоговом окне / popup (new). По умолчанию используется 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>

Это, как правило, единственный тип записи создаваемый из файлов данных, остальные типы не связаны с multi и их проще определить из UI в отличии от Python кода , но не из файлов данных.

object_create

Создает новую запись с нуля (с помощью create()) или копируя уже существующую (с помощью copy())

use_create

Политика создания, одна из:

new

создает запись в модели данных определенной model_id

new_other

создает запись в модели данных определенной crud_model_id

copy_current

копирует запись, из которой было вызвано действие

copy_other

копирует другую запись, используя ref_object

fields_lines

Поля для переопределения при создании или копировании записи. One2many с полями:

col1

ir.model.fields установить в модели данных подразумеваемой use_create

value

значение для поля интерпретируемое через type

type

Если value, то value поля интерпретируется как буквенное значение (возможно преобразованное), если equation, то value поля интерпретируется как Python выражение и проходит соответствующую оценку

crud_model_id

модель данных в которой будет создана новая запись, если use_create установлено как new_other

ref_object

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

Many2one для workflow.transition как триггер

use_relational_model

если base (по умолчанию), это триггер для вызова сигнала от имени текущей записи. Если relational, то это триггер для вызова сигнала от имени поля выбранного через wkf_model_id и wkf_field_id

client_action

Направление для прямого возврата другого действия, определенного с помощью action_id. Просто возвращает это действие клиенту для выполнения.

Вычисляемый контекст

Ряд ключевых слов, доступных в вычисляемом контексте или окружающих действий сервера:

self

Объект модели данных, связанный с действием через 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 для HTML

report_name

имя печатной формы (которое будет присвоено выданному PDF файлу)

groups_id

Many2many поле, в котором находятся ссылки на группы, которым разрешено просматривать/использовать текущую печатную форму.

paperformat_id

Many2one поле, в котором находятся ссылки на форматы бумаги, которые вы хотите применить в данной печатной форме (если не указан явно, то формат компании будет использован по умолчанию)

attachment_use

если установлено True, то печатная форма только однажды сгенерируется при первом использовании, и при следующих вызовах будет браться из сохраненной копии.

Может использоваться для отчетов, которые должны генерироваться только один раз (например, по юридическим причинам)

attachment

python выражение, которое определяет имя печатной формы; запись доступна как переменная object

Действия клиента (ir.actions.client)

Запускает действие, которое реализуется полностью на стороне клиента.

tag

идентификатор действия на стороне клиента, произвольная строка, о том как действовать получив ее клиент должен уже знать

params (опционально)

словарь Python дополнительных данных для отправки клиенту, наряду с тегом действий клиента

{
    "type": "ir.actions.client",
    "tag": "pos.ui"
}

говорит клиенту запустить интерфейс POS, сервер вообще не в курсе, как он работает.

[1]

технически не M2M: добавляет поле последовательности и может состоять только из типа представления без идентификатора представления.