想必有些同學一定會奇怪,odoo是如何將模組中的xml中的諸如record、menuitem是如何被組織和定義的,以及各種field的各種屬性究竟有哪些,今天,我們就來一**竟。
relax ng:「可擴充套件標記語言的下一代正規語言」是一種基於語法的可擴充套件標記語言模式語言,可用於描述、定義和限制 可擴充套件標記語言(標準通用標記語言的子集)詞彙表。簡單地說 relax ng是解釋xml如何被定義的一套xml。odoo就是通過定義了一套rng檔案定義了自己一套xml框架結構,在模組被安裝或者公升級的時候將其解析成與之相對應的內建物件,儲存在資料庫中。關於relax ng的語法規則,可以參考relax ng的官網。
解析xml檔案的**在convert.py的convert_xml_import方法中:
def convert_xml_import(cr, module, xmlfile, idref=none, mode='init
', noupdate=false, report=none):
doc =etree.parse(xmlfile)
relaxng =etree.relaxng(
etree.parse(os.path.join(config[
'root_path
'],'
import_xml.rng
')))
try:
relaxng.assert_(doc)
except
exception:
_logger.error(
'the xml file does not fit the required schema !')
_logger.error(misc.ustr(relaxng.error_log.last_error))
raise
if idref is
none:
idref={}
obj = xml_import(cr, module, idref, mode, report=report, noupdate=noupdate)
obj.parse(doc.getroot(), mode=mode)
return true
而在xml_import方法中,處理了我們常見的各種節點:menuitem,record,template,url等等。
通過對rng檔案的解讀,我們可以總結odoo xml的架構如下:
頂級節點:openerp
二級節點:元素(可多個):data
屬性 (可選): noupdate、context
**節點:元素(可多個):menuitem、record、template、delete、act_window、url、assert、report、workflow、function、ir_set
常見節點屬性:
menuitem:id(必填),name,parent,action,sequence,groups,icon,web_icon,web_icon_hover,string
record:id(可選),forcecreate(可選),model,context(可選),
子節點:field(可多個)
template:id,t-name,name,forecreate,context,priority,inherit_id,primary,groups,active,customzie_show,page
delete:model,id,search
act_window:id,name,res_model,domain,src_model,context,view_id,view_type,view_mode,multi,target,key2,groups,limit,usage,auto_refresh
url:id,name,url,target
assert:model,search,count,string,id,context,severity,test
report:id,string,model,name,report_type,multi,menu,keyword,rml,file,sxw,xml,xsl,parser,auto,header,webkit_header,attachment,attachment_use,groups,usage
workflow:model,action,uid,context,ref,value
function:model,name,id,context,eval
ir_set:子節點:field
同樣地,在view中也同樣用到了relax ng組織定義了view的架構,具體參見我的另一篇文章:
odoo 在Linux寶塔中安裝odoo
之前用群暉nas測試了一段時間,由於群暉配置比較低,最後決定換到暫時閒置的伺服器上,nas的配置可檢視 群暉nas中通過docker執行odoo並安裝第三方模組。之前也在伺服器上配置過,見文章 在寶塔面板使用docker安裝odoo社群版及第三方模組,配置和在群暉中差不多,這次為了對映埠和配置檔案,...
在odoo中新增日誌
在優化系統的時候,我們經常會發現一些操作,總有那麼一些按鈕的反應速度是慢於平均值的。甚至時間過長而影響業務的處理,我們如何定位這個方法中,具體是執行了那乙個方法而導致了速度緩慢,或者說哪乙個方法的速度需要優化,我們需要著重去對待它。這個時候我覺得將此方法下分為幾個模組,然後在日誌中列印出他們的執行時...
omnipeeker在wifi分析中的應用
記得大學學習tcp ip協議時,tcpdump給了很多幫助,最近需要好好了解一下802.11x mac層,在業內高手的推薦下發現了omnipeeker這一利器。下面和初學者分享一下這個軟體的使用。從無線特性看,電磁波的發射方是沒法限制接收方的,只要在覆蓋範圍內,任何人都可以用相關裝置收到訊號,也可以...