Odoo中account.move视图XPath无效果且无报错问题求助
问题:Account Move视图按钮权限控制XPath失效排查
我需要让两个视图中的按钮仅对特定用户组可见,sale.order视图实现正常,但采用相同方式继承的account.move视图中XPath设置无效果且未抛出任何错误。视图已正确注册为继承视图,修改按钮名称会提示找不到按钮,但设置无效果。已尝试重启服务器与虚拟机、更换用户组、设置invisible=1等方法,均未解决,求进一步排查思路。
正常工作的Sale Order视图代码
<odoo> <record id="view_sale_order_form_extension" model="ir.ui.view"> <field name="name">sale.order.form.extension</field> <field name="model">sale.order</field> <field name="inherit_id" ref="sale_commission.view_order_agent_form_inherit"/> <field name="arch" type="xml"> <xpath expr="//button[@name='button_edit_agents'][@icon='fa-users']" position="attributes"> <attribute name="groups">sale_commission.group_sales_agent</attribute> </xpath> </field> </record> </odoo>
无效果的Account Move视图代码
<odoo> <record id="view_account_move_form_extension" model="ir.ui.view"> <field name="name">sale.commission.view.move.form.extension</field> <field name="model">account.move</field> <field name="inherit_id" ref="sale_commission.view_move_form"/> <field name="arch" type="xml"> <xpath expr="//button[@name='button_edit_agents'][@icon='fa-users']" position="attributes"> <attribute name="groups">sale_commission.group_sales_agent</attribute> </xpath> </field> </record> </odoo>
按钮添加的实现代码
<xpath expr="//field[@name='invoice_line_ids']/tree//field[@name='price_subtotal']" position="after"> <button name="button_edit_agents" icon="fa-users" attrs="{'invisible': [ '|',('commission_free', '=', True),('any_settled', '=', True),],'column_invisible': [('parent.move_type', 'not in', ['out_invoice', 'out_refund'])]}" type="object"/> </xpath>
排查思路
- 精确XPath定位:按钮位于
invoice_line_ids的tree视图内部,全局//button可能匹配偏差。尝试使用更精确的路径://field[@name='invoice_line_ids']/tree/button[@name='button_edit_agents'][@icon='fa-users'],限定在目标tree内部匹配。 - 检查attrs与groups优先级:按钮本身的
attrs包含invisible规则,Odoo中groups和attrs是逻辑与关系,但如果attrs的条件强制显示可能覆盖效果。先移除按钮原有的invisibleattrs,测试groups是否生效,再逐步合并规则。 - 调整视图继承顺序:如果有其他模块同时继承该视图并修改按钮,可能覆盖你的设置。在视图记录中添加
priority字段(如设置为20),确保你的视图最后加载应用。 - 直接在按钮添加时设置groups:跳过继承视图,直接在按钮添加代码中加入
groups属性,测试是否生效,判断是继承视图问题还是XPath定位问题:<button name="button_edit_agents" icon="fa-users" attrs="..." type="object" groups="sale_commission.group_sales_agent"/> - 查看合并后视图结构:开发者模式下进入
设置 > 技术 > 用户界面 > 视图,找到account.move表单视图,查看合并后的XML结构,确认groups属性是否被正确应用到按钮上。 - 验证用户组权限:确认测试用户确实不属于
sale_commission.group_sales_agent组,且未通过父组间接获得该权限,可在用户权限设置中查看「有效权限」确认。
内容的提问来源于stack exchange,提问作者pycal
相关产品推荐
相关产品推荐

