Acciones planificadas en Odoo
Cómo y por qué lanzar procesos recurrentemente con una frecuencia determinada
20 d’abril, 2023 per
Acciones planificadas en Odoo
Manuel Regidor González


 En  ocasiones es necesario ejecutar una misma acción de forma periódica. Hacerlo de forma manual resultaría una pérdida de tiempo cuando el intervalo está establecido. Comprobar la llegada de nuevos correos electrónicos, actualizar los tipos de cambio en un entorno multidivisa o realizar la sincronización con sistemas externos son algunos ejemplos de trabajos que tienen que realizarse una y otra vez, con mayor o menor frecuencia. Odoo dispone de las acciones planificadas para gestionar estas situaciones.

Las acciones planificadas de Odoo permiten realizar procesos recurrentemente con un intervalo de tiempo determinado. En términos más técnicos, a través de las acciones planificadas se ejecuta un código determinado sobre un modelo concreto cada cierto tiempo. Hay diferentes razones por las que resultan útiles:

  • Lanzar manualmente una acción que tiene que repetirse es una pérdida de tiempo cuando puede automatizarse.

  • La programación de una acción recurrente evita que se olvide su lanzamiento.

  • El poder establecer una frecuencia determinada permite que la acción se lance con una reiteración adaptada a las necesidades concretas de una empresa.

  • Las acciones planificadas proporcionan la opción de agrupar operaciones aplicadas sobre varias instancias de un modelo y lanzarlas en lotes, lo que puede mejorar el rendimiento del sistema, por ejemplo, aprovechando los momentos de menos uso para su procesamiento.

Existen muchos ejemplos de acciones planificadas en Odoo.

  • El envío de correos en la cola de correos salientes.

  • La comprobación de correos entrantes para introducirlos en el sistema.

  • La eliminación de notificaciones antiguas.

  • Envío de facturas que no pudieron mandarse cuando se validaron.

Esas son solamente algunas de las acciones planificadas disponibles en Odoo creadas a partir de la instalación de diferentes módulos. Existe la posibilidad de modificarlas así como de crear nuevas. A continuación se explica cómo establecer nuevas acciones planificadas, tanto funcionalmente como mediante código.


1. Crear acción planificada funcionalmente


El acceso a las acciones planificadas se realiza, con el modo desarrollador activado, desde Ajustes > Técnico > Acciones planificadas.


A continuación se describen los campos más importantes para crear/configurar una acción planificada:

  • Nombre. Campo de texto libre.

  • Modelo. Modelo en base de datos sobre el que se lanza el código.

  • Usuario planificador. Usuario interno del sistema bajo el que se lanza la acción planificada. Es decir, la acción planificada se lanza como si la estuviera lanzando el usuario seleccionado en este campo.

  • Ejecutar cada. Intervalo de tiempo en el que se lanzará la acción planificada.

  • Activo. Si está marcado, la acción planificada se lanzará. Si no lo está, la acción planificada no se lanzará.

  • Siguiente fecha de ejecución. Indica cuándo será la próxima vez que se lanzará la acción. Este campo se recalcula automáticamente en el momento en el que la acción planificada se lanza, teniendo en cuenta la fecha y hora de ese momento y el valor introducido en 'Ejecutar cada'.

  • Número de ejecuciones. Este campo sirve para indicar cuantas veces tiene que lanzarse la acción planificada. Una vez alcanzado ese número, dejará de lanzarse. Si la acción tiene que lanzarse un número ilimitado de veces, hay que utilizar el valor -1.

  • Prioridad. En caso de que haya varias acciones planificadas que se vayan a lanzar en un momento determinado, irán antes aquellas con una prioridad más alta, teniendo en cuenta que 0 es la máxima prioridad y 10 la mínima.

  • Repetir perdidos. En caso de que la acción planificada no se haya lanzado porque el servidor no estuviera funcionando, si esta casilla está marcada se intentará el relanzamiento cuando el servidor vuelva a estar disponible.

  • Código Python. Código que indica la acción que se lanza. Se requieren conocimientos técnicos para poner un valor en este campo y se desaconseja su manipulación si se carece de ellos.

  • Seguridad. En esta pestaña pueden introducirse aquellos grupos cuyos usuarios tienen permiso para ejecutar la acción planificada. Hay que tener en cuenta que el usuario que lanza la acción planificada es aquel que está seleccionado en el campo "Usuario planificador", ya sea cuando la acción se lanza automáticamente o porque se lanza manualmente con el botón "Ejecutar manualmente". Si no se añade ningún grupo, no se aplican restricciones de seguridad adicionales.

2. Crear acción planificada a través de código


Además de poder crear acciones planificadas funcionalmente, tal y como se ha explicado en el apartado anterior, también es posible generarlas desde un fichero xml, de manera que se añadirá en el momento en el que se instale el módulo en el que este archivo se encuentra. Se utiliza la acción planificada "Mail: Email Queue Manager", del módulo mail y encargada de comprobar si hay correos entrantes e introducirlos en el sistema, como ejemplo:

    <record forcecreate="True" id="is_cron_mail_scheduler_action" model="ir.cron">
        <field name="name">Mail: Email Queue Manager</field>
        <field name="model_id" ref="model_mail_mail"/>
        <field name="state">code</field>
        <field name="code">model.process_email_queue()</field>
        <field name="user_id" ref="base.user_root"/>
        <field name="interval_number">1</field>
        <field name="interval_type">hours</field>
        <field name="numbercall">-1</field>
        <field eval="False" name="doall"/>
    </record>


Aparecen los siguientes valores

  • name. Nombre de la acción planificada.

  • model_id. Nombre técnico del modelo precedido de 'model_'

  • state. Por cuestiones de herencias entre modelos, siempre ponemos el valor 'code' cuando creamos una acción planificada.

  • code. Código Python que ejecuta la acción planificada.

  • user_id. Identificador externo de usuario que ejecutará la acción planificada.

  • inverval_number. Valor numérico del intervalo de ejecución.

  • interval_type. Valor temporal del intervalo de ejecución. Los valores posibles son 'minutes', 'hours', 'days', 'weeks' y 'months'. En este ejemplo, este valor junto con el anterior indican que la acción planificada se ejecutará cada 1 hora.

  • numbercall. Número de veces que tiene que lanzarse la acción planificada (el valor -1 indica que se lanza un número indeterminado de veces).

  • doall. Campo que indica si la acción se ejecutará cuando el servidor vuelva a estar disponible en caso de que no pudiera ejecutarse cuando le tocaba.

 En Sygel trabajamos cada día para adaptar a diferentes escenarios las opciones que tanto Odoo como la Odoo Community Association (OCA) ofrecen. Somos conscientes de que cada empresa tiene unas características específicas y, por ello, el trato personalizado se traduce en la implantación del ERP para que cumpla tanto con las expectativas como con las necesidades de nuestros clientes. A la vez, compartimos nuestros avances con el resto de la comunidad, para que cada día se beneficie más gente.