Odoo8中“更多”下拉選單選項指定後臺執行程式碼
阿新 • • 發佈:2019-01-22
在Odoo8中的倉庫模組,根據每日最小安全庫存數量,系統會自動生成一些補貨單,而且是一個產品會生成一筆,如果產品比較多,這裡生成的補貨單也會很多。
如果這裡的補貨單沒有即時處理,那相同產品後續不會再生成新的補貨單。
所以採購人員要求不處理的補貨單可以手動來取消,這樣方便第二天能產生出新的補貨單。
現在取消補貨單的功能是放在form檢視中,需要逐張單據點開,再去點取消按鈕,不方便操作。採購人員希望是可以全選一次取消所選單據,根據之前的經驗,我們可以在tree檢視的“更多”按鈕下加一個選單專案,但這個取消比較單純,我不想使用嚮導來彈出一個新視窗,這完全是一個多餘的操作。經查詢odoo的原始碼,在其它模組也有類似的需求,並且odoo也提供了一些動作型別來處理此類需求,主要xml配置如下:
<record id="action_procurement_order_cancel" model="ir.actions.server"> <field name="name">取消補貨單</field> <field name="model_id" ref="procurement.model_procurement_order"/> <field name="state">code</field> <field name="code"> if context.get('active_model') == 'procurement.order' and context.get('active_ids'): self.cancel(cr, uid, context['active_ids'], context=context) </field> </record> <record id="ir_procurement_order_cancel" model="ir.values"> <field eval="'client_action_multi'" name="key2"/> <field eval="'procurement.order'" name="model"/> <field name="name">取消補貨單</field> <field eval="'ir.actions.server,%d'%action_procurement_order_cancel" name="value"/> </record>
這裡使用到了ir.actions.server伺服器動作,就是說點選選單專案時,不彈出嚮導視窗,只是執行一個伺服器動作,並且這裡配置需要在伺服器上執行的程式碼,就是呼叫self.cancel方法,所選擇的資料id列表會通過上下文引數context中的active_ids帶入。