title: How to create server actions in Odoo 10?
body: <p>In Odoo 8, I was able to define a server action using XML such as:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8" ?&gt;
  &lt;odoo&gt;
    &lt;data&gt;
      &lt;record id="action" model="ir.actions.server"&gt;
        &lt;field name="name"&gt;My Action&lt;/field&gt;
        &lt;field name="model_id" ref="model_module_model"/&gt;
        &lt;field name="code"&gt;self.action(cr, uid, context=context)&lt;/field&gt;
      &lt;/record&gt;
    &lt;/data&gt;
  &lt;/odoo&gt;
  </code></pre>
  
  <p>This would execute my module.model.action() method.</p>
  
  <p>In Odoo 10, this code throws an exception:</p>
  
  <pre><code>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 to 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 &lt;module&gt;
  ValueError: &lt;type 'exceptions.NameError'&gt;: "name 'self' is not defined" while evaluating
  u'self.action(cr, uid, context=context)'
  </code></pre>
  
  <p>I'm not seeing anything interesting in the Odoo documentation about server actions at <a href="https://www.odoo.com/documentation/10.0/reference/actions.html#code" rel="nofollow noreferrer">https://www.odoo.com/documentation/10.0/reference/actions.html#code</a></p>
  
  <p>And the docs explicitly state that self is part of the evaluation context for server actions, see <a href="https://www.odoo.com/documentation/10.0/reference/actions.html#reference-actions-server-context" rel="nofollow noreferrer">https://www.odoo.com/documentation/10.0/reference/actions.html#reference-actions-server-context</a></p>
  
  <p>How does one create server actions in Odoo 10?</p>