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

时间:2011-07-13 20:38:58

标签: coldfusion workflow bpm workflow-engine

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

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

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

我的想法......

  • 好像我需要做很多存储/管理/保存 跟踪状态,并经常查看cfscheuler
  • cfthread不会有太大帮助,因为有些任务可能需要数天 (例如,等待用户的确认)。
  • 我已经可以想象流将在多个UDF中传播, DB和CFC
  • 任何其他语言的开源工作流引擎,也许我们可以移植到CF?

感谢您的脑力。 :)

2 个答案:

答案 0 :(得分:1)

在我的头脑中,我正在考虑State design pattern状态持久保存到数据库。查看Head First Design Patterns的Gumball Machine示例。

一般情况下,如果你有一些事情(如客户/订单/等)经历了许多状态的变化,这将有效。

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

就其他语言而言,我知道Grails有workflow module可用。我不知道你是否会更好地移植到CF或跳到Grails(正确的工具和所有这些)。

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

答案 1 :(得分:1)

研究Java Process Definition Language specification JBoss has an execution engine for it。使用这个基于Java的引擎可能是最简单的解决方案,它解决了您概述的许多问题。

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

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

在ColdFusion的环境中以及您要完成的任务中,如果您正在编写的系统需要轮询其他系统,则可能需要执行计划任务。将WDDX视为序列化格式。 JSON,虽然诱人的简单,我记得有一些围绕数字和日期的边缘情况,可以导致你悲伤。

Finally see my answer to this question for some additional thoughts