2014-10-27 57 views
2

我已將我的訂單行設置爲可編輯,並且想要刪除刪除按鈕(如果它不處於草稿模式)。我嘗試以下,但刪除按鈕仍然是:如何動態設置樹視圖的刪除狀態?

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

是否可以動態地設置刪除=假基於父的狀態草案?

我嘗試這樣做:

<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,但它在全局切換,這不是我想要的。

enter image description here

+0

爲什麼不能只讀?你需要編輯它嗎? – StackUP 2014-10-28 02:33:55

+0

@StackUP我需要編輯我添加的1個字段,是的。 – 2014-10-28 05:48:37

回答

2

我已經something similar工作,還使用記錄的規則。

這些行應具有刪除訪問權限,以便可以在表單中使用刪除按鈕,並且如果滿足某些條件,則記錄Rule應拒絕刪除訪問。

所以你的第二條記錄規則應該工作。 問題在於刪除按鈕仍然可見,但規則會引發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> 
+0

正確,所以我花了幾個小時試圖讓這個工作再次。我的ir.rule似乎根本不起作用。只有從出售切換組權限'ir.model.access'似乎工作。如果你看看我的屏幕截圖,我已經禁止在所有訂單行規則中的任何狀態下進行任何創建和刪除操作,但它不會保留。在ir.model中組權限。access'總是覆蓋'ir.rule'? – 2014-11-13 00:03:48

+0

反過來說:'ir.rule'覆蓋(被檢查_after_)'ir.model.access',所以'ir.model.access'應該更寬容,然後'ir.rule'添加某些限制條件。這個工作就是我作爲例子鏈接的模塊。 – 2014-11-13 08:46:14

+0

嗯,我想我嘗試了選擇加入和退出,但我會再試一次。無論如何,因爲它即將超時,我給了你賞金。 – 2014-11-13 08:48:02

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_ *字段指明操作不能被執行(因此一個「假」值意味着該操作可以執行,反之亦然)
0

而不是刪除,你可以使它不可見的給定標準

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

這只是一個簡單的想法..試試吧。

+0

他不想隱藏樹,只是刪除按鈕。 – 2015-11-13 14:19:29