main content
< Volver a blog sobre aplicaciones móviles

Formularios avanzados workflows aprobación Drupal: guía completa

Cómo implementar un sistema de formularios avanzados y workflows de aprobación en Drupal

Los formularios son la puerta de entrada de la información en cualquier organización. Piensa en todo lo que empieza con uno: solicitudes de empleo, inscripciones a eventos, peticiones internas, formularios de contacto, encuestas de satisfacción, solicitudes de presupuesto... Cada uno de estos procesos arranca con un formulario y sigue con un flujo de aprobación o revisión. Y seamos sinceros: en la mayoría de organizaciones que usan Drupal, esos formularios se construyen de forma muy básica y las aprobaciones se gestionan por email, lo que acaba generando cuellos de botella, pérdida de información y cero trazabilidad.

La buena noticia es que Drupal, gracias al módulo Webform y al ecosistema de automatización con ECA (Event - Condition - Action), te permite construir formularios con lógica condicional avanzada y conectarlos con workflows de aprobación bastante sofisticados, todo sin necesidad de desarrollo custom. En esta guía te contamos la arquitectura, los módulos que necesitas y los patrones de implementación para los casos más habituales.

Webform: el módulo definitivo para formularios en Drupal

Capacidades principales

El módulo Webform es, sin exagerar, uno de los módulos contribuidos más potentes de todo Drupal. Esto es lo que te ofrece:

  • Más de 80 tipos de elementos disponibles: texto, número, fecha, selección múltiple, archivos, firma, composite fields (dirección, contacto), elementos HTML personalizados.
  • Constructor visual drag-and-drop para que cualquier persona del equipo pueda montar formularios sin tocar código.
  • Lógica condicional (conditions): mostrar, ocultar, requerir o modificar campos según lo que vaya respondiendo el usuario.
  • Formularios multipágina con barra de progreso y navegación entre pasos.
  • Prepopulación de campos desde URL parameters, cookies, valores del usuario logueado o entity references.
  • Validación avanzada: patrones regex, validación contra APIs externas, validación cruzada entre campos.
  • Confirmación personalizable: página de agradecimiento, redirección, email de confirmación o mensaje inline.
  • Exportación de datos: CSV, JSON, tabla HTML, con filtros por fecha, estado y campos específicos.
  • Integraciones: más de 40 handlers (conectores) para enviar datos a servicios externos (email, CRM, API, Slack, Google Sheets, Mailchimp).

Instalación y configuración

composer require drupal/webform
drush en webform webform_ui webform_node

El submódulo webform_ui te da la interfaz visual de construcción. webform_node permite embeber formularios dentro de nodos de contenido, algo que vas a agradecer.

Diseño de formularios con lógica condicional

Lógica condicional básica

La lógica condicional es lo que convierte un formulario estático en algo dinámico que se adapta a las respuestas del usuario. Vamos a verlo con un ejemplo concreto:

Ejemplo: formulario de solicitud de presupuesto

  • Si el usuario selecciona "Web a medida", le aparece un grupo de campos adicionales: plataforma deseada, integraciones necesarias, volumen de usuarios estimado.
  • Si selecciona "App móvil", aparecen campos diferentes: plataformas (iOS, Android, ambas), funcionalidades offline, integraciones con hardware.
  • Si selecciona "Consultoría", se muestra solo un campo de texto libre para que describa lo que necesita.

En Webform, esto se configura en cada elemento con la pestaña "Conditions":

field_plataforma_web:
  '#type': select
  '#title': 'Plataforma deseada'
  '#options':
    drupal: 'Drupal'
    wordpress: 'WordPress'
    custom: 'Desarrollo custom'
  '#states':
    visible:
      ':input[name="tipo_proyecto"]':
        value: 'web_medida'

Formularios multipágina con lógica de ramificación

Cuando el formulario se complica, lo mejor es dividirlo en páginas con navegación condicional:

  • Página 1: datos de contacto y tipo de solicitud.
  • Página 2A: si es presupuesto, detalles del proyecto.
  • Página 2B: si es soporte, descripción del problema.
  • Página 3: confirmación y envío.

Webform soporta páginas condicionales de forma nativa. La página 2A solo se muestra si la respuesta de la página 1 cumple la condición. Así de limpio.

Elementos compuestos y repetitivos

  • Composite elements: agrupan campos relacionados en una unidad (dirección con calle, ciudad, código postal, país).
  • Multiple values: permiten que el usuario vaya añadiendo entradas del mismo campo (otro contacto, otra línea de producto). Muy práctico para formularios de pedidos o solicitudes con varias líneas.

