Una aplicación de flujo de trabajo es una aplicación de software que automatiza, al menos en cierto grado, un proceso o procesos. Los procesos suelen estar relacionados con el negocio, pero pueden ser cualquier proceso que requiera una serie de pasos para automatizarse mediante software . Algunos pasos del proceso pueden requerir intervención humana, como la aprobación o el desarrollo de texto personalizado, pero las funciones que se pueden automatizar deben ser manejadas por la aplicación. Las aplicaciones avanzadas permiten a los usuarios introducir nuevos componentes en la operación. [1]
Por ejemplo, considere una orden de compra que pasa por varios departamentos para su autorización y su posterior compra. La orden puede ser enviada automáticamente de un departamento a otro para su aprobación. Una vez que se obtienen todas las autorizaciones necesarias, se notifica al solicitante de la orden de compra y se le otorga la autorización necesaria. Un proceso de flujo de trabajo puede implicar un mantenimiento frecuente. Por ejemplo, el aprobador habitual de las órdenes de compra puede estar de vacaciones, en cuyo caso, la aplicación solicitará la aprobación de aprobadores alternativos.
Las aplicaciones de flujo de trabajo se pueden desarrollar utilizando un diseñador gráfico, un lenguaje de programación o una combinación de ambos.
Algunos productos de software proporcionan un medio para crear aplicaciones de flujo de trabajo con un diseñador gráfico basado únicamente en diagramas. Este tipo de sistemas se basan en la capacidad de capturar toda la información relevante para el proceso de flujo de trabajo a través de una interfaz especializada dirigida a personas que no son programadores. Posteriormente, el software compila esa información en una aplicación de flujo de trabajo funcional. Sin embargo, hay casos en los que se hace necesario el uso de un lenguaje de programación, en particular para incorporar reglas más complejas al flujo de trabajo, como cálculos para validar datos en formularios de entrada.
Para el diseño de flujos de trabajo basados en código, las aplicaciones de flujos de trabajo se pueden desarrollar con cualquier lenguaje de programación de propósito general , pero también existen lenguajes de flujos de trabajo especializados. Estos lenguajes suelen venir con una notación gráfica asociada (como BPMN ), [2] aunque algunos son textuales o basados en XML . Algunos ejemplos de lenguajes especializados que se pueden utilizar para la definición de flujos de trabajo de esta manera incluyen:
Los lenguajes mencionados anteriormente se basan en la sintaxis XML y, si bien son adecuados para su manipulación por software, pueden resultar difíciles de utilizar para personas sin conocimientos técnicos. Por lo tanto, su uso se complementa generalmente con notaciones gráficas que permiten la creación de diagramas de flujo que son más fáciles de desarrollar e interpretar para las personas: la creación de dichos diagramas es, en efecto, una forma de programación "gráfica". El paquete de software que permite a un usuario desarrollar un diagrama de flujo normalmente traducirá un diagrama a su equivalente XML.
Otro enfoque para desarrollar aplicaciones de flujo de trabajo es utilizar un lenguaje de programación junto con bibliotecas e interfaces que capturan abstracciones para la coordinación de tareas. A continuación se presentan ejemplos de dichas bibliotecas e interfaces:
El uso de bibliotecas es generalmente complementario a las técnicas de diagramación, que no siempre son suficientes por sí mismas para crear aplicaciones completamente funcionales (a menos que la herramienta de diagramación sea parte de un sistema de gestión de flujo de trabajo específico). Los flujos de trabajo de WF, por ejemplo, se pueden crear utilizando Microsoft Visual Studio de forma diagramática (su equivalente XML es XAML ), y su funcionalidad se puede aumentar con código escrito en C# o VB.NET: un flujo de trabajo determinado puede ser llamado por una aplicación de software existente como un servicio web. Las herramientas de desarrollo de software como Visual Studio o los numerosos entornos de codificación para Java también permitirán que se diseñen componentes particulares completamente en código y luego se utilicen como bloques de construcción en diagramas de flujo de trabajo después de que se compilan.
Una limitación de ciertas técnicas basadas puramente en diagramas, como BPMN, mencionada anteriormente, es que para cumplir con el propósito de la especificación del flujo de trabajo, dichas notaciones deben mejorarse con construcciones adicionales. Estas construcciones capturan el paso de datos, las transformaciones de datos y las condiciones de enrutamiento, para vincular las tareas a su implementación, etc. BPMN, si bien está destinado a servir como estándar, es deficiente en este sentido. Varios paquetes comerciales (como Microsoft Biztalk ) abordan estas necesidades de manera exclusiva (específicamente, mejorando el conjunto básico de íconos de diagramación con íconos adicionales que admiten la funcionalidad necesaria).
Para fines de análisis estático, por ejemplo para detectar errores semánticos en tiempo de diseño, también es posible representar el flujo de trabajo en forma matemática utilizando una notación formal como redes de Petri .