Odoo 服務器提供 XML-RPC 接口,允許外部系統創建、讀取、更新、刪除數據庫記錄。本文演示使用 Java (Apache XML-RPC Client) 連接 Odoo 8.0 並操作 res.partner 模型(客戶/合作夥伴)。
xmlrpc-common-3.1.3.jarxmlrpc-client-3.1.3.jarws-commons-util-1.0.2.jarpackage memo.by.weichen;
import java.net.URL;
import java.util.*;
import org.apache.xmlrpc.client.*;
public class OdooWSDemo {
public static final String URL = "https://127.0.0.1:8069";
public static final String DB = "demo";
public static final int USER_ID = 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);
// 1. 創建客戶
Map<String, Object> vals = new HashMap<>();
vals.put("name", "蘇州園區永旺夢樂城");
vals.put("customer", true);
Integer id = (Integer) client.execute("execute_kw", Arrays.asList(
DB, USER_ID, PASS, "res.partner", "create", Arrays.asList(vals)
));
System.out.println("Created partner ID: " + id);
// 2. 更新客戶
Map<String, Object> updateVals = new HashMap<>();
updateVals.put("name", "永旺夢樂城蘇州園區店");
client.execute("execute_kw", Arrays.asList(
DB, USER_ID, PASS, "res.partner", "write",
Arrays.asList(Arrays.asList(id), updateVals)
));
System.out.println("Updated partner name.");
// 3. 查詢客戶 (搜索 + 讀取)
List<Object> domain = Arrays.asList(Arrays.asList("name", "ilike", "永旺"));
List<Integer> ids = (List<Integer>) client.execute("execute_kw", Arrays.asList(
DB, USER_ID, PASS, "res.partner", "search", Arrays.asList(domain)
));
if (!ids.isEmpty()) {
List<String> fields = Arrays.asList("name", "phone", "email");
List<Map<String, Object>> partners = (List<Map<String, Object>>)
client.execute("execute_kw", Arrays.asList(
DB, USER_ID, PASS, "res.partner", "read",
Arrays.asList(ids, fields)
));
for (Map<String, Object> p : partners) {
System.out.println("Partner: " + p);
}
}
}
}
/xmlrpc/2/object 用於模型操作 (create, write, search, read, unlink);/xmlrpc/2/common 用於認證 (login, version)。[db, uid, password, model, method, args..., kwargs?]。[["field", "operator", "value"], ...],運算符包括 =, !=, >, <, like, ilike, in, not in, child_of 等。Map ↔ Odoo 記錄字典,List ↔ 陣列/列表,基本類型自動轉換。search 支持 offset, limit, order 關鍵字參數。fields 可獲取關聯記錄的 ID 或完整對象(取決於字段類型)。XmlRpcException,需妥善捕獲。