7. Environment
# accedere all’utente
ipdb> self.env.user
res.users(1,)
# accedere a records tramite XML id
ipdb> self.env.ref('base.main_company')
res.company(1,)
# invalidare cache
ipdb> self.env.invalidate_all()
# ricalcolare campi calcolati
ipdb> self.env.recompute
True
8. Environment
altri metodi utili (eg: sudo())
https://github.com/odoo/odoo/blob/8.0/openerp/api.py
https://www.odoo.com/documentation/8.0/reference/orm.html
http://odoo-new-api-guide-line.readthedocs.org/en/latest/environment.html
9. Decoratori
● @api.model
from openerp import models, api
class MioModello(models.Model):
[...]
@api.model
def create(self, values):
# self è un recordset
def create(self, cr, uid, values, context=None):
# self non è un recordset
10. Decoratori
● @api.multi
from openerp import models, api
class MioModello(models.Model):
[...]
@api.multi
def write(self, values):
# self è un recordset
def write(self, cr, uid, ids, values, context=None):
# self non è un recordset
11. Decoratori
● @api.one
from openerp import models, api
class MioModello(models.Model):
[...]
@api.multi
@api.returns(‘account.invoice’)
def mio_metodo(self):
[...]
return invoice
# ritorna un recordset di N fatture
12. Decoratori
● @api.onchange
from openerp import models, api
class MioModello(models.Model):
[...]
# invoca mio_metodo se cambiano nome e cognome
@api.onchange('nome', 'cognome')
def mio_metodo(self):
[...]
self.iniziali = [...]
13. Decoratori
● @api.depends
from openerp import models, api
class MioModello(models.Model):
[...]
iniziali = fields.Char(compute='_calcola_iniziali')
@api.one
@api.depends('partner_id.name', 'partner_id.surname’)
def _calcola_iniziali(self):
[...]
iniziali = self.partner_id.name[0] + self.partner_id.surname[0]
self.iniziali = iniziali.upper()
14. Decoratori
● @api.constrains
from openerp import models, api
[...]
class MioModello(models.Model):
[...]
@api.one
@api.constrains('campo1', 'campo2')
def mio_metodo(self):
if self.campo1 == self.campo2:
raise ValidationError("Messaggio di errore")
15. Recordset
● istanza della classe del modello
ipdb> self
account.invoice(9,)
ipdb> invoices = self.search([])
ipdb> invoices
account.invoice(1, 6, 5, 4, 3, 2, 9, 7, 8)
ipdb> invoices[6].number
u'SAJ/2015/0001'
ipdb> invoices.__class__
<class 'openerp.api.account.invoice'>
ipdb>