Acciones de servidor en Odoo
Las acciones de servidor en Odoo permiten automatizar tareas y responder a eventos del sistema de forma sencilla, además de ser una herramienta clave para ahorrar tiempo y optimizar procesos. En este blog exploraremos cómo funcionan y presentaremos un ejemplo con dos formas distintas de implementar acciones de servidor dentro de Odoo.
Daniel Sánchez
9/10/20255 min read


¿Qué son las acciones de servidor en Odoo?
También llamadas server actions, son reglas que permiten automatizar procesos ejecutando código o acciones predefinidas cuando ocurre un evento específico en el sistema. Se configuran desde la interfaz gráfica (menú de Acciones de servidor) o a través de módulos personalizados en Python/XML.
Características de las acciones de servidor
Por mencionar algunas:
● Se pueden ejecutar de forma manual (desde un botón) o automática (al ligarlas a reglas automatizadas o disparadores como Automated Actions).
● No requieren programación avanzada si se usan las opciones estándar, aunque también permiten código Python para casos más complejos.
● Están disponibles para cualquier modelo en Odoo.
Tipos de acciones de servidor
- Actualizar registro 
- Crear actividad 
- Enviar correo electrónico 
- Enviar SMS 
- Agregar seguidores 
- Eliminar seguidores 
- Crear registro 
- Ejecutar código 
- Enviar notificación webhook 
- Ejecutar acciones existentes 
Ejemplo de acciones de servidor
Supongamos que queremos una acción de servidor que actualice el cliente de una venta en cualquier estado. Tiene que ser a un cliente en específico.
Ejemplo desde interfaz gráfica
Nos dirigimos a Ajustes / Técnico / Acciones del servidor, creamos un nuevo registro con la siguiente información.


- Nombre: Actualizar cliente.
- Tipo: Actualizar registro. 
- Modelo: Orden de venta (sale.order). 
- Grupos permitidos: Ventas / Administrador (estos son los grupos de usuario que pueden ejecutar la acción del servidor. Si se deja en blanco, permite a todos ejecutar la acción). - En la sección Detalles de la acción, se ingresa Actualizar, campo Cliente, y se selecciona el cliente por el cual se quiere cambiar. En este ejemplo se colocó el cliente Azure Interior, Brandon Free. 
Después de crear el registro, presionamos el botón “Crear acción contextual”, lo que permitirá visualizar la acción de servidor desde el menú de acciones que se encuentra en las diferentes vistas del modelo de ventas, por ejemplo, en las vistas formulario y lista.




Tenemos la siguiente venta en estado “Orden de venta”, donde su cliente es XOCHILT CASAS CHAVEZ.


Normalmente, el modelo no permite actualizar la venta anterior si su estado es “Orden de venta”, pero al accionar la acción de servidor desde el menú de acciones, notamos cómo se actualiza el cliente por el que configuramos.




Ejemplo desde módulos personalizados
Dentro de un módulo personalizado declaramos un registro del modelo ir.actions.server con el siguiente código:


donde:
- name: Es el nombre de la acción de servidor. Para diferenciar de la acción previa, a esta la llamamos Actualizar cliente desde código. 
- update_field_id: Es el id del campo a cambiar. En este caso, cliente. 
- update_path: Es el nombre técnico del campo a cambiar. En este caso, el nombre técnico del campo Cliente es partner_id. 
- update_related_model_id: Es el modelo al que apunta el campo a cambiar. En este caso, el modelo es res.partner (Clientes). 
- resource_ref: Es el nombre técnico del objeto del nuevo valor a colocar en el campo. En este caso, el modelo del nuevo valor es ‘res.partner’ seguido por id del registro, separado por una coma. El ejemplo en código da el resultado ‘res.partner,27’, ya que 27 es el id del cliente Azure Interior, Brandon Free. 
- value: Es el id del nuevo registro a colocar en el campo. En este caso, se coloca el ref_id del cliente Azure Interior, Brandon Free, que ya tiene precargado la base si se crea con datos de prueba, cuyo id es 27. 
Al actualizar el módulo, vemos nuestra nueva acción de servidor ya con su acción contextual creada.


Y al volver a ejecutar la acción desde las vistas lista o formulario, se actualiza el cliente de la orden en cualquier estado.






Aunque el ejemplo anterior termina siendo muy poco práctico, ya que se requiere saber nombres técnicos de campos específicos en la acción y referencias de los campos a actualizar y nuevo campo a colocar. Por lo que a la acción anterior le cambiaremos el tipo por “Código” y la simplificamos. El código de la acción es el siguiente:


donde:
- state: Es el tipo de la acción de servidor. Antes era object_write (Actualizar registro) y ahora es code (Ejecutar código). 
- code: Es el código a ejecutar en la acción de servidor. En este ejemplo, llamamos al método write que contiene cada modelo, y especificamos el nuevo registro a colocar en el campo partner_id. 
Al actualizar el módulo personalizado, esta es la vista formulario de nuestra acción de servidor.


Por lo que, al ejecutarla, volvemos a actualizar el cliente de la venta sin importar su estado.






- Utiliza primero acciones predefinidas (enviar email, actualizar campo, crear registro) antes de irte directo a ejecutar código Python desde las acciones de servidor.
- No pongas acciones que creen bucles infinitos (por ejemplo, actualizar un campo que vuelve a disparar la misma acción). 
- Coloca nombres claros y descripciones, ya que pueden acumularse muchas y volverse confusas. 
- Limita cuándo se ejecutan; así evitas crear registros o correos innecesarios. Las acciones de servidor no necesariamente se ejecutan al presionar el botón de acción. 
- Encadena acciones; una acción de servidor puede ejecutar otra, lo cual es útil para flujos más complejos. 
- Recuerda que se ejecutan con los permisos del usuario que dispara la acción. 
Consejos rápidos:
En Exdoo podemos desarrollar cualquier módulo para Odoo en México, implementamos tu ERP con consultores experimentados no solo en Odoo sino en procesos de negocios, tenemos 10 años trabajando solamente con Odoo en México y otros países.
Exdoo TI S DE RL DE CV
10 años de experiencia en Odoo
