odoo连接器-odoo数据拉取,Java xml-rpc实现

2023-11-09

背景

odoo数据拉取,创建,更新

参考

官方external api文档

External API — Odoo 14.0 文档

术语

ORM  odoo数据以对象模型呈现,支持one2many,many2one,many2many等对象关联关系

Model  可以看作数据表,数据类型

XML-RPC  odoo使用xml-rpc通信

设计模型

Client负责连接协议,即xml rpm协议

Connector 封装获取数据逻辑

QueryRequest 查找请求,封装查找条件参数

表达式模型

odoo的查询表达式是逆波兰表达式,连接器支持两种构建表达式方式

  1. 表达式分析器(未实现)

用户出入 (traceId=='b') and ((database=='d') or ((days>=12) or (eventType=='g')))

通用格式的表达式,分析器转换成逆波兰式

  1. 流式api构建器

流式builder构建逆波兰式

两方式比较:

分析器,通用的表达式符合开发人员的思维,但分析器递归分析消耗一定性能,可增加缓存支持,但要考虑参数化表达式

流式api性能高,需要开发人员先转为逆波兰式

接口设计

setupTestDataBase 获取demo库的属性,包括host,user,password,database(数据库名称),用于demo库拉取,demo库是动态,先通过此方法,odoo分配哪个demo库

authenticate 认证,认证的参数,host,user,password,database,连接器构造方法传入

listFieldsOfModel 获取模型的字段,包括名称,类型,说明

count 返回传入请求条件查到的记录总数

search 查找

createRecored/updateRecord/deleteRecord 增删改记录

开发指南

以下代码来源于单元测试

1. 构建连接器

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

host = "http://xxx.odoo.com" xxx申请时填写

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

        database = "xxx" 同host的域名

     password 持密码,app key两种方式,推荐使用app key,不需要发布密码,防止别人登录,一个账号可以发布多个key,用名称识别,区分谁调用接口

     其中,后3个参数封装到DatabaseParams类,即dbParams

若使用demo库,需要先用setupTestDataBase接口方法获取动态demo库的DatabaseParam

2.  认证

userID = odooConnector.authenticate();

userId用于后面查找api

3. 构建查找表达式

QueryExpBuilder eb = new QueryExpBuilder();

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

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

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

逆波兰表达式

4. 构建查找请求

QueryRequestBuilder builder = new QueryRequestBuilder();

                   builder

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

                .offset(0)

                .limit(5) // offset/limit 分页

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

                          .queryExp(eb) // 查询表达式,参考4

                          ;

QueryRequest qr = builder.build();

最后调用build方法生成查询请求 QueryRequest

5. 执行查找

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

返回map数组,应用需转换成具体业务对象

单元测试

代码包提供完整单元测试,覆盖各种场景,包括not and or嵌套和优先级

代码包提供两个测试类,OdooConnectorDemoTest和OdooConnectorTest

分表用于odoo提供的demo数据库和自建数据库

  • demo库

demo库odoo提供,不需要自己创建应用,导入数据,直接可以使用,但demo是动态,每次测试可能连不同的库,数据不能延续,速度慢

  • 自建应用/自建库

odoo可免费注册,使用14天,之后可续期,odoo提供demo数据库,导入后应用有数据可供测试

测试示例使用odoo应用的销售模块,订单子功能,选取以下字段

     /**

      * 字段

         name String 号码

         date_order datetime 单据日期

         commitment_date datetime 送货日期

         expected_date datetime 预计日期

         partner_id many2one  客户

         amount_tax float

         amount_untaxed float

         amount_total float 合计

         invoice_status 发票状态

         order_line={name=order_line, type=one2many} 订单明细

         note html 说明

      */

测试1:查找表达式测试

测试不同运算符,逻辑符场景,包括=,<>,like,not like等运算符,not and or及其嵌套,优先级

打开注释测试不同测试场景,1~7,其中6,7测试not and or嵌套和优先级

测试2:分页拉取测试

演示count方法获取总数,for循环分页拉取所有数据

代码下载(收费)

包含连接器和单元测试

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

odoo连接器-odoo数据拉取,Java xml-rpc实现 的相关文章

