oodo 設(shè)計(jì)模式一 - 消息通知

問題

系統(tǒng)根據(jù)單據(jù)更新發(fā)送消息通知相關(guān)人員。

舉例:
生產(chǎn)訂單下發(fā)观游,庫管人員就會(huì)得到需要發(fā)貨的消息。

相關(guān)的設(shè)計(jì)模式有:

  • 重寫動(dòng)作函數(shù).
  • 自動(dòng)化動(dòng)作
  • 定制開發(fā)驮俗,根據(jù)單據(jù)狀態(tài)懂缕,發(fā)送消息

相關(guān)主題:odoo提醒

下面就,討論不同模式的實(shí)現(xiàn)方法王凑,和利弊搪柑。

重寫動(dòng)作函數(shù)

odoo v8 中 確認(rèn)生產(chǎn)訂單 通過workflow完成,
workflow 調(diào)用的確認(rèn)函數(shù)是:

def action_confirm(self, cr, uid, ids, context=None):
        """ Confirms production order.
        @return: Newly generated Shipment Id.
        """
        user_lang = self.pool.get('res.users').browse(cr, uid, [uid]).partner_id.lang
        context = dict(context, lang=user_lang)
        uncompute_ids = filter(lambda x: x, [not x.product_lines and x.id or False for x in self.browse(cr, uid, ids, context=context)])
        self.action_compute(cr, uid, uncompute_ids, context=context)
        for production in self.browse(cr, uid, ids, context=context):
            self._make_production_produce_line(cr, uid, production, context=context)

            stock_moves = []
            for line in production.product_lines:
                if line.product_id.type != 'service':
                    stock_move_id = self._make_production_consume_line(cr, uid, line, context=context)
                    stock_moves.append(stock_move_id)
                else:
                    self._make_service_procurement(cr, uid, line, context=context)
            if stock_moves:
                self.pool.get('stock.move').action_confirm(cr, uid, stock_moves, context=context)
            production.write({'state': 'confirmed'})
        return 0

重寫函數(shù), 增加以下代碼實(shí)現(xiàn)索烹。

SUPER(mrp_prodduction, self).action_confirm(cr, uid, ids, context=None)
self.message_post(cr, uid, ids, body=_("Order %s confirmed. Please Send Material") % self._description, context=context)

修改結(jié)果


rewrite_function.png

優(yōu)點(diǎn): 簡單直接
缺點(diǎn): 需要找到代碼函數(shù)工碾,重寫函數(shù)。

定制百姓,根據(jù)狀態(tài)變化

此方法需要修改代碼渊额,在單據(jù)狀態(tài)變化的時(shí)候,自動(dòng)推送消息。

依賴代碼部分
模塊集成

    _inherit = ['mail.thread', 'ir.needaction_mixin']

定義狀態(tài), 增加track_visibility屬性

