Konvertierung alte API in neue API

Dieser Artikel enthält stichwortartig Hinweiße und Vorgehensweisen, welche man bei der Konvertierung von alter in neue API beachten sollte. Somit soll dieser Artikel als Unterstützung bei der Portierung alter API Module dienen.


Alte APINeue API

Imports:

from openerp.osv import osv,

Klassenkopf:

class myclass(osv.osv):


my_pool = self.pool.get('mymodel')


from odoo import models,


class myclass(models.Model):


my_pool = self.env['mymodel']

Search:

self.pool.get('mymodel').search(cr,uid,[('field','=', myfield)])


.search gibt id(s) zurück (erst durch ein browse wird das zu der ID zugehörige Objekt zurückgegeben)

Abfrage auf Vorhandensein der Auswertung eines .search:

if my_id:



self.env['mymodel'].search([('field','=', myfield)])  

cr,uid entfallen, sind im Objekt self enthalten und können per self._ids / self._uid angesprochen werden.

.search gibt Objekt(e) zurück (browse nicht mehr notwendig)


if len(myobject) > 0:

Felddefinition:

_columns = {
'my_field': fields.char('My field'),
}



my_field = fields.Char('My field')

my_pool.write(cr,uid,my_id) 

dazu äquivalent unlink()

my_object.write()

oder

my_pool.write(my_object.id)

my_ids = my_pool.search(cr,uid,[('field','=', myfield)]) 
for my_id in my_ids: 
           my_object = my_pool.browse(cr,uid,my_id) 
           ...
my_objects = my_pool.search([('field','=', myfield)])
for my_object in my_objects:
          ...

Verwendung und Überprüfung der Dekoratoren:

Bei der Konvertierung von Odoo 8 auf Odoo 10 ist es wichtig die Dekoratoren zu überprüfen, notfalls diese auch

hinzuzufügen (siehe neue API). So sieht in der alten API ein Methodenaufruf folgendermaßen aus:

def myfunction(self, cr, uid, ids, context):

@api.multi

def myfunction(self):

Hierbei ist es wichtig den @api.multi Dekorator zu verwenden. Ohne diesen Dekorator wird ein Odoo Error ausgelöst:

TypeError: myfunction() takes exactly 1 argument (2 given)


Verwandte Artikel