Uno de los grandes problemas con Mercadolibre es la velocidad de la actualización. Cualquier instalación mediana de Mercadolibre tiene decenas de miles de publicaciones que deben ser actualizadas en los dos sentidos. Desde Odoo a Mercadolibre, y desde Mercadolibre a Odoo. No hay otra manera de mantener todo andando. Y para eso se necesita velocidad. Sabiendo que Odoo no es precisamente rápido, al igual que Mercadolibre para ser actualizado.
Una de las maneras de mejorar los tiempos de actualización en Odoo es mediante el método load de Odoo. Ahora, para usar este método deberíamos contar con cada uno de las publicaciones a actualizar con un external ID (los cuales se encuentran descriptos en este post). Como hacemos para actualizar un external ID en Odoo? Lo podemos hacer por medio de un método sencillo que inserta un registro en el modelo ir.model.data
def create_external_id(self):
self.ensure_one()
if self.meli_id:
self.env['ir.model.data'].create({
'name': self.meli_id,
'module': 'mercadolibre',
'model': 'ca.mercadolibre.posting',
'res_id': self.id,
'noupdate': True,
})
return True
Aca basicamente creamos el external ID por medio de un método (al cual llamamos mediante xmlrpc o acción de servidor). Podríamos también extender el método create para actualizar el external ID apenas se crea el registro
def create(self, vals_list):
res = super(Model, self).create(vals_list)
res.create_external_id()
return res
También Odoo brinda un método, get_external_id el cual devuelve un diccionario con el ID del registro y el valor del external ID. Podríamos también crear una columna computada con dicho valor
external_id = fields.Char('external ID',compute='_compute_external_id')
def _compute_external_id(self):
for rec in self:
res = ''
if rec.get_external_id():
for key,value in rec.get_external_id().items():
if key == rec.id:
res = value
rec.external_id = res
Los external IDs son extremadamente útiles. Muy raramente se borran y es por eso que hacen que el código sea mucho más estable (como hago para referenciar la moneda dolar por ejemplo?). Pero también son útiles para la actualización de datos. Actualizar datos en Odoo no es rápido y necesitamos utilizar otras herramientas para lograr dicha velocidad. El método load es importante en esta búsqueda de velocidad, y de ahí la necesidad de dotar de external IDs a todas las publicaciones.