Odoo 8.0. Le nuove API.
-
Upload
davide-corio -
Category
Software
-
view
46 -
download
3
Transcript of Odoo 8.0. Le nuove API.
Principali novità● uso dei decoratori● recordsets● environment● nuovi fields● nuovo metodo per defaults● muovo metodo per onchange
EnvironmentMetodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e recordsets.
Environmentesempio di migrazione da v7 a v8
# v7def mio_metodo(self, cr, uid, ids, context=None):
[...]
# v8def mio_metodo(self):
[...]
Environment
# accedere all’utenteipdb> self.env.userres.users(1,)
# accedere a records tramite XML idipdb> self.env.ref('base.main_company')res.company(1,)
# invalidare cacheipdb> self.env.invalidate_all()
# ricalcolare campi calcolatiipdb> self.env.recomputeTrue
Environmentaltri 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
Decoratori● @api.model
from openerp import models, api
class MioModello(models.Model):[...]
@api.modeldef create(self, values):
# self è un recordset
def create(self, cr, uid, values, context=None):# self non è un recordset
Decoratori● @api.multi
from openerp import models, api
class MioModello(models.Model):[...]
@api.multidef write(self, values):
# self è un recordset
def write(self, cr, uid, ids, values, context=None):# self non è un recordset
Decoratori● @api.one
from openerp import models, api
class MioModello(models.Model):[...]
@[email protected](‘account.invoice’)def mio_metodo(self):
[...]return invoice
# ritorna un recordset di N fatture
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 = [...]
Decoratori● @api.depends
from openerp import models, api
class MioModello(models.Model):[...]iniziali = fields.Char(compute='_calcola_iniziali')
@[email protected]('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()
Decoratori● @api.constrains
from openerp import models, api[...]
class MioModello(models.Model):[...]
@[email protected]('campo1', 'campo2')def mio_metodo(self):
if self.campo1 == self.campo2: raise ValidationError("Messaggio di errore")
Recordset● istanza della classe del modello
ipdb> selfaccount.invoice(9,)ipdb> invoices = self.search([])ipdb> invoicesaccount.invoice(1, 6, 5, 4, 3, 2, 9, 7, 8)ipdb> invoices[6].numberu'SAJ/2015/0001'ipdb> invoices.__class__<class 'openerp.api.account.invoice'>ipdb>
Nuovi fields● addio _columns e _defaults (!!)
from openerp import fields
numero_intero = fields.Integer(‘Numero Intero’)numero_decimale = fields.Float(‘Numero Decimale’)testo = fields.Char(‘Testo’)testo_lungo = fields.Text(‘Testo Lungo’)
cliente = fields.Many2one(‘res.partner’, string=’Cliente’)clienti = fields.Many2many(‘res.partner’, string=’Clienti’)
righe_di_qualcosa = fields.One2many(‘modello.riga’, ‘parent_id’, string=’Righe’)
Nuovi fields● addio _columns e _defaults (!!)
from openerp import fields
# default staticotesto_con_default = fields.Char(‘Testo’, default=’testo predefinito’)
# funzione per calcolo defaulttesto_con_default = fields.Char(‘Test’, default=_una_funzione)
def _una_funzione(self):return ‘testo predefinito’
Nuovi fields● relazioni più semplici● campi calcolati più semplici
from openerp import fields
# campo relatedcampo_relazionato = fields.Char(‘Testo’, related=’altro_campo_di_testo’)
# campo calcolatocampo_calcolato = fields.Char(‘Testo’, compute=’_una_funzione’, store=True)
def _una_funzione(self):return ‘testo predefinito’
Documentazione● https://www.odoo.com/documentation/8.0/reference.html● http://odoo-new-api-guide-line.readthedocs.org/en/latest/index.html
Davide [email protected]