適用版本:16.0、15.0、14.0、13.0
提供單一操作觸發後續多個客戶端動作的方法。
在開發系統過程中,若是需要在使用者執行某個動作後,觸發系統自動運作後續多個動作,你就不能錯過 web_ir_actions_act_multi 這個模組。
安裝這個模組後,可以簡化開發工作量,讓程式碼更簡潔漂亮。
客戶若是有工作流程自動化的需求,就很適合使用這個模組。
例如:
一家買賣業公司希望,客戶在網站上完成訂單後,系統可以自動完成以下事情:
首先要先安裝模組 web_ir_actions_act_multi,
然後可以參考這樣的 Python 語法架構:
from odoo import api, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
def action_confirm_and_send_email(self):
# 1. 自動確認報價單,轉為銷售訂單。
self.action_confirm()
# 2. 使用已建立的郵件模板發送訂單成立信件。
template_id = self.env.ref('my_module.email_template_202309')
for order in self:
template_id.send_mail(order.id)
# 關閉當前視窗並重新加載頁面。
return {
'type': 'ir.actions.act_multi',
'actions': [
{'type': 'ir.actions.act_window_close'},
{'type': 'ir.actions.client', 'tag': 'reload'},
]
}
又或者是
公司希望當銷售訂單被確認時,系統能夠自動完成以下動作:
可以參考以下的架構:
from odoo import api, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
def check_stock_and_request_purchase(self):
for order in self:
for line in order.order_line:
if line.product_id.qty_available < line.product_uom_qty:
# 創建採購請求
self.env['purchase.order'].create({
'partner_id': line.product_id.seller_id.id,
'order_line': [(0, 0, {
'product_id': line.product_id.id,
'product_qty': line.product_uom_qty - line.product_id.qty_available,
'product_uom': line.product_uom.id,
'price_unit': line.product_id.standard_price,
'date_planned': fields.Datetime.now(),
})],
})
# 關閉當前視窗並重新加載頁面。
return {
'type': 'ir.actions.act_multi',
'actions': [
{'type': 'ir.actions.act_window_close'},
{'type': 'ir.actions.client', 'tag': 'reload'},
]
}
透過這兩個範例,可以發現到,
web_ir_actions_act_multi 模組「在使用者執行某個動作後,觸發系統自動運作後續多個動作」的功能,是在行為迴圈後,透過return
來完成的,大家可以依據需要的行為在'actions'
裡加入更多的動作。
當然這只是簡易的示範,第一個範例由於 trigger 是客戶完成訂單時,所以在網站模組的相關設定和程式碼要依據實際狀況再調整;第二個範例則是要確認商品是否有設定供應商等等的設定。
這兩個範例程式碼的主要重點是在return
階段,
目的是要告訴大家,安裝 web_ir_actions_act_multi 模組後的使用語法。
由於本身不是開發背景,遇到 web_ir_actions_act_multi 模組研究了好久(๑´ㅁ`)
不曉得有沒有實際在開發工作中運用這個模組的朋友?是否有依據我們對模組功能預期的,讓工作流程更加順暢?
如果大家有想要分享自己的使用經驗,歡迎在下方留言討論喔!祝開發(補班)愉快,我們明天見!( ・ิω・ิ)
p.s. 本篇程式碼部分感謝 ChatGPT 大力相助:)深怕寫出錯誤資訊,跟 ChatGPT 來回確認好多次,希望有幫助大家更瞭解 web_ir_actions_act_multi 模組的用法~