2

我已将我的 order_line 设置为可编辑,并且如果它不处于草稿模式,我想删除删除按钮。我尝试了以下操作,但删除按钮仍然存在:

<xpath expr="//field[@name='order_line']//tree" position="attributes">
  <attribute name="delete" domain="[(parent.state,'!=','draft')]"/>
</xpath>

是否可以根据父级的草稿状态动态设置 delete=false ?

我试过这个:

<record id="delete_drafts_only" model="ir.rule">
  <field name="name">You can only delete items with draft parents</field>
  <field name="model_id" ref="sale.model_sale_order_line"/>
  <field name="global" eval="True"/>
  <field name="domain_force">[('parent.state', '=', 'draft')]</field>
  <field name="perm_unlink" eval="True"/>
</record>

<record id="delete_drafts_only" model="ir.rule">
  <field name="name">You can only delete items with draft parents</field>
  <field name="model_id" ref="sale.model_sale_order_line"/>
  <field name="global" eval="True"/>
  <field name="domain_force">[('parent.state', '!=', 'draft')]</field>
  <field name="perm_read" eval="True"/>
  <field name="perm_write" eval="True"/>
  <field name="perm_create" eval="False"/>
  <field name="perm_unlink" eval="False"/>
</record>

但它似乎并不真正适用。唯一似乎起作用的是操纵ir_model_access,但这会在全局范围内切换它,这不是我想要的。

在此处输入图像描述

4

3 回答 3

2

我也使用记录规则做了类似的工作。

这些行应该具有删除权限,以便删除按钮可以在表单中使用,并且如果满足某些条件,记录规则应该拒绝删除访问权限。

所以你的第二条记录规则应该起作用。问题是删除按钮仍然可见,但是规则会引发访问错误,从而有效地执行它。

您可以尝试删除该global选项并将规则分配给一个组:

<record id="delete_drafts_only" model="ir.rule">
  <field name="name">You can only delete items with draft parents</field>
  <field name="model_id" ref="sale.model_sale_order_line"/>
  <field name="domain_force">[('parent.state', '!=', 'draft')]</field>
  <field name="groups" eval="[(4,ref('base.group_user'))]"/>
  <field name="perm_read" eval="True"/>
  <field name="perm_write" eval="True"/>
  <field name="perm_create" eval="False"/>
  <field name="perm_unlink" eval="False"/>
</record>
于 2014-11-12T08:54:37.120 回答
1

您编写的“ir.rule”解决方案几乎可以正常工作:删除按钮仍然可见,但是当您尝试保存时,它会为您提供无效访问的例外。

此外,背后的逻辑是不同的:为了“禁用”删除一行,您应该使用否定逻辑。这对我有用:

<record id="delete_drafts_only" model="ir.rule">
  <field name="name">You can only delete items with draft parents</field>
  <field name="model_id" ref="sale.model_sale_order_line"/>
  <field name="domain_force">[('state', '=', 'draft')]</field>
  <field name="groups" eval="[(4,ref('base.group_user'))]"/>
  <field name="perm_read" eval="False"/>
  <field name="perm_write" eval="False"/>
  <field name="perm_create" eval="False"/>
  <field name="perm_unlink" eval="True"/>
</record>

我想语义是:

  • domain_force 字段指出必须考虑模型的哪些记录
  • perm_* 字段指示哪些操作不能执行(因此“False”值表示操作可以执行,反之亦然)
于 2015-11-13T13:28:14.773 回答
0

您可以使用给定的标准使其不可见,而不是删除

<xpath expr="//field[@name='order_line']//tree" position='attributes'>
<attribute name='invisible' attrs="{'invisible':[('parent.state','!=','draft')]}">1</attribute>
</xpath>

这只是一个简短的想法.. 试试看。

于 2015-11-13T14:00:53.027 回答