我正在使用Odoo 9社区版。
在销售订单表格中有以下按钮:
<button name="action_confirm" states="sent" string="Confirm Sale" class="btn-primary" type="object" context="{'show_sale': True}"/>
<button name="action_confirm" states="draft" string="Confirm Sale" type="object" context="{'show_sale': True}"/>
我正试图隐藏视图中的两个按钮。所以我尝试使用以下代码。
<record model="ir.ui.view" id="hide_so_confirm_button_form">
<field name="name">hide.so.confirm.button.form</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<button name="action_confirm" position="attributes">
<attribute name="invisible">1</attribute>
</button>
</field>
</record>
我也尝试过以下属性:
<attribute name="states"></attribute>
使用上面的代码,它只会隐藏/影响第一个按钮。
问题:
如何隐藏确认销售按钮?
答案 0 :(得分:4)
没有xpath的机制只会影响第一次点击。这就是你必须在这里使用xpath的原因。
另一个很好的例子(可能不再适用于Odoo 9)是在sale.order.line
表单视图的name
字段后面设置一个新的sale.order
字段。
表单视图是这样的:
<form>
<field name="name" /> <!-- sale.order name field -->
<!-- other fields -->
<field name="order_line">
<form> <!-- embedded sale.order.line form view -->
<field name="name" />
<!-- other fields -->
</form>
<tree> <!-- embedded sale.order.line tree view -->
<field name="name" />
<!-- other fields -->
</tree>
</field>
<form>
使用您的方式可以尝试在sale.order
name
字段后面设置新字段(在此示例中)。使用xpath将导致目标。
<xpath expr="//form//tree//field[@name='name']" position="after">
<field name="new_field" />
</xpath>
<xpath expr="//form//form//field[@name='name']" position="after">
<field name="new_field" />
</xpath>
所以直接回答你的问题(编辑):
<xpath expr="//button[@name='action_confirm' and @states='sent']" position="attributes">
<attribute name="states" /> <!-- delete states attribute, it's influencing invisible behaviour -->
<attribute name="invisible">1</attribute>
</xpath
<xpath expr="//button[@name='action_confirm' and @states='draft']" position="attributes">
<attribute name="states" /> <!-- delete states attribute, it's influencing invisible behaviour -->
<attribute name="invisible">1</attribute>
</xpath
答案 1 :(得分:0)
除了@CZoellner 的回答,对于 Odoo 12,它对 view_order_form
的定义改为
<button name="action_confirm" id="action_confirm"
string="Confirm" class="btn-primary" type="object"
attrs="{'invisible': [('state', 'not in', ['sent'])]}"/>
<button name="action_confirm"
string="Confirm" type="object"
attrs="{'invisible': [('state', 'not in', ['draft'])]}"/>
请注意,在此更改中,不再有 states
属性。所以,要隐藏这两个按钮,我们可以使用
<xpath expr="//button[@name='action_confirm'][1]" position="attributes">
<attribute name="attrs"></attribute>
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//button[@name='action_confirm'][2]" position="attributes">
<attribute name="attrs"></attribute>
<attribute name="invisible">1</attribute>
</xpath>
答案 2 :(得分:-1)
你可以使用xpath ...
button[@name='action_confirm'][1]
xpath ...
button[@name='action_confirm'][2]
希望有所帮助