首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

OpenERP (Odoo) 彈出提示窗口完整指南:osv.except_osv 用法詳解

     編輯:關於C語言

前言

在 OpenERP (現稱 Odoo) 開發中,彈出提示窗口是常見需求。主要有三種方式,本文重點介紹最常用的 osv.except_osv 異常拋機制,並附帶國際化翻譯與變量嵌入技巧。

核心用法:拋出業務異常

在模型方法中調用 raise osv.except_osv(_('Error!'), _('Error Message.')) 即可中斷執行並彈出模態對話框。參數均用 _() 包裹以支持多語言。

from openerp.tools.translate import _
from osv.osv import except_osv

def __assistant_depmanager_prove(self, cr, uid, ids, context=None):
    for qjd in self.browse(cr, uid, ids, context=context):
        if qjd.shenqr.user_id.id == uid:
            raise osv.except_osv(_('Warning!'), _('You cannot approve your own request'))
            return False
        elif qjd.tians > 1:
            raise osv.except_osv(_('Warning!'), _('Insufficient access days'))
            return False
    return True

國際化翻譯配置 (.po 文件)

系統會自動提取 _() 中的字符串生成 .po 翻譯文件,開發者只需提供對應語言翻譯:

#. module: qingjia
#: code:addons/qingjia/qingjia.py:0
#, python-format
msgid "Warning!"
msgstr "提示!"

#: code:addons/qingjia/qingjia.py:0
#, python-format
msgid "You cannot approve your own request"
msgstr "您不能審批您自己的請假單"

進階:提示信息中嵌入動態變量

使用 Python 格式化字符串 %(...),變量值亦可通過 _() 翻譯:

def assistant_depmanager_proved_new(self, cr, uid, ids, context=None):
    res = self.browse(cr, uid, ids, context=context)
    result = res[0]
    raise osv.except_osv(_('Error!'), 
        _('Your uid is "%s", name is "%s", state is "%s"') % (_(uid), _('Wang Xiaobo'), _(result.state)))
    # 後續邏輯...

對應 .po 條目:

msgid "Your uid is \"%s\", name is \"%s\", state is \"%s\""
msgstr "你的用戶id是:'%s',姓名是:'%s',請假單狀態是:'%s'"

# 狀態值本身也需翻譯
msgid "wait_prove"
msgstr "待批的"

注意事項

  • osv.except_osv 會導致事務回滾,適合業務校驗失敗場景
  • 若僅需非阻塞提示,可用 wizard 或客戶端 notify 機制
  • Odoo 8+ 建議改用 openerp.exceptions.Warning 或 ValidationError
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved