Odoo: Ошибка действия Не удалось найти действие клиента (Odoo 9 / Open ERP)

Я работал над разработкой простого плагина Odoo 9 с использованием QWeb, и я столкнулся с проблемой, когда я не могу успешно зарегистрировать/вызвать действие из файла .js независимо от того, что я делаю.

Цель этого простого приложения — просто создать пункт меню со ссылкой, которая вызывает действие. Меню создается успешно, но каждый раз, когда я пытаюсь вызвать действие, я получаю следующую ошибку:

Ошибка

Файл Javascript пытается зарегистрировать действие под названием test.DoSomething, используя следующий код:

openerp.test = function(instance, local) {
    var _t = instance.web._t,
    _lt = instance.web._lt;

    instance.web.client_actions.add('test.DoSomething', 'instance.test.DoSomething');
    instance.test.DoSomething = instance.web.Widget.extend({
        start: function() {
            console.log("Doing Something!!!!");
        }
    });
}

На это ссылается файл test.xml, содержащий следующую разметку:

<?xml version="1.0" encoding="UTF-8"?>
<openerp>
    <data>
        <template id="assets_backend" name="test" inherit_id="web.assets_backend">
            <xpath expr="." position="inside">
            <script type="text/javascript" src="/testapp/static/src/js/test.js"/>
            </xpath>
        </template>

        <menuitem id="main_testapp_menu" name="Test App" />

        <menuitem id="testapp_menu" name="Test App"
        parent="main_testapp_menu" />

        <record id="action_home_page" model="ir.actions.client">
            <field name="name">Test Home Page</field>
            <field name="tag">test.DoSomething</field>
        </record>

        <menuitem id="home_page_menu" name="Home Page" parent="testapp_menu"
        action="action_home_page"/>
    </data>
</openerp>

Файл __openerp__.py содержит это:

{
    'name' : 'testapp',
    'version': '1.0',
    'summary': 'testapp',
    'category': 'Tools',
    'author': 'Test',
    'description':
        """
TEST APP
====================

Simple test application for odoo
        """,
    'data': [
        'test.xml' 
    ],
    'depends' : ['web'],
    'application': True,
}

Есть ли более новый/другой способ регистрации действий в Odoo 9? Даже попытка примера кода из Odoo 8 приводит к аналогичным ошибкам.


person EricL    schedule 01.07.2016    source источник


Ответы (1)


Я не вижу ошибки в представленном коде, он должен работать в Odoo 8, только если нет несоответствия имени модуля:

Обратите внимание на первую строку в SJ: openerp.test = function(instance, local) { здесь имя модуля важно, так что вы должны принять это во внимание. Вы не можете написать openerp.whatever = function(instance, local), вы должны использовать openerp.an_exact_technical_name_of_your_module = function(instance, local), чтобы ваш код JS выполнялся Odoo.

Имя, которое вы должны использовать как an_exact_technical_name_of_your_module, является техническим именем вашего модуля (т. е. именем основного каталога вашего модуля Odoo), может быть, это не test в вашем случае? (может быть, testapp или что-то в этом роде?), поэтому используйте правильное имя вместо test, и тогда оно должно быть исправлено.

Если вы выравниваете имя, а ваш код все равно не выполняется, это должно означать, что Odoo изменил определения JS в Odoo версии 9 без учета обратной совместимости, тогда вам потребуется написать весь код JS в новом стиле, который находится в стиле odoo.define('an_exact_technical_name_of_your_module.some_feature', function (require) {... например, обратитесь к некоторому коду JS в исходном коде Odoo 9, например этот, хотя вы можете получить выражение, что все изменилось, на самом деле изменения довольно поверхностны, и вы все еще можете как-то полагаться на текущую документацию для внутренней реализации Виджеты в JS (документация еще не приведена в соответствие с изменениями в ядре исходный код), но более общие вещи, такие как добавление/регистрация новых функций в Odoo, вам лучше поискать примеры в исходниках Odoo (например, тот, который я упомянутый выше)

person T.V.    schedule 02.07.2016
comment
Это определенно решило мою проблему. Как только я изменил имя имени модуля javascript, чтобы оно соответствовало общему имени модуля, все заработало. Спасибо! - person EricL; 04.07.2016