Relax NG 在Odoo中的應用

2022-09-15 13:09:09 字數 2536 閱讀 5208

想必有些同學一定會奇怪,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這一利器。下面和初學者分享一下這個軟體的使用。從無線特性看,電磁波的發射方是沒法限制接收方的,只要在覆蓋範圍內,任何人都可以用相關裝置收到訊號,也可以...