odoo connector魂奥,數(shù)據(jù)拉取,Java xml-rpc實現(xiàn)

背景

odoo數(shù)據(jù)拉取易猫,創(chuàng)建耻煤,更新

參考

官方external api文檔

https://www.odoo.com/documentation/14.0/zh_CN/developer/misc/api/odoo.html

術(shù)語

ORM?odoo數(shù)據(jù)以對象模型呈現(xiàn),支持one2many擦囊,many2one违霞,many2many等對象關(guān)聯(lián)關(guān)系

Model?可以看作數(shù)據(jù)表,數(shù)據(jù)類型

XML-RPC?odoo使用xml-rpc通信

設(shè)計模型


Client?封裝連接協(xié)議瞬场,即xml rpm協(xié)議

Connector?封裝獲取數(shù)據(jù)邏輯

QueryRequest?查找請求买鸽,封裝查找條件參數(shù)

表達式模型


odoo的查詢表達式是逆波蘭表達式,連接器支持兩種構(gòu)建表達式方式

表達式分析器(未實現(xiàn))

接收通用表達式

(traceId=='b') and((database=='d') or ((days>=12) or (eventType=='g')))

分析器轉(zhuǎn)換成逆波蘭式

流式api構(gòu)建器

流式builder構(gòu)建逆波蘭式


兩種方式比較:

分析器贯被,通用的表達式符合開發(fā)人員的思維眼五,但分析器遞歸分析消耗一定性能妆艘,可增加緩存支持,但要考慮參數(shù)化表達式

流式api性能高看幼,需要開發(fā)人員先轉(zhuǎn)為逆波蘭式

接口設(shè)計


setupTestDataBase 獲取demo庫的屬性批旺,包括host,user诵姜,password汽煮,database(數(shù)據(jù)庫名稱),用于demo庫拉取棚唆,demo庫是動態(tài)暇赤,先通過此方法,odoo分配哪個demo庫

authenticate 認證宵凌,認證的參數(shù)鞋囊,host,user瞎惫,password溜腐,database,連接器構(gòu)造方法傳入

listFieldsOfModel 獲取模型的字段瓜喇,包括名稱挺益,類型,說明

count 返回傳入請求條件查到的記錄總數(shù)

search 查找

createRecored/updateRecord/deleteRecord 增刪改記錄

開發(fā)指南

以下代碼來源于單元測試

構(gòu)建連接器

odooConnector = new Connector(host, dbParams, false);

host = "http://xxx.odoo.com" xxx申請時填寫

??????? user = "???@?????.com" 郵箱地址

??????? database ="xxx" 同host的域名

???? password 支持密碼乘寒,app key兩種方式矩肩,推薦使用app key,不需要發(fā)布密碼肃续,防止別人登錄,一個賬號可以發(fā)布多個key叉袍,用名稱識別始锚,區(qū)分誰調(diào)用接口

???? 其中,后3個參數(shù)封裝到DatabaseParams類喳逛,即dbParams

若使用demo庫瞧捌,需要先用setupTestDataBase接口方法獲取動態(tài)demo庫的DatabaseParams

認證

userID = odooConnector.authenticate();

userId用于后面查找api

構(gòu)建查找表達式

QueryExpBuilder eb = newQueryExpBuilder();

eb.or().and().left("amount_total",Operator.GT, 1000)

??????????????? .right("amount_total",Operator.LT, 2000)

??????????????? .right("amount_total",Operator.LT, 1000)

逆波蘭表達式

構(gòu)建查找請求

QueryRequestBuilderbuilder=newQueryRequestBuilder();

?????????????????? builder

?????????????????? ?????? .sort("date_order",?SortOrder.DESC)? //排序

??????????????? .offset(0)

??????????????? .limit(5) // offset/limit分頁, 也可使用page

?????????????????? ?????? .requestFileds(…)?//請求返回的字段

?????????????????? ?????? .queryExp(eb)//查詢表達式,參考4

?????????????????? ?????? ;

