openerp - How to create server actions in Odoo 10? -
in odoo 8, able define server action using xml such as:
<?xml version="1.0" encoding="utf-8" ?> <odoo> <data> <record id="action" model="ir.actions.server"> <field name="name">my action</field> <field name="model_id" ref="model_module_model"/> <field name="code">self.action(cr, uid, context=context)</field> </record> </data> </odoo>
this execute module.model.action() method.
in odoo 10, code throws exception:
error:odoo.http:exception during json request handling. traceback (most recent call last): file "/usr/share/odoo/lib/python2.7/site-packages/odoo/http.py", line 638, in _handle_exception return super(jsonrequest, self)._handle_exception(exception) file "/usr/share/odoo/lib/python2.7/site-packages/odoo/http.py", line 675, in dispatch result = self._call_function(**self.params) file "/usr/share/odoo/lib/python2.7/site-packages/odoo/http.py", line 331, in _call_function return checked_call(self.db, *args, **kwargs) file "/usr/share/odoo/lib/python2.7/site-packages/odoo/service/model.py", line 119, in wrapper return f(dbname, *args, **kwargs) file "/usr/share/odoo/lib/python2.7/site-packages/odoo/http.py", line 324, in checked_call result = self.endpoint(*a, **kw) file "/usr/share/odoo/lib/python2.7/site-packages/odoo/http.py", line 933, in __call__ return self.method(*args, **kw) file "/usr/share/odoo/lib/python2.7/site-packages/odoo/http.py", line 504, in response_wrap response = f(*args, **kw) file "/usr/share/odoo/lib/python2.7/site-packages/odoo/addons/web/controllers/main.py", line 1129, in run result = request.env['ir.actions.server'].browse([action_id]).run() file "/usr/share/odoo/lib/python2.7/site-packages/odoo/addons/base/ir/ir_actions.py", line 964, in run res = func(action, eval_context=eval_context) file "/usr/share/odoo/lib/python2.7/site-packages/odoo/addons/base/ir/ir_actions.py", line 793, in run_action_code_multi safe_eval(action.code.strip(), eval_context, mode="exec", nocopy=true) # nocopy allows return 'action' file "/usr/share/odoo/lib/python2.7/site-packages/odoo/tools/safe_eval.py", line 301, in safe_eval return unsafe_eval(c, globals_dict, locals_dict) file "", line 1, in <module> valueerror: <type 'exceptions.nameerror'>: "name 'self' not defined" while evaluating u'self.action(cr, uid, context=context)'
i'm not seeing interesting in odoo documentation server actions @ https://www.odoo.com/documentation/10.0/reference/actions.html#code
and docs explicitly state self part of evaluation context server actions, see https://www.odoo.com/documentation/10.0/reference/actions.html#reference-actions-server-context
how 1 create server actions in odoo 10?
there no need self object while declare server actions in odoo 10. can directly access model/object env['model.name']
try following code:
<?xml version="1.0" encoding="utf-8" ?> <odoo> <data> <record id="action" model="ir.actions.server"> <field name="name">my action</field> <field name="model_id" ref="model_module_model"/> <field name="code"> if context.get('active_model') == 'your.module.model' , context.get('active_ids'): action = env['module.model'].browse(context['active_ids']).action() </record> </data> </odoo>
edit:
we can use these env['module.model'].action() execute method when there no active_ids
Comments
Post a Comment