我正在尝试使用openERP XMLRPC创建一个完整的订单(带有订单行)。我有这个:
order = [
'shop_id': 1,
'state': 'draft',
'date_order': '2013-09-01',
'user_id': 1,
'partner_id': 7,
'partner_invoice_id': 1,
'partner_order_id': 1,
'partner_shipping_id': 1,
'picking_policy': 'direct',
'order_policy': 'manual',
'pricelist_id': 1,
'note': 'note',
'lines': [
[
'qty': 1,
'product_id': 1,
]
],
]
order_id = openerp.execute(dbname, uid, pwd, 'sale.order', 'create', order)
它有效地创建了一个销售订单,但没有任何订单行......对我来说有什么建议吗?我正在寻找一个小时的解决方案
答案 0 :(得分:2)
首先,引用sale.order.line的sale2.order的one2many字段是order_lines,而不是行。
其次,sale.order.line上标有“数量”的字段是product_uom_qty,而不是数量。
第三,有必要指定要对one2many字段引用的模型执行的函数。您想在sale.order.line上创建记录。 (例如,您不希望将现有销售订单行链接到新订单。)
我不熟悉groovy语法。在任何情况下,ORM方法都应该接收one2many字段值的元组列表。每个元组对应一个订单行,元组的第一个项目标识要在sale.order.line上执行的功能。在创建的情况下,元组的第二项是多余的,第三项在相关表上定义创建的记录。
在python中你会这样做:
order = {
'shop_id': 1,
'state': 'draft',
'date_order': '2013-09-01',
'user_id': 1,
'partner_id': 7,
'partner_invoice_id': 1,
'partner_order_id': 1,
'partner_shipping_id': 1,
'picking_policy': 'direct',
'order_policy': 'manual',
'pricelist_id': 1,
'note': 'note',
'order_line': [
(0, 0, {
'product_uom_qty': 1,
'product_id': 1,
}),
],
}
答案 1 :(得分:0)
此代码是如何在odoo中获取数据库的数量和名称的基础,只需为其创建正确的包。您需要将以下库添加到Java开发环境中 1.xmlrpc-client 2.xmlrpc-common 3.xmlrpc-server 4.ws-commons-util 5.xmlrpc 你会发现它们here一旦你理解了这一点,你将会弄清楚如何做其余的事情
public class odooServices {
private Object[] params;
//private Object[] params;
public Vector<String> getDatabaseList(String host, int port){
Vector<String> res = null;
try {
XmlRpcClient xmlrpcDb = new XmlRpcClient();
XmlRpcClientConfigImpl xmlrpcConfigDb = new XmlRpcClientConfigImpl();
xmlrpcConfigDb.setEnabledForExtensions(true);
try {
xmlrpcConfigDb.setServerURL(new URL("http",host,port,"/xmlrpc/db"));
} catch (MalformedURLException ex) {
Logger.getLogger(odooServices.class.getName()).log(Level.SEVERE, null, ex);
}
xmlrpcDb.setConfig(xmlrpcConfigDb);
//Retrieve databases
Vector<Object> params = new Vector<Object>();
Object result = xmlrpcDb.execute("list", params);
Object[] a = (Object[]) result;
res = new Vector<String>();
for (int i = 0; i < a.length; i++) {
if (a[i] instanceof String)
{
res.addElement((String)a[i]);
System.out.println((String)a[i]);
}
}
} catch (XmlRpcException ex) {
Logger.getLogger(odooServices.class.getName()).log(Level.SEVERE, null, ex);
}
return res;
}
public int Connect(String host, int port, String tinydb, String login, String password){
try {
XmlRpcClient xmlrpcLogin = new XmlRpcClient();
XmlRpcClientConfigImpl xmlrpcConfigLogin = new XmlRpcClientConfigImpl();
xmlrpcConfigLogin.setEnabledForExtensions(true);
xmlrpcConfigLogin.setServerURL(new URL("http",host,port,"/xmlrpc/common"));
xmlrpcLogin.setConfig(xmlrpcConfigLogin);
//Connect
params = new Object[] {tinydb,login,password};
Object id = xmlrpcLogin.execute("login", params);
System.out.println(id);
if (id instanceof Integer)
return (Integer)id;
return -1;
} catch (XmlRpcException ex) {
Logger.getLogger(odooServices.class.getName()).log(Level.SEVERE, null, ex);
}
catch (MalformedURLException ex)
{
Logger.getLogger(odooServices.class.getName()).log(Level.SEVERE, null, ex);
}
return 0;
}
}
package odoo.webservice;
public class OdooWebservice extends javax.swing.JFrame{
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
odooServices odoo = new odooServices();
odoo.getDatabaseList("127.0.0.1", 8069);
}
}