QueryRequest qr = builder.build();

最后調(diào)用build方法生成查詢請求QueryRequest

執(zhí)行查找

Object[]orders=odooConnector.search(orderModel,?qr);

返回map數(shù)組润文,應(yīng)用需轉(zhuǎn)換成具體業(yè)務(wù)對象

單元測試

代碼包提供完整單元測試姐呐,覆蓋各種場景,包括not /and/or嵌套和優(yōu)先級

代碼包提供兩個測試類典蝌,OdooConnectorDemoTest和OdooConnectorTest

分別用于odoo提供的demo數(shù)據(jù)庫和自建數(shù)據(jù)庫

demo庫

odoo提供曙砂,不需要自己創(chuàng)建應(yīng)用和導入數(shù)據(jù),直接可以使用骏掀,但demo是動態(tài)鸠澈,每次測試可能連不同的庫柱告,數(shù)據(jù)不能延續(xù),速度慢

自建應(yīng)用/自建庫

odoo可免費注冊笑陈,使用14天际度,之后可續(xù)期,odoo提供demo數(shù)據(jù)庫涵妥,導入后應(yīng)用有數(shù)據(jù)可供測試

測試示例使用odoo應(yīng)用的銷售模塊乖菱,訂單子功能,選取以下字段

???? /**

???? ?*字段

???????? name String號碼

???????? date_orderdatetime單據(jù)日期

???????? commitment_datedatetime送貨日期

???????? expected_datedatetime預計日期

???????? partner_id many2one? 客戶

???????? amount_tax float

???????? amount_untaxed float

???????? amount_total float合計

???????? invoice_status發(fā)票狀態(tài)

???????? order_line={name=order_line,type=one2many}訂單明細

???????? notehtml說明

???? ?*/

測試1:查找表達式測試

測試不同運算符蓬网,邏輯符場景窒所,包括=,<>拳缠,like墩新,not like等運算符,not and or及其嵌套窟坐,優(yōu)先級

打開注釋測試不同測試場景海渊,1~7,其中6哲鸳,7測試not and or嵌套和優(yōu)先級

測試2:分頁拉取測試

演示count方法獲取總數(shù)臣疑,for循環(huán)分頁拉取所有數(shù)據(jù)


代碼下載(收費)?

包含連接器和單元測試

https://download.csdn.net/download/szlhj/36717794

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市徙菠,隨后出現(xiàn)的幾起案子讯沈,更是在濱河造成了極大的恐慌,老刑警劉巖婿奔,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缺狠,死亡現(xiàn)場離奇詭異,居然都是意外死亡萍摊,警方通過查閱死者的電腦和手機挤茄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冰木,“玉大人穷劈,你說我怎么就攤上這事∮环校” “怎么了歇终?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長逼龟。 經(jīng)常有香客問我评凝,道長,這世上最難降的妖魔是什么腺律? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任肥哎,我火速辦了婚禮辽俗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘篡诽。我一直安慰自己崖飘,他們只是感情好,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布杈女。 她就那樣靜靜地躺著朱浴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪达椰。 梳的紋絲不亂的頭發(fā)上翰蠢,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機與錄音啰劲,去河邊找鬼梁沧。 笑死,一個胖子當著我的面吹牛蝇裤,可吹牛的內(nèi)容都是我干的廷支。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼栓辜,長吁一口氣:“原來是場噩夢啊……” “哼恋拍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起藕甩,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤施敢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后狭莱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體僵娃,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年腋妙,在試婚紗的時候發(fā)現(xiàn)自己被綠了悯许。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡辉阶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瘩扼,到底是詐尸還是另有隱情谆甜,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布集绰,位于F島的核電站规辱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏栽燕。R本人自食惡果不足惜罕袋,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一改淑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浴讯,春花似錦朵夏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奈籽,卻和暖如春饥侵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背衣屏。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工躏升, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人狼忱。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓膨疏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親藕赞。 傳聞我的和親對象是個殘疾皇子成肘,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

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