openerp: действие для вызова метода для всех идентификаторов, выбранных в древовидном представлении

Я хочу создать действие, которое будет вызывать метод модели, передавая идентификаторы выбранных строк в древовидном представлении, чтобы действие было доступно в правой части экрана при выборе элементов. Возможно ли это сделать без создания мастера с одной кнопкой «ОК»?

Как правило, я хотел бы иметь возможность вызывать метод button_upgrade ir.module.module для одновременного обновления нескольких модулей, но это было бы полезно во многих случаях в приложении.

Я использую OpenERP 6.1 и веб-клиент.


person gurney alex    schedule 26.07.2012    source источник


Ответы (4)


Я сделал это в версии 5.0 со старым -style wizard, но я еще не видел способа сделать это в веб-клиенте 6.1. Вы все еще можете использовать мастер старого стиля в клиенте GTK версии 6.1, но он не работает в веб-клиенте.

Я думаю, вы могли бы передавать сообщения с предсказаниями в диалоговое окно «ОК», чтобы развлечь своих пользователей.

person Don Kirkby    schedule 26.07.2012

У меня нет v6, но это работает в v7:

<record id="action_id_name" model="ir.actions.server">
    <field name="name">Name that shows in More button</field>
    <field name="type">ir.actions.server</field>
    <field name="model_id" ref="model_blah_blah"/>
    <field name="state">code</field>
    <field name="code">self.some_custom_code(cr, uid, context.get('active_ids'), ..., context=context)</field>
</record>

<record id="value_id_name" model="ir.values">
    <field name="name">Name</field>
    <field name="action_id" ref="action_id_name"/>
    <field name="value" eval="'ir.actions.server,' + str(ref('action_id_name'))"/>
    <field name="key">action</field>
    <field name="model_id" ref="model_blah_blah"/>
    <field name="model">blah.blah</field>
    <field name="key2">client_action_multi</field>
</record>

def some_custom_code(self, cursor, uid, ids, ..., context):
    # possibly do some processing
    # maybe with the ... extra fields you added
    #
    # post your changes, either with an sql statement or by calling
    # self.write(...)
    return True

Имена, которые вы должны заменить фактическими значениями:

  • action_id_name: идентификатор вашей записи действия
  • Name that shows in More button: все, что вы хотите показать на кнопке
  • model_blah_blah: имя используемой модели (должно соответствовать тому, что находится в вашем файле security/ir.model.access.csv)
  • some_custom_code: имя функции в вашей модели
  • value_id_name: идентификатор записи значения вашего действия.
  • Name: имя (не уверен, где оно появляется)
  • blah.blah: имя ваших model и table в нотации OpenERP.
  • ...: любые дополнительные аргументы/параметры, которые вы добавляете
person Ethan Furman    schedule 12.03.2015
comment
Примечание. Я адаптировал найденный ответ на сайте OpenERP. - person Ethan Furman; 13.03.2015

У меня это работает:

  1. Создайте новое Действие сервера в меню Настройки » Персонализация » Объекты низкого уровня » Действия » Действия сервера:

    • Action Name: "Upgrade Selected Modules"
    • Объект: ir.module.module
    • Тип действия: код Python
    • Код Python: action = obj.button_upgrade(context=context)
  2. Создайте новую Привязку действия в меню Настройки » Персонализация » Объекты низкого уровня » Действия » Привязки действий:

    • Name: "Upgrade Modules action binding"
    • Название модели: ir.module.module
    • Определитель: client_action_multi
    • Действие: найдите «Обновить выбранные модули» в поле «Действие (только изменение)». Вы должны получить поле Action Reference с чем-то вроде: «ir.actions.server,680».

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

person Daniel Reis    schedule 30.07.2012
comment
с точки зрения дизайна это очень уродливо (вообще не ваша вина). Я попробую и отчитаюсь. - person gurney alex; 30.07.2012
comment
Как вы думаете, почему это уродливее большинства вещей в OpenERP, @gurnyalex? Для меня это примерно похоже на то, как вы настраиваете мастер. Если вам не нравится настраивать его через меню «Объекты низкого уровня», вы можете сделать аналогичные вещи в XML-файлах данных модуля. - person Don Kirkby; 30.07.2012
comment
Мне действительно не нравится код, хранящийся в строковом атрибуте и оцениваемый. Обычно это затрудняет отладку. И эти данные могут быть проблематичными во время миграции. - person gurney alex; 31.07.2012

Вы должны быть в состоянии сделать это с помощью действия execute. http://doc.openerp.com/v6.1/developer/03_modules_4.html#actions%20%22OpenERP%20Developer%20Manual%20-%20Actions

person Dan Lawson    schedule 28.07.2012
comment
Сначала я так и подумал, но, к сожалению, на этой странице очень мало информации о действиях «выполнить». Вплоть до того, что я даже не уверен, что такая вещь действительно существует в OpenERP. в ir_actions.py нет ничего похожего на «выполнить» для типа действия. Я с радостью приму более подробный ответ в этой строке. - person gurney alex; 30.07.2012