随机推荐

  • 信安大佬真的用kali吗?

    Kali只是现在网络安全和kali比较火的一个操作系统 下面我为大家讲讲kali系统都有那些优点 Kali介绍Kali Linux是基于Debian的Linux发行版 设计用于数字取证操作系统 面向专业的渗透测试和安全审计 集成化 预装超过
  • 【Linux】2、systemd、journalctl 超详细介绍

    文章目录 一 背景 二 系统管理 2 1 systemctl 2 1 1 State degraded 2 2 systemd analyze 2 3 hostnamectl 2 4 localectl 2 5 timedatectl 2
  • 微信小程序项目实战-电影票订票系统的毕业设计(附源码+论文)

    大家好 我是职场程序猿 感谢您阅读本文 欢迎一键三连哦 当前专栏 微信小程序毕业设计 精彩专栏推荐 安卓app毕业设计 Java毕业设计 电影票订票小程序软件 java 演示 源码下载地址 https download csdn net d
  • 电工学习笔记——示波器交直流耦合的区别

    一 概述 示波器的输入耦合方式的意思是输入信号的传输方式 耦合是指两个或两个以上的电路元件或电网络等的输入与输出之间存在紧密配合与相互影响 并通过相互作用从一侧向另一侧传输能量的现象 示波器的输入耦合属于信号直接耦合 一般有两种方式 分别是
  • spark报错:The current account does not have the permission of database

    异常信息 22 01 18 20 21 34 main WARN HiveSessionCatalog The current account does not have the permission of database adm It
  • 关于软件产品化的几点思考【转】

    关于软件产品化的几点思考 转自 汉捷咨询 国内很多软件企业尤其是行业软件企业是从开发一 二个软件项目起家的 而且项目规模和复杂度也不大 依赖其中一两个高手 他们能够在客户适度满意的状态下成功完成项目 基于以往研究 成功的主要因素是项目具备以
  • 各种语言的简写代码

    中文 zh CN 英语 en 中文 繁体 zh TW 越南语 vi 阿尔巴尼亚语 sq 阿拉伯语 ar 阿塞拜疆语 az 爱尔兰语 ga 爱沙尼亚语 et 白俄罗斯语 be 保加利亚语 bg 冰岛语 is 波兰语 pl 波斯语 fa 布尔文
  • Matlab - Solidworks 机器人建模(6)——使用rigidBodyTree构建机器人模型

    前言 本文适用对象 没有机器人的Solidworks模型自己又懒得画的童鞋 没有机器人URDF模型的童鞋 如果你在Matlab帮助里面搜索rigidBody 你大概率会看到matlab自带的例程 链接在这里 教你怎么用rigidBody建立
  • 腾讯会议——录制的视频如何正常观看(转为MP4格式)

    1 打开腾讯会议 2 点击历史会议 3 点击你录制的会议 4 点击录制详情 5 点击转码 完成这5步 即可将所保存的视频转为MP4格式 便于观看
  • 游戏开发unity插件Cinemachine系列:制作摄像机沿路径移动的动画

    可以参看 https blog csdn net zhenghongzhi6 article details 104885429
  • 初级软件测试工程师需要具备那些知识与技能

    哈喽 大家好 今天我们来聊聊如何成为一名初级软件测试工程师 需要必备那些知识和技能 什么是软件测试 软件测试的经典定义是 在规定的条件下对程序进行操作 以发现程序错误 衡量软件品质 并对其是否能满足设计要求进行评估的过程 软件测试的现实定义
  • iOS安全之ipa 包重签名的3种方法

    重签名的意义 ipa 重签名最大的用处是 不必重新打包 和配置其它第三方获取 appkey 等操作 直接重签名之后依然可以拥有这些功能 更快的发布测试或者灰度版本 方法一 终端命令 sigh resign 1 明白两个东西 想要重签名的证书
  • Unity笔记--Canvas渲染

    参考 五 UGUI源码分析之Rebuild 布局重建 图形重绘 网格重建 网格重建大体包括布局重建和图形重建两部分 canvas更新过程可分为布局 渲染两部分 共六阶段 public enum CanvasUpdate Prelayout
  • C++类和对象——引用作为函数形参

    问题 1 如果函数的形参为普通函数 那么调用函数时形参对象会被构造 函数调用结束形参对象还需要被销毁 2 为了避免形参对象这种 临时对象 的创建 我们可以将形参设计成引用 着重理解下边的代码 include
  • 牛客网--HJ1 字符串最后一个单词的长度

    文章目录 前言 一 题目内容和牛客网的链接 二 话不多说 引入代码 1 引入库 2 读入数据 总结 前言 题目的分析 一 题目内容和牛客网的链接 牛客网题目链接 二 话不多说 引入代码 1 引入库 代码如下 示例 include
  • Origin常见问题

    1 在绘图时 常常移动一个图 其他的图也跟着缩放 这是由于图层关联导致 取消即可 如下 图中所示 默认是图层2关联到了图层1 所以取消关联就可以了
  • C语言数组指针和指针数组实例演示

    一 数组指针 1 简介 数组指针就是指向数组的指针 定义方式 int p len NULL 示例 include
  • 使用RabbitMQ实现延时队列

    之前公司是一个类电商公司 会有用户下单后未支付取消订单的场景 解决方案是使用RabbitMQ的死信队列来实现一个延时队列 下单时 将订单丢进消息队列 设置过期时间 订单失效时间 然后到时候检查订单状态 如果未支付则取消订单 1 什么是死信
  • 【LeetCode】345. 反转字符串中的元音字母

    题目 给你一个字符串 s 仅反转字符串中的所有元音字母 并返回结果字符串 元音字母包括 a e i o u 且可能以大小写两种形式出现 示例 1 输入 s hello 输出 holle 示例 2 输入 s leetcode 输出 leotc
  • odoo连接器-odoo数据拉取,Java xml-rpc实现

    背景 odoo数据拉取 创建 更新 参考 官方external api文档 External API Odoo 14 0 文档 术语 ORM odoo数据以对象模型呈现 支持one2many many2one many2many等对象关联关