Odoo(OpenERP)开发实践:通过XML-RPC接口訪问Odoo数据库
Odoo(OpenERP)server支持通过XML-RPC接口訪问、操作数据库,基于此可实现与其它系统的交互与集成。
本文是使用Java通过XMLRPC接口操作Odoo数据库的简单演示样例。本例引用的jar包包含xmlrpc-common-3.1.3.jar, xmlrpc-client-3.1.3.jar和ws-commons-util-1.0.2.jar。如须要,可点击这里下载。
package memo.by.weichen; import java.net.URL;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; /**
*
* 通过XML-RPC接口訪问Odoo数据库
* Test@Odoo 8.0
* by WeiChen
*
*/
public class OdooWSDemo {
public static final String URL = "http://127.0.0.1:8069";
public static final String DB = "demo";
public static final int USERID = 1;
public static final String PASS = "demo"; public static void main(String[] args) throws Exception{
XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
XmlRpcClient client = new XmlRpcClient();
config.setServerURL(new URL(String.format("%s/xmlrpc/2/object", URL)));
client.setConfig(config); // 新建客户
Integer id = (Integer) client.execute(
"execute_kw", Arrays.asList(
DB, USERID, PASS, "res.partner", "create",
Arrays.asList(new HashMap() {
{
put("name", "苏州园区永旺梦乐城");
put("customer", Boolean.TRUE);
}
})));
// 更新客户
client.execute("execute_kw", Arrays.asList(
DB, USERID, PASS,
"res.partner", "write",
Arrays.asList(
Arrays.asList(id),
new HashMap() {{ put("name", "永旺梦乐城苏州园区店"); }}
)
));
// 查找客户
List<Object> partners = Arrays.asList((Object[])client.execute("execute_kw", Arrays.asList(
DB, USERID, PASS,
"res.partner", "name_get",
Arrays.asList(Arrays.asList(id))
)));
if(partners!=null&&partners.size()>0){// partners格式: [[id, name]]
Object[] partner = (Object[])partners.get(0);
if(partner.length==2)
System.out.println("客户名: "+partner[1]);
}
// 删除客户
client.execute("execute_kw", Arrays.asList(
DB, USERID, PASS,
"res.partner", "unlink",
Arrays.asList(Arrays.asList(id)))); // 客户列表
List<Object> customers = Arrays.asList((Object[]) client.execute(
"execute_kw", Arrays.asList(
DB, USERID, PASS, "res.partner", "search_read",
Arrays.asList(Arrays.asList(
// 设置查询条件
// Arrays.asList("is_company", "=", true),
Arrays.asList("customer", "=", true))),
new HashMap() {
{// 查询name字段, 限定最多返回100条记录
put("fields", Arrays.asList("name"));
put("limit", 100);
}
}))); System.out.println("**********客户列表**********");
for (int i=0;i<customers.size();i++){
Map customer = (Map)customers.get(i);
String name = (String)customer.get("name");
System.out.println(name);
}
System.out.println("****************************");
}
}
參考资料:
[1] https://www.odoo.com/documentation/8.0/api_integration.html
Odoo(OpenERP)开发实践:通过XML-RPC接口訪问Odoo数据库的更多相关文章
- Odoo(OpenERP)开发实践:通过XML-RPC接口访问Odoo数据库
Odoo(OpenERP)服务器支持通过XML-RPC接口访问.操作数据库,基于此可实现与其他系统的交互与集成. 本文是使用Java通过XMLRPC接口操作Odoo数据库的简单示例.本例引用的jar包 ...
- Odoo(OpenERP)开发实践:数据模型学习
作者:苏州-微尘 Odoo中,在Python类里定义的模型及字段信息,可在系统中直接查看.为用户开启技术特性权限后,就可以通过菜单 [设置->技术->数据结构->模型] 进入列表视图 ...
- Windows server2008 搭建ASP接口訪问连接oracle数据库全过程记录
真的是太不easy了,曾经的时候在window server 2003上面搭建了一套asp+oracle的接口系统.就费了好大的劲儿,事实上那会迷迷瞪瞪的也不知道怎么的就弄好了,也懒得管了.OK,从昨 ...
- Odoo(OpenERP)应用实践:代发货管理
原文地址:http://blog.csdn.net/wangnan537/article/details/47091857 有些分销商,在买家下单后才向供应商采购产品,并由供应商直接发货给客户.这种模 ...
- 升讯威微信营销系统开发实践:微信接口的 .NET 封装
GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...
- 前端开发工程师 - 05.产品前端架构 - 协作流程 & 接口设计 & 版本管理 & 技术选型 &开发实践
05.产品前端架构 第1章--协作流程 WEB系统 角色定义 协作流程 职责说明 第2章--接口设计 概述 接口规范 规范应用 本地开发 第3章--版本管理 见 Java开发工程师(Web方向) - ...
- WebAPI接口开发实践
背景 在团队两年多陆续负责了几个项目的开发上线已经代码的review,特别是对老项目的重构过程中,发现之前的API设计是没有任何规范和约定的,不同的开发同学有不同的习惯,因此需要一套规范去约定,现在分 ...
- 谈谈如何使用Netty开发实现高性能的RPC服务器
RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络,从远程计算机程序上请求服务,而不必了解底层网络技术的协议.说的再直白一点,就是客户端在不必知道 ...
- Netty开发实现高性能的RPC服务器
Netty开发实现高性能的RPC服务器 RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络,从远程计算机程序上请求服务,而不必了解底层网络技术的协 ...
随机推荐
- windows :Tomcat免安装版环境变量配置 + jdk配置
1. 下载后解压,我解压的目录为:D:\Tomcat\apache-tomcat-9.0.1-windows-x64 2. 安装jdk和jre, 并配置环境变量: 2.1 用户变量新建JAVA_H ...
- Leetcode with Python
1. Two Sum Given an array of integers, return indices of the two numbers such that they add up to a ...
- ThinkPHP5杂技(一)
Thinkphp5 assign 传递 " 时 ,前台收到的是 " 和ThinkPHP3.2不一样,3.2收到的是 ”,传递给js时 用的data.replace(new RegE ...
- linux下编译静态库openssl
先编译zlib cmake . -DCMAKE_INSTALL_PREFIX=/depends make make install 然后编译openssl ./config zlib no-rc5 n ...
- Dinic 算法钩沉
最初是从<挑战程序设计竞赛>上了解到 Dinic 算法的.其中对于 Dinic 算法中的关键词--分层图(layered network,也称『层次图』)的引入的解释如下: 因为最短增广路 ...
- POJ——2236Wireless Network(暴力并查集)
Wireless Network Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 22107 Accepted: 928 ...
- 刷题总结——(一道很妙的题)Resistance(ssoj 欧几里得 )
题解: 题目背景 151006 T1 题目描述 Picks 喜欢电路.这天他在研究元电路的时候,需要一个阻值为 (p/q)Ω 的电阻,然而他家中只有一大堆电阻为 1Ω 电阻.由于技术问题,Picks ...
- 【BZOJ1103】大都市meg(DFS序,树状数组)
题意:有一颗树,1号点为根,保证编号小的点深度较小,初始状态每条边都没有被标记,要求实现两个操作在线: A:将连接x,y的边标记 W:查询从1到x的路径上有多少条边未被标记 n<=2*10^5 ...
- 50深入理解C指针之---指针与别名
一.size_t:用于安全表示长度,所有平台和系统都会解析成自己对应的长度 1.定义:size_t类型表示C中任何对象所能表示的最大长度,是个无符号整数:常常定义在stdio.h或stdlib.h中 ...
- C++ 构造函数 析构函数 虚函数
C++:构造函数和析构函数能否为虚函数? 简单回答是:构造函数不能为虚函数,而析构函数可以且常常是虚函数. (1) 构造函数不能为虚函数 让我们来看看大牛C++之父 Bjarne Stroustrup ...