上下文
我必须创建创作工作流程( checkin 、 checkout 、验证...)。
对于某些状态转换,用户必须填写报告。当用户将对象 O 的状态从状态 S1 更改为状态 S2 时,他必须填写报告。
- 用户可以取消上报,O保持状态S1。
- 用户可以关闭浏览器,O保持状态S1。
- 如果他验证了报告,O 将进入状态 S2。
我正在尝试找到一个可以实现这些约束的框架。
jBPM/流口水
我可以通过 S1 和 S2 之间的“人工任务”来实现 1 和 3,但对于简单的报告来说,这有点矫枉过正。要实现 1,我必须在 S1 和“人工任务”之间建立双向关系。 第 2 点我做不到:如果用户关闭浏览器,O 仍处于“人工任务”状态。
另一种方式?
另一种方法是使用外部文件。该文件将为给定的转换 S1->S2 提供要显示的报告。
还有别的办法吗?您认为最佳用例是什么?
感谢您的帮助。
最佳答案
我会这样做:
将自定义 boolean 属性 commitState(默认为 true)添加到进程中的所有节点。
所以有3个节点: S1 - commitState=true, 报告 - commitState=false, S2 - commitState=true
当执行从之前的任何内容继续到 S1 时,引擎将状态提交给数据库并向用户显示 S1 中的内容。然后用户做某事,执行到节点 Report,向用户显示“SubmitReport”屏幕,但数据库事务仍未提交。
此时用户关闭浏览器,最终会出现session超时,抛出异常,在db状态回滚到S1。
当用户取消报告时,我们也可以抛出异常并回滚到 S1,但我更喜欢这样的转换通过流程图显式化,并且只接受这种转换。
当用户提交报告时,我们进入S2,状态为commited。
这要求数据库事务可以在向用户显示屏幕之间保持 - 例如在 StatefulBean 中(当从 StatefulBean 使用时,jbpm 3 中存在一些错误,我不知道在新版本的jbpm 来执行此操作)。
关于java - 我可以使用哪个 Java 工作流框架将其与 gui 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5102731/