Workflows de aprobación

Patrón 1: aprobación simple por email con Webform

El flujo más sencillo, y la verdad es que no necesita módulos adicionales:

  1. El usuario envía el formulario.
  2. Webform manda un email al aprobador con un enlace a la submission.
  3. El aprobador revisa la submission en Drupal y actualiza un campo de estado (Aprobado / Rechazado / Pendiente de corrección).
  4. Webform envía un email de notificación al solicitante con el resultado.

Configuración:

  • Añade un campo estado al formulario con valores: Pendiente, Aprobado, Rechazado.
  • Configura un handler de email que dispare la notificación cuando se crea una nueva submission.
  • Configura otro handler que avise cuando se actualice el campo estado.
  • Usa permisos de Drupal para que solo los aprobadores puedan editar submissions.

Patrón 2: workflow multinivel con ECA

Cuando necesitas varios niveles de aprobación, ahí es donde ECA (Event - Condition - Action) brilla:

Evento: Webform submission creada
  → Condición: tipo de formulario = "solicitud_compra"
  → Acción: enviar email al jefe de departamento
  → Acción: crear tarea en el dashboard del aprobador

Evento: campo "estado" actualizado a "aprobado_nivel_1"
  → Condición: importe > 5000 EUR
  → Acción: enviar email al director financiero (nivel 2)
  → Acción: actualizar estado a "pendiente_nivel_2"

Evento: campo "estado" actualizado a "aprobado_nivel_2"
  → Acción: enviar email de aprobación al solicitante
  → Acción: crear orden de compra en el ERP (via API)

Patrón 3: integración con Content Moderation

Si los formularios generan nodos de contenido (por ejemplo, una solicitud de publicación), puedes combinar Webform con Content Moderation:

  1. El formulario Webform crea un nodo con estado "Borrador" usando el handler "Entity create".
  2. Content Moderation del core de Drupal gestiona las transiciones: Borrador, En revisión, Publicado o Rechazado.
  3. Los revisores reciben notificaciones automáticas vía ECA cuando un nodo entra en estado "En revisión".
  4. Las transiciones de estado están controladas por roles y permisos, así que nadie puede saltarse el proceso.

Patrón 4: workflow con asignación dinámica de aprobador

En organizaciones con estructura jerárquica, el aprobador depende del departamento del solicitante. Esto se resuelve así:

  1. El formulario incluye un campo "Departamento" (o se autocompleta desde el perfil del usuario).
  2. Una tabla de configuración (content entity o config entity custom) mapea cada departamento con su aprobador correspondiente.
  3. ECA evalúa el departamento y envía la notificación al aprobador que toque.
  4. Si el aprobador no actúa en 48 horas, el sistema envía un recordatorio automático y escala al nivel superior. Nada de dejar solicitudes en el limbo.

Módulos complementarios

Para los formularios

  • Webform Views: muestra las submissions como vistas de Drupal con filtros, ordenación y paginación.
  • Webform Analysis: gráficos y estadísticas de las respuestas (distribución de selecciones, promedios de valores numéricos).
  • Webform REST: expone las submissions como API REST para integraciones con aplicaciones externas.
  • Webform Scheduled Email Handler: envía emails programados basados en fechas del formulario (por ejemplo, un recordatorio 7 días antes de la fecha del evento).
  • CAPTCHA / reCAPTCHA: protección contra spam en formularios públicos. Imprescindible.

Para los workflows

  • ECA (Event - Condition - Action): el motor de automatización visual que viene a sustituir al antiguo Rules en Drupal 10/11.
  • Maestro: módulo de workflow BPMN completo con diseñador visual de procesos. Ideal si tienes workflows complejos con múltiples ramificaciones y escalados.
  • Content Moderation (core): para workflows de publicación de contenido.
  • Notifications: sistema de notificaciones in-app que complementa los emails para que nada pase desapercibido.

Seguridad y permisos

Control de acceso a submissions

  • Configura quién puede ver, editar y eliminar submissions en la pestaña "Access" de cada formulario.
  • Usa el sistema de roles de Drupal para crear roles específicos: "Aprobador de compras", "Revisor de contenidos", "Gestor de RRHH".
  • Las submissions suelen contener datos sensibles: asegúrate de que el acceso esté restringido y quede auditado.

