Frequently Asked Questions (FAQ) (New in version 0.8)

Connect to an OpenERP Online (SaaS) instance

First, you have to connect on your OpenERP instance, and set a password for your user account in order to active the XML-RPC protocol.

Then, just use the xmlrpc+ssl protocol with the port 443:

>>> import oerplib
>>> oerp = oerplib.OERP('', protocol='xmlrpc+ssl', port=443)
>>> oerp.db.server_version()

Update a record with an on_change method

OERPLib does not provide helpers for such methods currently. A call to an on_change method intend to be executed from a view and there is no support for that (not yet?) such as fill a form, validate it, etc...

But you can emulate an on_change by writing your own function, for instance:

def on_change(oerp, record, method, *args):
    """Update `record` with the result of the on_change `method`"""
    res = oerp.execute(record.__osv__['name'], method, *args)
    for k, v in res['value'].iteritems():
        setattr(record, k, v)
    return record

And call it on a record with the desired method and its parameters:

>>> order = oerp.get('sale.order').browse(42)
>>> order = on_change(oerp, order, 'product_id_change', ARGS...)
>>> oerp.write_record(order)  # Save your record

To know what parameters to send to the on_change, the scan_on_change method can help you.

Some OSV methods does not accept the context parameter

Since OpenERP 6.1, the context parameter can be sent automatically for each call to an OSV/Model method (this is the default behaviour since OERPLib 0.7). But on the side of the OpenERP server, some OSV methods have no context parameter, and OERPLib has no way to guess it, which results in an nasty exception. So you have to disable temporarily this behaviour by yourself by setting the auto_context option to False:

>>> oerp.config['auto_context'] = False  # 'get()' method of 'ir.sequence' does not support the context parameter
>>> next_seq = oerp.get('ir.sequence').get('stock.lot.serial')
>>> oerp.config['auto_context'] = True  # Restore the configuration

Change the behaviour of a script according to the version of OpenERP

You can compare versions of OpenERP servers with the v function applied on the OERP.version property, for instance:

import oerplib
from import v

for session in oerplib.OERP.list():
    oerp = oerplib.OERP.load(session)
    if v(oerp.version) <= v('6.1'):
        pass  # do some stuff
        pass  # do something else