Odoo13中如何通过域控制crm.lead的act_window动作可见性?
解决Odoo13中按线索/商机类型隐藏批量动作的问题
直接给ir.action.act_window添加普通的domain字段是无效的——这个字段用于过滤动作打开后展示的记录,而非控制动作本身在列表视图中的可见性。要实现只在线索(lead)列表中显示该动作,有两种直接可行的方案:
方案1:使用binding_domain控制动作可见性
在你的ir.actions.act_window XML定义中,添加binding_domain字段,指定仅当当前记录集满足该域条件时,动作才会显示:
<record id="action_change_lead_owner" model="ir.actions.act_window"> <field name="name">更改线索所有者</field> <field name="res_model">wizard.change.lead.owner</field> <field name="view_mode">form</field> <field name="target">new</field> <field name="binding_model_id" ref="crm.model_crm_lead"/> <field name="binding_view_types">list</field> <!-- 关键:用binding_domain控制动作何时显示 --> <field name="binding_domain">[('type', '=', 'lead')]</field> </record>
binding_domain会自动过滤动作的显示场景:当列表视图中的记录均为商机(opportunity)时,该动作会被隐藏;只有当存在符合条件的线索记录时,动作才会出现在批量操作菜单中。
方案2:在视图中直接控制动作按钮的可见性
如果你的动作是通过列表视图的button节点手动添加的,可以给按钮加上attrs属性,直接控制可见性:
<record id="crm_lead_tree_view" model="ir.ui.view"> <field name="name">crm.lead.tree.inherit</field> <field name="model">crm.lead</field> <field name="inherit_id" ref="crm.crm_lead_tree_view"/> <field name="arch" type="xml"> <xpath expr="//tree" position="inside"> <button name="%(action_change_lead_owner)d" string="更改线索所有者" type="action" attrs="{'invisible': [('type', '=', 'opportunity')]}"/> </xpath> </field> </record>
这种方式更直接,针对单个视图生效,适合需要精确控制视图展示的场景。
注意:使用方案1时,确保你的Odoo13版本支持binding_domain字段(该字段在Odoo 12+已存在),更新模块后刷新视图缓存即可生效。
内容的提问来源于stack exchange,提问作者Juraj Bezručka
相关产品推荐
相关产品推荐

