OpenERP XMLRPC:如何创建完整的订单?

时间:2014-11-11 20:31:49

标签: groovy openerp xml-rpc

我正在尝试使用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)

它有效地创建了一个销售订单,但没有任何订单行......对我来说有什么建议吗?我正在寻找一个小时的解决方案

2 个答案:

答案 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);
}
}