Uso del cron interno de Odoo

Gustavo Orrillo
- 18/09/2021 - 2 min. de lectura


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

Apasionado de la programación, implementa Odoo para distintos tipos de negocios desde el año 2010. En Moldeo Interactive es Socio fundador y Programador; además de escribir en el Blog sobre distintos temas relacionados a los desarrollos que realiza.