Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 动态更改按钮的操作_Xml_Xpath_Odoo_Odoo 11_Odoo View - Fatal编程技术网

Xml 动态更改按钮的操作

Xml 动态更改按钮的操作,xml,xpath,odoo,odoo-11,odoo-view,Xml,Xpath,Odoo,Odoo 11,Odoo View,是否可以根据另一个字段的值动态更改按钮的操作?示例代码: <xpath expr="//button[@class='oe_stat_button o_res_partner_tip_opp']" position="attributes"> <attribute name="name">%(action1)d</attribute> <attribute name="name">%(action2)d</attribute&

是否可以根据另一个字段的值动态更改按钮的操作?示例代码:

<xpath expr="//button[@class='oe_stat_button o_res_partner_tip_opp']" position="attributes">
    <attribute name="name">%(action1)d</attribute>
    <attribute name="name">%(action2)d</attribute>
</xpath>

该按钮的操作将是action1或action2,具体取决于(比如)布尔/选择/任意字段的值。如何实现这一点?

至少有两种可能性:

创建多个按钮并按条件显示或隐藏它们

最后,它应该是这样的:

这显然不是一个完美的解决方案,但它应该会起作用

使用python方法返回操作

这也会起作用,但会更有活力。只需制作type object的按钮,并在name属性中设置一个model multi-record方法

现在在视图模型上实现该方法:

@api.multi def按钮\u动态\u动作自身: 自保 动作={} 如果self.my_selection_字段=='selection1': 行动={ “名称”:“行动1”, “视图类型”:“表单”, “查看模式”:“表单”, 'res_model':'my.model', “视图id”:可选 'type':'ir.actions.act_window', “res_id”:可选 “目标”:“新建”或“当前” } elif self.my_selection_字段==“selection2”: 行动={ “名称”:“行动2”, “视图类型”:“表单”, “查看模式”:“树”, 'res_model':'my.model', “视图id”:可选 'type':'ir.actions.act_window', “res_id”:可选 “目标”:“当前”或“新” } 等等 返回动作 您也可以从已有的窗口操作ir.actions.act_窗口中读取,而不是在代码中创建它们,以下示例来自Odoo本身:

res=self.env['ir.actions.act\u window'].对于\u xml\u id'base','action\u attachment' ... 使用上下文或名称等更改res 返回res
第一种方法不起作用,按钮和最后一种配置重复,不知道为什么。但你的第二种方法对我有效。在模型函数中,只需返回self.env['ir.actions.act_window']。对于_xml_id'my_module','my_action',具体取决于其他字段值。我不知道这个函数。谢谢你的帮助!在第一个可能的解决方案中有一些错误,我现在已经修复了它们。完美答案无需添加任何内容