Uso del cron interno de Odoo
Odoo posee internamente un planificador de tareas. El que permite ejecutar en forma regular tareas de mantenimiento del sistema, o acciones programadas sin intervención del usuario (y este punto es fundamental). Por ejemplo:
Mantenimiento del sistema: como depuración de iniciativas, archivado de contactos sin activdad, etc.
Actividades de ejecución regular, como por ejemplo actualización de registros cuya actualización durante horarios de actividad de los usuarios es muy cara
Envio de mails regulares a usuarios, etc
Sincronización de pedidos y datos maestros con sistemas de e-commerce (por ejemplo Virtuemart o Woocommerce)
Las tareas planificadas se encuentran (al menos en la versión 14) en el menu Ajustes > Técnico > Planificación Acciones Planificadas y ahi pueden setear el objeto donde esta almacenado el método a ejecutar y como se ejecuta el mismo.
Como se utiliza?
Supongamos que tenemos un objeto crm.lead y queremos archivar las iniciativas de manera regular para ello vamos a ejecutar la acción planificada. Entonces lo que hacemos es (mediante un módulo) extendemos el modelo crm.lead y le agregamos un nuevo método llamado cron_rescue_it, que se ejecuta en la acción programada por medio del siguiente código
model.cron_rescue_it()
Como es la estructura del método? Es un método normal decorado por @api.model el cual actualiza los datos pedidos
class CrmLead(models.Model):
_inherit = 'crm.lead'
@api.model
def cron_rescue_it(self):
leads = self.env['crm.lead'].search([('type','=','lead')])
for lead in leads:
lead.active = False
Tengan en cuenta el loggeo de los errores o el manejo de las excepciones en las acciones planificadas. No es un aspecto menor.
Limitaciones del cron de Odoo
Es importante tener en cuenta tres limitaciones que tiene el cron. La primera (no es limitación pero de vez en cuando aparece un entusiasta con la idea) es que el cron se debe utilizar para tareas inatendidas, o sea sin intervención de los usuarios. La segunda limitación es que las tareas planificadas tienen una duración de ejecución de minutos, limitados por los seteos de configuración de Odoo (recuerden que Odoo no es un sistema diseñado para las tareas batch). Y la tercera limitación es que cualquier error durante la ejecución de la tarea programada, cualquier hace rollback de todos los cambios efectuados. Detalle para nada menor.
Una alternativa a estas limitaciones es el uso de scripts de python que actualizan Odoo mediante xmlrpc. Y dichos scripts se ejecutan por medio del cron de Linux (el cual es mucho mas robusto que el de Odoo).
Acerca de:
Gustavo Orrillo
Passionate about programming, he has implemented Odoo for different types of businesses since 2010. In Moldeo Interactive he is a founding Partner and Programmer; In addition to writing on the Blog about different topics related to the developments he makes.