如何设置 Odoo 智能按钮的顺序?

How to set a sequence for Odoo smart buttons?

我正在 button_box div 产品中添加一个新按钮。为此,我编写了以下代码:

<record id="product_template_form_view" model="ir.ui.view">
    <field name="name">product.template.common.form</field>
    <field name="model">product.template</field>
    <field name="inherit_id" ref="product.product_template_form_view"/>
    <field name="arch" type="xml">
        <div name="button_box" position="inside">
            <button class="oe_stat_button" type="object" name="open_maintenance_equipments" groups="maintenance.group_equipment_manager" icon="fa-wrench">
                <field string="Maintenance Equipments" name="maintenance_equipment_count" widget="statinfo"/>
            </button>
        </div>
    </field>
</record>

它工作正常,但按钮出现在左侧,在 Odoo 销售、购买等主要按钮之前。我将代码更改为:

<record id="product_template_form_view" model="ir.ui.view">
    <field name="name">product.template.common.form</field>
    <field name="model">product.template</field>
    <field name="inherit_id" ref="product.product_template_form_view"/>
    <field name="arch" type="xml">
        <xpath expr="//div[@name='button_box']/button[last()]" position="after">
            <button class="oe_stat_button" type="object" name="open_maintenance_equipments" groups="maintenance.group_equipment_manager" icon="fa-wrench">
                <field string="Maintenance Equipments" name="maintenance_equipment_count" widget="statinfo"/>
            </button>
        </xpath>
    </field>
</record>

但这里的问题是在源视图 product.product_template_form_view 中 div 中仍然没有按钮。所以要应用这个,我应该从修改这个产品视图的主要视图之一继承(比如 salepurchase 等应用程序引入的视图).但是我不想这样做,因为:

  1. 我的模块应该依赖于与我的模块无关的应用程序。我无法自动安装,例如 purchase 在安装我的模块时。
  2. 尽管这样做,但不能保证我的按钮在这些“主要”按钮之后,因为这取决于模块安装顺序。

那么,你知道实现我的目的的方法吗,比如 sequence 字段或类似的东西?

模型 ir.ui.view 上有一个序列字段,可用于您的要求。因此,请尝试继承其中一个基本视图,但同时设置高优先级,这意味着该新视图的顺序较高。

<record id="product_template_form_view" model="ir.ui.view">
    <field name="name">product.template.common.form</field>
    <field name="model">product.template</field>
    <field name="inherit_id" ref="product.product_template_form_view"/>
    <field name="priority" eval="100" />
    <field name="arch" type="xml">
        <div name="button_box" position="inside">
            <button class="oe_stat_button" type="object" name="open_maintenance_equipments" groups="maintenance.group_equipment_manager" icon="fa-wrench">
                <field string="Maintenance Equipments" name="maintenance_equipment_count" widget="statinfo"/>
            </button>
        </div>
    </field>
</record>

您当然可以使用 100 以外的其他值,但这似乎是一个神奇的边界值,因为 Odoo 中没有任何东西使用如此高的序列。

如果您希望客户获得与 Odoo Studio 的更多兼容性,请记住 Studio 视图始终获得 99 (IIRC) 的序列值。

采购和库存模块继承 product.product_template_only_form_view 视图和销售模块继承 product.product_normal_form_view 并且您正在继承父视图,该视图在应用当前视图的继承规范之前将始终被完全解析:

if the view has a parent, the parent is fully resolved then the current view’s inheritance specs are applied

有关详细信息,请查看 view resolution 文档

如果您继承了上述视图之一,按钮将自动添加到右侧,具体取决于视图的优先级,正如@CZoellner 已经提到的那样