Protección de datos

  • Si el formulario recoge datos personales, configura la retención automática: que se eliminen o anonimicen las submissions después del periodo establecido.
  • Añade un checkbox de consentimiento RGPD obligatorio. Esto no es opcional.
  • Genera el registro de actividades de tratamiento que exige el RGPD.
  • Si las submissions se exportan, cifra los archivos CSV y limita el acceso a la exportación.

Validación y prevención de abuso

  • Limita el número de submissions por usuario o por IP en un periodo de tiempo.
  • Implementa CAPTCHA o honeypot para formularios públicos.
  • Valida los archivos subidos (tipo, tamaño, escaneo antivirus).
  • Sanitiza todos los inputs para prevenir XSS e inyecciones. Esto es básico, pero te sorprendería la cantidad de sitios que no lo hacen bien.

Rendimiento y escalabilidad

Formularios con alto volumen de submissions

Si esperas miles de submissions diarias, conviene que tengas en cuenta lo siguiente:

  • Configura la purga automática de submissions antiguas.
  • Usa Views con paginación y filtros indexados para las pantallas de administración.
  • Considera almacenar las submissions en una tabla custom o en un sistema externo (Elasticsearch, base de datos analítica) si el volumen supera las capacidades de la tabla webform_submission.
  • Cachea los formularios con la caché de Drupal (al fin y al cabo, los formularios no cambian en cada request).

Formularios con muchos campos

Los formularios con más de 50 campos pueden volverse lentos en la interfaz de administración. Para evitarlo:

  • Divide en múltiples páginas para mejorar la experiencia del usuario.
  • Usa campos condicionales para mostrar solo los campos relevantes en cada momento.
  • Agrupa campos relacionados en fieldsets colapsables.

Casos de uso frecuentes

Formulario de solicitud de empleo

  • Datos personales, formación, experiencia (campos repetitivos para ir añadiendo puestos anteriores).
  • Subida de CV y carta de motivación.
  • Consentimiento RGPD.
  • Workflow: RRHH revisa, entrevista, aprobación del manager, oferta.

Formulario de solicitud de compra interna

  • Solicitante, departamento, centro de coste.
  • Líneas de producto/servicio con cantidad y precio unitario (composite repetitivo).
  • Workflow: jefe de departamento, y si supera los 5.000 EUR, dirección financiera y luego compras.

Formulario de inscripción a evento

  • Datos del asistente, selección de talleres/tracks.
  • Pago integrado (handler de pago con Stripe o Redsys).
  • Confirmación automática con código QR para acreditación.
  • Lista de espera automática si se alcanza el aforo. Esto ahorra una cantidad enorme de gestión manual.

Formulario de encuesta de satisfacción

  • Escalas Likert, NPS, campos abiertos.
  • Lógica condicional para profundizar en las respuestas negativas (si puntúa bajo, pregunta por qué).
  • Dashboard con análisis agregado de resultados.
  • Envío programado después de la entrega del servicio.

Errores frecuentes

  1. Construir formularios kilométricos sin dividirlos en páginas. La tasa de abandono sube de forma brutal con cada campo visible de más.
  2. No configurar emails de confirmación. El usuario necesita saber que su formulario se ha recibido correctamente. Si no recibe nada, piensa que ha fallado.
  3. Gestionar las aprobaciones por email sin sistema de tracking. Los emails se pierden, se olvidan o acaban en spam. Usa un sistema de estados dentro de Drupal y ahórrate dolores de cabeza.
  4. No definir timeouts para las aprobaciones. Si un aprobador no actúa en X días, el sistema tiene que escalar automáticamente. Si no, las solicitudes se pudren en una bandeja de entrada.
  5. Ignorar la accesibilidad. Webform genera formularios accesibles por defecto, pero ojo: las personalizaciones con JavaScript pueden romper la accesibilidad. Valida siempre con WAVE o axe antes de dar por bueno el formulario.

Conclusión

El módulo Webform de Drupal, combinado con ECA y Content Moderation, te permite construir formularios avanzados con workflows de aprobación que cubren desde solicitudes simples hasta procesos multinivel con escalado automático. La clave está en diseñar el flujo antes de ponerte a construir el formulario, definir bien los roles y permisos de cada participante y automatizar las notificaciones y escalados para que ninguna solicitud se quede sin respuesta.

Si necesitas ayuda para diseñar e implementar formularios avanzados y workflows de aprobación en tu sitio Drupal, contacta con Tangram Consulting y te ayudamos a digitalizar tus procesos internos sobre Drupal.

Contacta con nosotros
Fila 1