如何覆盖 act_stock_return_picking 按钮?在 Odoo 9

How can I override act_stock_return_picking button? In Odoo 9

我想覆盖 "Reverse" 选股按钮,使其仅对 stock.group_stock_manager 可见。

我使用了与往常相同的方法来覆盖按钮:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
  <data>
    <record id="view_picking_form_extend" model="ir.ui.view">
      <field name="name">stock.picking.form.extend</field>
      <field name="model">stock.picking</field>
      <field name="inherit_id" ref="stock.view_picking_form"/>
      <field name="arch" type="xml">
        <xpath expr="/form/header/button[@name='%(act_stock_return_picking)d']" position="replace">
          <button name="%(act_stock_return_picking)d" string="Reverse" states="done" type="action" groups="stock.group_stock_manager"/>
        </xpath>
      </field>
    </record>
  </data>
</openerp>

但是我得到一个错误。它说元素不能位于父视图中。

我在父视图中有这个:

<button name="%(act_stock_return_picking)d" string="Reverse" states="done" type="action" groups="base.group_user"/>

注意: 如果我覆盖其他按钮(没有 '%' 和 'd' 字符)它工作正常。

我做错了什么?

当你有%(xml_id)d时,这意味着Odoo将在数据库中搜索那个XML ID(一个string)的ID并用PostgreSQL替换它ID(一个integer)。因此,对于每个 XML ID,如果您尚未在模块中声明它,则必须指定声明它的模块。

尝试将创建源按钮的模块名称写在操作名称之前,如果您只是修改 groups,请不要替换整个按钮,请使用 attributes相反,像这样:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
  <data>
    <record id="view_picking_form_extend" model="ir.ui.view">
      <field name="name">stock.picking.form.extend</field>
      <field name="model">stock.picking</field>
      <field name="inherit_id" ref="stock.view_picking_form"/>
      <field name="arch" type="xml">
        <xpath expr="/form/header/button[@name='%(stock.act_stock_return_picking)d']" position="attributes">
          <attribute name="groups">stock.group_stock_manager</attribute>
        </xpath>
      </field>
    </record>
  </data>
</openerp>