Odoo:操作错误无法找到客户端操作(Odoo 9 / Open ERP)

时间:2016-07-01 22:08:21

标签: openerp odoo-9 qweb

我一直在使用QWeb开发一个简单的Odoo 9插件,而且我遇到了无论我做什么都无法成功注册/调用.js文件中的操作的问题。

这个简单应用程序的目的只是创建一个菜单项,其中包含一个调用动作的链接。菜单创建成功,但每次我尝试调用操作时,都会收到以下错误:

Error

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的示例代码也会产生类似的错误。

1 个答案:

答案 0 :(得分:4)

我发现代码中没有任何错误,它应该在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在Odoo版本9中更改了JS定义而没有考虑到向后兼容性,那么您将需要编写整个JS代码一种新的样式,即odoo.define('an_exact_technical_name_of_your_module.some_feature', function (require) {样式...例如,请参考Odoo 9源代码中的一些JS代码,例如this one,尽管你可能会得到所有内容都被更改的表达式,实际上更改是非常肤浅的,你仍然可以依赖于当前文档在JS中内部实现Widgets(Documentation尚未与核心源代码中的更改保持一致),但更一般的事情,如添加/注册新Odoo的功能,你最好考虑在Odoo源代码中寻找例子(比如我referenced上面的那个)