09 api v8 for dummies
TRANSCRIPT
Agile Business Group - www.agilebg.com - [email protected]
API V8 for Dummies
Guida rapida per apprendisti programmatori di Odoo V8
Nicola MalcontentiAgile Business Group
Agile Business Group - www.agilebg.com - [email protected]
Agile Business Group & Odoo V8
Swiss Localisation - Bank Payment File (DTA) Italian Localisation - VAT Registries Account Move Template VAT on payment
Agile Business Group - www.agilebg.com - [email protected]
Obbiettivi delle nuove API
Maggior facilità di scrittura e lettura del codice Python
Creazione di un modulo più python-oriented:● I felds diventano dei descrittori delle classi● Programmazione più object oriented
Per agevolare il porting dei vari moduli le api V7 e V8 sono totalmente compatibili
Agile Business Group - www.agilebg.com - [email protected]
Record e RecordSet
Rimpiazza i concetti di browse_record e browse_record_list
Un RecordSet è una collection RecordSet sono le istanze di ogni classe Un Record è un RecordSet!
Agile Business Group - www.agilebg.com - [email protected]
Record e RecordSet
si può accedere e modifcare i feld del record in maniera diretta:
I metodi del modulo possono essere invocati direttamente su di un RecordSet
partner.name = “My_Partner”print partner.nameMy_Partner
#Chiamata di metododef my_fun(self):
…some stuff…
def other_stuff(self):self.my_fun()
Agile Business Group - www.agilebg.com - [email protected]
Enviroment
NO MORE (cr,uid,ids,...,context) env è parte del RecordSet Chiamate di metodo più rapide:
self.search([('is_company', '=', True)])res.partner(7, 18, 12, 14, 17, 19, 8, 31, 26, 16)self.search([('is_company', '=', True)], limit=1).name'My_Partner'
#accesso a envself.envcursor = self._crself.env.crself.env.userself.env['res.partner'].with_context(tz=x).create(vals)
Agile Business Group - www.agilebg.com - [email protected]
Modulo Presentation Talk
Fields and Methods
Agile Business Group - www.agilebg.com - [email protected]
Fields
Fields come descriptors della classe
Proprietà Date e Datetime:● to_string
to_string in datetime● from_string
from_string in datetime● today
now in datetime● context_today
context_timestamp in datetime
name = fields.Char(string='Name')description = fields.Text(
'Description')user_id = fields.Many2one(
'res.partner', string='Supervisor')
partner_id = fields.Many2Many('res.partner', string='Subscribers')
buffet = fields.Boolean('Buffet')prize = fields.Float(
string='Ticket Prize')state = fields.Selection([ ('draft', 'Draft'), ('paid', 'Paid'), ('cancel', 'Cancelled')])date = fields.Date(string='Date')
Agile Business Group - www.agilebg.com - [email protected]
Functional Fields
felds.function NO MORE!
store limitato a True e False e ad un decorator dedicato sul metodo
amount_total = fields.Float( string='Subtotal', store=True, readonly=True, compute='_compute_amount')
@[email protected]('buffet', 'projector', 'prize')def _compute_amount(self): if self.buffet: self.amount_total = self.prize + 4 if self.projector: self.amount_total = self.prize + 10
Agile Business Group - www.agilebg.com - [email protected]
Method and Decorators
I Decorator sono la “frma” che identifca il tipo di metodo
@api.one: il decorator cicla sui record del recordset, self è un record
@api.multi: self è il RecordSet corrente senza iterazioni
@api.model: self gli viene passato dall'esterno
Agile Business Group - www.agilebg.com - [email protected]
Method and Decorators
@api.multidef pay_amount(self):
for talk in self: talk.state = 'paid'
@api.onedef check_availability(self):
total = self.daily_total(fields.Date.today()) if total <= self.env.user.company_id.total_daily: self.avaible = True else: self.avaible = False
@api.modeldef daily_total(self, today): daily_total = 0 for talk in self: if talk.date.to_string == today: daily_total += talk.amount_total return daily_total
Agile Business Group - www.agilebg.com - [email protected]
Method and Decorators
@api.onchange: non si dichiarano più gli onchange nelle viste, basta usare questo decorator sopra ad un modulo
@api.returns: questo decorator garantisce l'univocità del recordset ritornato dal metodo.
@api.onchange('fieldx'):def do_stuff(self): if self.fieldx == x: self.fieldy = 'toto'
@api.returns('res.partner')def afun(self): ... return x # a RecordSet
Agile Business Group - www.agilebg.com - [email protected]
Link Utili
https://www.odoo.com/documentation/8.0/ https://github.com/nbessi/odoo_new_api_guideli
ne http://www.slideshare.net/openobject/odoo-from
-v7-to-v8-the-new-api
Agile Business Group - www.agilebg.com - [email protected]
Contatti:
[email protected] Twitter: twitter.com/Hurrinico GitHub: github.com/hurrinico
Agile Business Group - www.agilebg.com - [email protected]
Grazie per l'attenzione!