{"id":523,"date":"2025-09-10T11:39:52","date_gmt":"2025-09-10T11:39:52","guid":{"rendered":"https:\/\/sienna-manatee-218967.hostingersite.com\/blogs\/acciones-de-servidor-en-odoo\/"},"modified":"2026-05-01T18:54:34","modified_gmt":"2026-05-01T18:54:34","slug":"acciones-de-servidor-en-odoo","status":"publish","type":"post","link":"https:\/\/exdoo.mx\/blogs\/acciones-de-servidor-en-odoo\/","title":{"rendered":"Acciones de servidor en Odoo"},"content":{"rendered":"<div style=\"background:linear-gradient(135deg,#0A7099 0%,#0d8db8 100%);color:#fff;padding:28px 26px;border-radius:16px;margin:0 0 28px;box-shadow:0 4px 16px rgba(10,112,153,.2);\">\n<div style=\"display:inline-block;background:rgba(255,255,255,.18);padding:6px 14px;border-radius:20px;font-size:12px;font-weight:700;letter-spacing:.5px;margin-bottom:12px;color:#fff;\">\ud83d\udcd8 ART\u00cdCULO T\u00c9CNICO<\/div>\n<p style=\"font-size:16px;line-height:1.6;margin:0;color:#fff;opacity:.95;\"><span><em><u>\u00bfQu\u00e9 son las acciones de servidor en Odoo?<\/u><\/em><\/span><\/p>\n<\/div>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/acciones-b-ALp2DVrOrphVg6y9-1.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<div style=\"background:linear-gradient(135deg,#0A7099 0%,#0d8db8 100%);color:#fff;padding:28px 26px;border-radius:16px;margin:0 0 28px;box-shadow:0 4px 16px rgba(10,112,153,.2);\">\n<div style=\"display:inline-block;background:rgba(255,255,255,.18);padding:6px 14px;border-radius:20px;font-size:12px;font-weight:700;letter-spacing:.5px;margin-bottom:12px;color:#fff;\">\ud83d\udcd8 ART\u00cdCULO T\u00c9CNICO<\/div>\n<p style=\"font-size:16px;line-height:1.6;margin:0;color:#fff;opacity:.95;\">Tambi\u00e9n llamadas server actions, son reglas que permiten automatizar procesos ejecutando c\u00f3digo o acciones predefinidas cuando ocurre un evento espec\u00edfico en el sistema. Se configuran desde la interfaz gr\u00e1fica (men\u00fa de Acciones de servidor) o a trav\u00e9s de m\u00f3dulos personalizados en Python\/XML.<\/p>\n<\/div>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span><em><u>Caracter\u00edsticas de las acciones de servidor<\/u><\/em><\/span><\/h3>\n<p dir=\"auto\" class=\"body\"><span>Por mencionar algunas:<\/span><\/p>\n<p dir=\"auto\" class=\"body\"><span>\u25cf Se pueden ejecutar de forma manual (desde un bot\u00f3n) o autom\u00e1tica (al ligarlas a reglas automatizadas o disparadores como Automated Actions).<\/span><\/p>\n<p dir=\"auto\" class=\"body\"><span>\u25cf No requieren programaci\u00f3n avanzada si se usan las opciones est\u00e1ndar, aunque tambi\u00e9n permiten c\u00f3digo Python para casos m\u00e1s complejos.<\/span><\/p>\n<p dir=\"auto\" class=\"body\"><span>\u25cf Est\u00e1n disponibles para cualquier modelo en Odoo.<\/span><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span><em><u>Tipos de acciones de servidor<\/u><\/em><\/span><\/h3>\n<ul style=\"padding-left:22px;line-height:1.9;\">\n<li><span>Actualizar registro<\/span><\/li>\n<li><span>Crear actividad<\/span><\/li>\n<li><span>Enviar correo electr\u00f3nico<\/span><\/li>\n<li><span>Enviar SMS<\/span><\/li>\n<li><span>Agregar seguidores<\/span><\/li>\n<li><span>Eliminar seguidores<\/span><\/li>\n<li><span>Crear registro<\/span><\/li>\n<li><span>Ejecutar c\u00f3digo<\/span><\/li>\n<li><span>Enviar notificaci\u00f3n webhook<\/span><\/li>\n<li><span>Ejecutar acciones existentes<\/span><\/li>\n<\/ul>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span><strong>Ejemplo de acciones de servidor<\/strong><\/span><\/h3>\n<p dir=\"auto\" class=\"body\"><span>Supongamos que queremos una acci\u00f3n de servidor que actualice el cliente de una venta en cualquier estado. Tiene que ser a un cliente en espec\u00edfico.<\/span><\/p>\n<p dir=\"auto\" class=\"body\"><span><u>Ejemplo desde interfaz gr\u00e1fica<\/u><\/span><\/p>\n<p dir=\"auto\" class=\"body\"><span>Nos dirigimos a Ajustes \/ T\u00e9cnico \/ Acciones del servidor, creamos un nuevo registro con la siguiente informaci\u00f3n.<\/span><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/1-mP43eo4Bk3f41MEX-1.jpg\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<ul style=\"padding-left:22px;line-height:1.9;\">\n<li>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span><strong>Nombre:<\/strong> <em>Actualizar cliente.<\/em><\/span><\/h3>\n<\/li>\n<li><span><strong>Tipo:<\/strong> <em>Actualizar registro.<\/em><\/span><\/li>\n<li><span><strong>Modelo:<\/strong> <em>Orden de venta (sale.order).<\/em><\/span><\/li>\n<li><span><strong>Grupos permitidos: <\/strong><em>Ventas \/ Administrador<\/em> (estos son los grupos de usuario que pueden ejecutar la acci\u00f3n del servidor. Si se deja en blanco, permite a todos ejecutar la acci\u00f3n).<\/span><\/p>\n<p class=\"body\" dir=\"auto\"><span>En la secci\u00f3n Detalles de la acci\u00f3n, se ingresa Actualizar, campo Cliente, y se selecciona el cliente por el cual se quiere cambiar. En este ejemplo se coloc\u00f3 el cliente <em>Azure Interior, Brandon Free<\/em>.<\/span><\/li>\n<\/ul>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>Despu\u00e9s de crear el registro, presionamos el bot\u00f3n \u201cCrear acci\u00f3n contextual\u201d, lo que permitir\u00e1 visualizar la acci\u00f3n de servidor desde el men\u00fa de acciones que se encuentra en las diferentes vistas del modelo de ventas, por ejemplo, en las vistas formulario y lista.<\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/2-AE07OzXwX4upLxpK-1.jpg\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><br \/>\n<img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/3-AzGMknkbKjSJl6kQ-1.jpg\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>Tenemos la siguiente venta en estado \u201cOrden de venta\u201d, donde su cliente es XOCHILT CASAS CHAVEZ.<\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/4-A0xv2Q334Rs5r6KB-1.jpg\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>Normalmente, el modelo no permite actualizar la venta anterior si su estado es \u201cOrden de venta\u201d, pero al accionar la acci\u00f3n de servidor desde el men\u00fa de acciones, notamos c\u00f3mo se actualiza el cliente por el que configuramos.<\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/5-m7VDBo8BnQU7B0vN-1.jpg\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><br \/>\n<img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/6-AoP4zk6DQLS2KL6l-1.jpg\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span><u>Ejemplo desde m\u00f3dulos personalizados<\/u><\/span><\/h3>\n<p dir=\"auto\" class=\"body\"><span>Dentro de un m\u00f3dulo personalizado declaramos un registro del modelo ir.actions.server con el siguiente c\u00f3digo:<\/span><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/7-dWxLGjlbK1uoEze4-1.jpg\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>donde:<\/span><\/h3>\n<ul style=\"padding-left:22px;line-height:1.9;\">\n<li><span><strong>name:<\/strong> Es el nombre de la acci\u00f3n de servidor. Para diferenciar de la acci\u00f3n previa, a esta la llamamos <em>Actualizar cliente desde c\u00f3digo<\/em>.<\/span><\/li>\n<li><span><strong>update_field_id:<\/strong> Es el id del campo a cambiar. En este caso, cliente.<\/span><\/li>\n<li><span><strong>update_path:<\/strong> Es el nombre t\u00e9cnico del campo a cambiar. En este caso, el nombre t\u00e9cnico del campo Cliente es partner_id.<\/span><\/li>\n<li><span><strong>update_related_model_id:<\/strong> Es el modelo al que apunta el campo a cambiar. En este caso, el modelo es res.partner (Clientes).<\/span><\/li>\n<li><span><strong>resource_ref:<\/strong> Es el nombre t\u00e9cnico del objeto del nuevo valor a colocar en el campo. En este caso, el modelo del nuevo valor es \u2018res.partner\u2019 seguido por id del registro, separado por una coma. El ejemplo en c\u00f3digo da el resultado \u2018res.partner,27\u2019, ya que 27 es el id del cliente <em>Azure Interior, Brandon Free.<\/em><\/span><\/li>\n<li><span><strong>value:<\/strong> Es el id del nuevo registro a colocar en el campo. En este caso, se coloca el ref_id del cliente <em>Azure Interior, Brandon Free,<\/em> que ya tiene precargado la base si se crea con datos de prueba, cuyo id es 27.<\/span><\/li>\n<\/ul>\n<p dir=\"auto\" class=\"body\"><span>Al actualizar el m\u00f3dulo, vemos nuestra nueva acci\u00f3n de servidor ya con su acci\u00f3n contextual creada.<\/span><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/8-mP43eoO34qsJGaRW-1.jpg\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>Y al volver a ejecutar la acci\u00f3n desde las vistas lista o formulario, se actualiza el cliente de la orden en cualquier estado.<\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/9-YrD4z049jgizoVKn-1.jpg\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><br \/>\n<img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/1-mp84z0bLZ8uwkjnN-1.jpg\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><br \/>\n<img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/2-A3QlZWj6VOcloqbz-1.jpg\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>Aunque el ejemplo anterior termina siendo muy poco pr\u00e1ctico, ya que se requiere saber nombres t\u00e9cnicos de campos espec\u00edficos en la acci\u00f3n y referencias de los campos a actualizar y nuevo campo a colocar. Por lo que a la acci\u00f3n anterior le cambiaremos el tipo por \u201cC\u00f3digo\u201d y la simplificamos. El c\u00f3digo de la acci\u00f3n es el siguiente:<\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/3-YZ9El4BvXbCenall-1.jpg\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>donde:<\/span><\/h3>\n<ul style=\"padding-left:22px;line-height:1.9;\">\n<li><span><strong>state:<\/strong> Es el tipo de la acci\u00f3n de servidor. Antes era <em>object_write <\/em>(Actualizar registro) y ahora es <em>code<\/em> (Ejecutar c\u00f3digo).<\/span><\/li>\n<li><span><strong>code:<\/strong> Es el c\u00f3digo a ejecutar en la acci\u00f3n de servidor. En este ejemplo, llamamos al m\u00e9todo write que contiene cada modelo, y especificamos el nuevo registro a colocar en el campo partner_id.<\/span><\/li>\n<\/ul>\n<p dir=\"auto\" class=\"body\"><span>Al actualizar el m\u00f3dulo personalizado, esta es la vista formulario de nuestra acci\u00f3n de servidor.<\/span><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/4-Yan03jlnxlUXZ23L-1.jpg\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>Por lo que, al ejecutarla, volvemos a actualizar el cliente de la venta sin importar su estado.<\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/5-YNqMZ8lBPwsB9jvx-1.jpg\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><br \/>\n<img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/6-YZ9El4KG7bh7gPyV-1.jpg\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><br \/>\n<img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/7-Aq2Gzkprr1fXGQZO-1.jpg\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<ul style=\"padding-left:22px;line-height:1.9;\">\n<li>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>Utiliza primero acciones predefinidas (enviar email, actualizar campo, crear registro) antes de irte directo a ejecutar c\u00f3digo Python desde las acciones de servidor.<\/span><\/h3>\n<\/li>\n<li><span>No pongas acciones que creen bucles infinitos (por ejemplo, actualizar un campo que vuelve a disparar la misma acci\u00f3n).<\/span><\/li>\n<li><span>Coloca nombres claros y descripciones, ya que pueden acumularse muchas y volverse confusas.<\/span><\/li>\n<li><span>Limita cu\u00e1ndo se ejecutan; as\u00ed evitas crear registros o correos innecesarios. Las acciones de servidor no necesariamente se ejecutan al presionar el bot\u00f3n de acci\u00f3n.<\/span><\/li>\n<li><span>Encadena acciones; una acci\u00f3n de servidor puede ejecutar otra, lo cual es \u00fatil para flujos m\u00e1s complejos.<\/span><\/li>\n<li><span>Recuerda que se ejecutan con los permisos del usuario que dispara la acci\u00f3n.<\/span><\/li>\n<\/ul>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span><strong>Consejos r\u00e1pidos:<\/strong><\/span><\/h3>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udcd8 ART\u00cdCULO T\u00c9CNICO \u00bfQu\u00e9 son las acciones de servidor en Odoo? \ud83d\udcd8 ART\u00cdCULO T\u00c9CNICO Tambi\u00e9n llamadas server actions, son reglas que permiten automatizar procesos ejecutando c\u00f3digo o acciones\u2026<\/p>\n","protected":false},"author":1,"featured_media":505,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[],"class_list":["post-523","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/posts\/523","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/comments?post=523"}],"version-history":[{"count":3,"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/posts\/523\/revisions"}],"predecessor-version":[{"id":1964,"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/posts\/523\/revisions\/1964"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/media\/505"}],"wp:attachment":[{"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/media?parent=523"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/categories?post=523"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/tags?post=523"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}