'state': fields.selection(
            [('draft', 'New'), ('cancel', 'Cancelled'), ('confirmed', 'Awaiting Raw Materials'),
                ('ready', 'Ready to Produce'), ('in_production', 'Production Started'), ('done', 'Done')],
            string='Status', readonly=True,
            track_visibility='onchange', copy=False,

定義_trace 字段以及參數(shù)
ps. mrp.production 中未定義_track, 故狀態(tài)更新 不會(huì)推送消息通知旬迹。

# Automatic logging system if mail installed
    # _track = {
    #   'field': {
    #       'module.subtype_xml': lambda self, cr, uid, obj, context=None: obj[state] == done,
    #       'module.subtype_xml2': lambda self, cr, uid, obj, context=None: obj[state] != done,
    #   },
    #   'field2': {
    #       ...
    #   },
    # }
    # where
    #   :param string field: field name
    #   :param module.subtype_xml: xml_id of a mail.message.subtype (i.e. mail.mt_comment)
    #   :param obj: is a browse_record
    #   :param function lambda: returns whether the tracking should record using this subtype

其中 module.subtype_xml 需要在xml中定義消息類型火惊。 例如 account_voucher 的跟蹤消息類型

 <!-- Voucher-related subtypes for messaging / Chatter -->
        <record id="mt_voucher_state_change" model="mail.message.subtype">
            <field name="name">Status Change</field>
            <field name="res_model">account.voucher</field>
            <field name="default" eval="False"/>
            <field name="description">Status changed</field>
        </record>

優(yōu)點(diǎn):根據(jù)狀態(tài)或其他字段自動(dòng)推送消息。
缺點(diǎn):定義復(fù)雜奔垦。

自動(dòng)化動(dòng)作

創(chuàng)建自動(dòng)話動(dòng)作屹耐,定義對象和條件


Automatci_action.png

定義動(dòng)作: 更改負(fù)責(zé)人 或增加關(guān)注者(本例中可以增加倉庫人員)


set_action1.png

或 更復(fù)雜動(dòng)作,用服務(wù)器動(dòng)作定義


create_server_action.png

優(yōu)點(diǎn) : 用戶可配置
缺點(diǎn): server action 需要寫python代碼

總結(jié)

以上三種方法椿猎,都是使用message_post方法發(fā)送消息給關(guān)注者惶岭,如需使用其他發(fā)送消息方法,需要在mail thread尋找新的方法犯眠。
方法三俗他,可以自定義配置條件,也可以增加關(guān)注者阔逼,也可以增加復(fù)雜動(dòng)作,靈活地沮。
方法一嗜浮,對開發(fā)者來說更直接。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摩疑,一起剝皮案震驚了整個(gè)濱河市危融,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌雷袋,老刑警劉巖吉殃,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異楷怒,居然都是意外死亡蛋勺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門鸠删,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抱完,“玉大人,你說我怎么就攤上這事刃泡∏捎椋” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵烘贴,是天一觀的道長禁添。 經(jīng)常有香客問我,道長桨踪,這世上最難降的妖魔是什么老翘? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上酪捡,老公的妹妹穿的比我還像新娘叁征。我一直安慰自己,他們只是感情好逛薇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布捺疼。 她就那樣靜靜地躺著,像睡著了一般永罚。 火紅的嫁衣襯著肌膚如雪啤呼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天呢袱,我揣著相機(jī)與錄音官扣,去河邊找鬼。 笑死羞福,一個(gè)胖子當(dāng)著我的面吹牛惕蹄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播治专,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼卖陵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了张峰?” 一聲冷哼從身側(cè)響起泪蔫,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎喘批,沒想到半個(gè)月后撩荣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡饶深,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年餐曹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敌厘。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凸主,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出额湘,到底是詐尸還是另有隱情卿吐,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布锋华,位于F島的核電站嗡官,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏毯焕。R本人自食惡果不足惜衍腥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一磺樱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧婆咸,春花似錦竹捉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至倔丈,卻和暖如春憨闰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背需五。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國打工鹉动, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宏邮。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓泽示,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蜜氨。 傳聞我的和親對象是個(gè)殘疾皇子边琉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 工廠模式類似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品,去做同樣的事情记劝,實(shí)現(xiàn)同樣的效果;這時(shí)候需要使用工廠模式。簡單...
    舟漁行舟閱讀 7,767評(píng)論 2 17
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,164評(píng)論 25 707
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,237評(píng)論 0 4
  • 昨天下午更新了下mac系統(tǒng)到版本10.11.3(15D21)后打開Android studio的時(shí)候出現(xiàn)了一個(gè)bu...
    DevWang閱讀 1,398評(píng)論 0 49
  • 宋承煥:妙趣橫生族扰,人生之首厌丑,莫屬平昌 ”壓力好大,因?yàn)橐谱鞒龉┦澜缙呤鍍|人觀看的公演渔呵,但只要一投入到會(huì)議中怒竿,這...
    隔行如童話閱讀 199評(píng)論 7 0