如何在ColdFusion中建模业务工作流



由于ColdFusion目前还没有完整的BPM框架/解决方案,您将如何将工作流建模到可以轻松扩展和维护的ColdFusion应用程序中?

业务工作流不仅仅是一个可以很好地映射到编程语言的流程图。例如:

如何对一个任务X建模,该任务X后面是并行发生的多个任务Y0,Y1,Y2,其中Y0是一个人工过程(需要等待输入),Y1是一个可能出错并可能需要自动重试的web服务,Y2是一个自动化过程;然后是一个任务Z,只有在所有Y都完成后才能执行?

我的想法…

    似乎我需要做大量的存储/管理/保持状态跟踪,并与cfscheuler进行频繁检查。
  • cfthread不会有太大帮助,因为有些任务可能需要几天的时间(如等待用户确认)。
  • 我已经可以想象流将在多个udf中传播,DB和CFCs
  • 任何其他语言的开源工作流引擎,也许我们可以移植到CF?

谢谢你的智慧。:)

学习Java进程定义语言规范,其中JBoss为它提供了一个执行引擎。使用这个基于Java的引擎可能是最简单的解决方案,它解决了您所概述的许多问题。

如果你打算自己写,你可能最终会在有向图中建模状态和转换,顶点和边。正如Ciaran Archer所写的,这是状态机的组成部分。IMO最好的持久化方法是通过序列化捕获正在通过工作流发送的任何数据的版本,捕获当前状态,以及状态之间转换的历史记录和对该数据的更改。该机制可能需要一种方法来跟踪谁或什么负责对该工作流采取下一个操作。

根据你的问题,你要考虑的一件事是你是否真的需要在你的解决方案中表示并行任务。相反,可以将一组消息放入队列,然后为所有这些消息指定等待状态。表示实际的并行性意味着您正在通过几个不同的进程同时移动数据。在这种情况下,当它们再次连接时,你需要一个算法来解决,这是一个非常重要的任务。

在ColdFusion的上下文中,如果您正在编写的系统需要轮询其他系统,那么计划任务可能是必要的。将WDDX视为一种序列化格式。JSON虽然简单得诱人,但我记得它在数字和日期方面有一些边缘情况,可能会让您感到悲伤。

最后看看我对这个问题的回答来获得一些额外的想法。

我想到的是将状态持久化到数据库的状态设计模式。看看Head First Design Patterns的Gumball Machine例子。

一般来说,如果你有一些东西(比如客户端/订单等)正在经历许多状态变化,这将有效。

根据你所处的状态,不同的事情会发生在你的对象上,这可能意味着坐在数据库表中等待一个标志被用户手动更新。

就其他语言而言,我知道Grails有一个工作流模块可用。我不知道移植到CF还是跳槽到Grails(适合这项工作的工具)会更好。

这只是一个想法,希望能有所帮助。

最新更新