Publicidad

miércoles, 23 de septiembre de 2015

Ejecución de Métodos en Clases Odoo desde Web Services

Como ejecutar un Método desde un Web Services Python



Anteriormente hable un poco sobre como utilizar los Web Services de Odoo desde aplicaciones externas como Python Django, ahora quiero compartir como ejecutar un método no propio del FrameWork( Create, Unlink, Copy, Search, Write, Read), si no ejecutar un metodo de una clase X, por ejemplo el método Confirmar Pedido de Venta desde una conexión Web Service Python.

La sintaxis es la siguiente:

import xmlrpclib
dbname = "Mi_Base"
username = "admin"
pwd = "admin"
sock_common = xmlrpclib.ServerProxy('http://localhost:8069/xmlrpc/common')
uid = sock_common.login(dbname, username, pwd)
sock = xmlrpclib.ServerProxy('http://localhost:8069/xmlrpc/object')
res = sock.execute(dbname, username, pwd, 'sale.order', 'action_button_confirm', [1])
print '############ Resultado >>>>> ',res
print " Ejecución Finalizada ... "

    Como podemos observar, es necesario Indicar la Base de Datos, Usuario y Contraseña de admin o algún usuario con los permisos sobre la clase que vamos a trabajar y al final enfocarnos en los IDS del metodo a ejecutar, en el ejemplo anterior mande el registro 1 de la tabla sale_order.

2 comentarios:

  1. Tengo un problema... "[Errno 13] Permission denied" al ejecutar uid=common.authenticate(database_name,user,key,{})
    No se que podrá ser... estoy en un servidor RedHat con Httpd, creo que me falta activar algo pero no se que exactamente.

    ResponderBorrar
    Respuestas
    1. Hola Luis, al parecer modificaron el Web Service en Odoo 8 y 9, prueba con lo siguiente:

      url =
      db =
      username = 'admin'
      password =

      import xmlrpclib
      info = xmlrpclib.ServerProxy('https://demo.odoo.com/start').start()
      url, db, username, password = \
      info['host'], info['database'], info['user'], info['password']

      common = xmlrpclib.ServerProxy('{}/xmlrpc/2/common'.format(url))
      common.version()

      uid = common.authenticate(db, username, password, {})

      models = xmlrpclib.ServerProxy('{}/xmlrpc/2/object'.format(url))
      models.execute_kw(db, uid, password,
      'res.partner', 'check_access_rights',
      ['read'], {'raise_exception': False})

      Espero te sirva de ayuda la fuente de esta informacion es : https://www.odoo.com/documentation/9.0/api_integration.html

      Saludos

      Borrar