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

レコード ルールも使用して、同様の作業を行いました。

フォームで削除ボタンを使用できるように、行には削除アクセス権が必要です。特定の条件が満たされた場合、レコード ルールは削除アクセスを拒否する必要があります。

したがって、2 番目のレコード ルールが機能するはずです。問題は、削除ボタンが引き続き表示されることですが、ルールによって 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>
于 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 に答える