Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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
Openerp 如何动态设置树视图删除状态?_Openerp_Odoo_Openerp 8 - Fatal编程技术网

Openerp 如何动态设置树视图删除状态?

Openerp 如何动态设置树视图删除状态?,openerp,odoo,openerp-8,Openerp,Odoo,Openerp 8,我已将订单行设置为可编辑,如果未处于草稿模式,则希望删除删除按钮。我尝试了以下操作,但删除按钮仍然存在: <xpath expr="//field[@name='order_line']//tree" position="attributes"> <attribute name="delete" domain="[(parent.state,'!=','draft')]"/> </xpath> 是否可以根据父级的草稿状态动态设置delete=fals

我已将订单行设置为可编辑,如果未处于草稿模式,则希望删除删除按钮。我尝试了以下操作,但删除按钮仍然存在:

<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>

您只能删除具有草稿父项的项目
[('parent.state','=','draft')]


您只能删除具有草稿父项的项目
[('parent.state','!=','draft')]
但这似乎并不实际适用。唯一有效的方法似乎是操纵
ir\u model\u access
,但这会全局切换,这不是我想要的

我已经完成了工作,也使用了记录规则

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

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

您可以尝试删除
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>

您只能删除具有草稿父项的项目
[('parent.state','!=','draft')]
您编写的“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>

您只能删除具有草稿父项的项目
[('state','=','draft')]
我想语义是:

  • 域_力场指出必须考虑模型的哪些记录
  • perm_*字段表示哪些操作无法执行(因此“False”值表示操作可以执行,反之亦然)

    • 您可以使用给定的条件使其不可见,而不是删除

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

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

      为什么不让它成为只读的呢?你需要编辑它吗?@StackUP我需要编辑我添加的1个字段,是的。对,所以我花了几个小时试图让它再次工作。我的
      ir.rule
      似乎根本不起作用。仅在sale中切换组权限
      ir.model.access
      似乎有效。如果你看我的屏幕截图,我不允许在任何状态下对所有订单行规则进行任何创建和删除,但它并不坚持。
      ir.model.access
      中的组权限是否总是覆盖
      ir.rule
      ?相反:
      ir.rule
      覆盖(在
      ir.model.access
      之后检查),因此
      ir.model.access
      应该更具权限,然后
      ir.rule
      为某些条件添加限制。这是我链接的模块的一个例子。嗯,我想我尝试了选择加入和选择退出,但我会再试一次。在任何情况下,我都会给你赏金,因为赏金即将过期。他不想隐藏这棵树,只想隐藏删除按钮。
      <xpath expr="//field[@name='order_line']//tree" position='attributes'>
      <attribute name='invisible' attrs="{'invisible':[('parent.state','!=','draft')]}">1</attribute>
      </xpath>