2015-04-18 127 views
3

如何在openerp中顯示消息框?我是用提高這樣的:Openerp顯示消息對話框

raise osv.except_osv(_("Warning!"), _("Error")) 

但這停止執行其他的代碼,我只是想顯示一個信息消息框。

+0

如果你不想破壞代碼,你需要依靠嚮導來彈出警告。 –

回答

0

一種方式在我腦海...你可以使用一些on_change方法會返回字典是這樣的:

return { 
     'warning': { 
       'title':'Message title!', 
       'message':'Your message text goes here!' 
       } 
     } 
+0

這需要用戶實際改變某些東西,我也可以使用_constraint來觸發它,但這也需要改變。例如,我需要通過打開客戶來顯示消息。 – RandomPerson

+0

然後我建議你在模型中添加一些虛擬字段(boolean或char)(例如,我們稱之爲「show_message」)。將該字段添加到_defaults = {'show_message':True}並將on_change方法綁定到該字段。這樣,當用戶打開表單視圖時,將運行on_change方法並顯示消息。 – gordian1983

+0

這不會起作用on_change要求用戶更改該特定字段。以代碼方式操作它不會觸發on_change – RandomPerson

2

提高了osv.except_osv做了幾件事情:

1)中斷目前的處理(畢竟它是一個python例外)。

2)導致OpenERP回滾當前數據庫事務。

3)導致的OpenERP顯示一個對話框,用戶,而不是傾銷堆棧跟蹤,並給人一種「壞的東西發生」消息的用戶。

對於平變化,我們可以回到

warning = { 
     'title': 'Warning!', 
     'message' : 'Your message.' 
    } 
return {'warning': warning} 

但它不會對其他像按鈕的工作。

對於你的情況,你可以做

cr.commit() 
raise osv.except_osv(_("Warning!"), _("Error")) 

但在商業交易調用cr.commit明確會導致嚴重的問題。

另一種方式是你可以返回一個帶有警告信息的嚮導。這是大多數人使用的。

return { 
      'name': 'Provide your popup window name', 
      'view_type': 'form', 
      'view_mode': 'form', 
      'view_id': [res and res[1] or False], 
      'res_model': 'your.popup.model.name', 
      'context': "{}", 
      'type': 'ir.actions.act_window', 
      'nodestroy': True, 
      'target': 'new', 
      'res_id': record_id or False,##please replace record_id and provide the id of the record to be opened 
     }