【问题标题】:Update multiple rows at one time with Odoo Xmlrpc使用 Odoo Xmlrpc 一次更新多行
【发布时间】:2019-10-23 14:47:07
【问题描述】:

我想使用 Odoo Xmlrpc 更新“sale.order.line”产品的多条记录

for (let i = 0; i <sell.products.length; i ++) {                
          var inParams = [];
          inParams.push ([value1 [i]]);  //id to update
          inParams.push ({
            'name': sale.products [i] .name,
            'product_uom_qty': sales.products [i] .product_uom_qty,
            'price_unit': sales.products [i] .price_unit,
            'product_id': sales.products [i] .product_id
          });
          var params = [];
          params.push (inParams);
          db.execute_kw ('sale.order.line', 'write', params, function (err, value) {
            if (err) {
              return console.log (err);
            }
            return console.log ('Result2:', value);
          });
        } 

这是错误: raise psycopg2.OperationalError (msg) \ npsycopg2.OperationalError: Unable to use a closed cursor.

我使用的是 Odoo 版本 12 提前谢谢你

【问题讨论】:

  • 您好,Daya,需要更多上下文来帮助您。
  • 你好@jo541,谢谢你的回答我用angular作为前端,expressjs作为后端,odoo作为数据库进行库存管理。链接 Odoo 和 expressJs;我使用 Odoo-xmlrpc 在销售模块修改交货单的情况下:我想恢复所有产品然后在 Odoo 中编辑它们的问题我不能同时更改它们。
  • Odoo 的 write 方法只能更改相同值的多条记录。示例([1, 2, 3, 4],{'foo':'foo'})。

标签: javascript odoo odoo-12


【解决方案1】:

谢谢你,jo541

我通过将 odoo xmlrpc 更改为 odoo 找到了解决方案,而且效果很好,代码如下:

`for (let i = 0; i <sale.products.length; i ++) {
     var params = {
               'name': 'Product #' + sale.products[i].product_id,
               'product_uom_qty': sale.products[i].product_uom_qty,
               'price_unit': sale.products[i].price_unit,
               'product_id': sale.products[i].product_id
     }
     odoo2.update ("sale.order.line", sale.products [i].id, params, function (err, value) {
               if (err) {
                 return console.log (err);
               }
               console.log (value);

    

     });
    };`

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,原因是我的 Odoo 服务器无法处理并发连接。

    我已经通过使用互斥锁/锁来限制对 API 的并发访问解决了这个问题,现在一切正常:-)

    为了方便,这里有一些代码:

    import * as Odoo from "odoo-xmlrpc";
    import AwaitLock from 'await-lock';
    
    var odoo = new Odoo({
        url: "odooserver/xmlrpc/2",
        db: "databasename",
        username: "username",
        password: "password"
    });
    
    var lock = new AwaitLock();
    
    const callOdoo = async (model, method, params) => {
      return new Promise(async (resolve, reject) => {
        odoo.connect(async (err) => {
          if (err) reject(new Error(err));
          await lock.acquireAsync();
          odoo.execute_kw(model, method, params, (err, value) => {
            lock.release();
            if (err) {
              reject(new Error(err));
            }
            console.log(value);
            resolve(value);
          });
        });
      });
    }
    
    async function getStockFromOdoo() {
      let items = await callOdoo(
        'product.product',
        'search_read',
        [
          [[['x_volume', '>=', '0.1']]],
          {'fields': ['x_beername', 'qty_available', 'x_volume', 'name', 'default_code']}
        ]
      );
      // Do something with items here.
    }
    
    async function getCustomers() {
      let items = await callOdoo(
        'res.partner',
        'search_read',
        [
          [[['is_company', '=', true],['customer', '=', true]]],
          {'fields': ['name']}
        ]);
      // Do something with items here
    }
    
    async function createSaleOrder(order){
      let orderId = await callOdoo(
        'sale.order',
        'create',
        [[{ partner_id: order.customer.id }]]
      );
      order.orders.forEach(async (line) => {
        await callOdoo(
          'sale.order.line',
          'create',
          [[{'order_id': orderId, 'product_id': line.beer.id, 'product_uom_qty': line.quantity}]]);
      });
      // do something with it here.
    }
    

    【讨论】:

      猜你喜欢
      • 2021-02-15
      • 2014-09-15
      • 1970-01-01
      • 2016-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-19
      相关资源
      最近更新 更多