语境
我必须创建一个创作工作流程( 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 中的任何内容。然后用户执行某事,执行继续到节点报告,向用户显示“提交报告”屏幕,但数据库事务仍未提交。

    此时用户关闭浏览器,最终会出现 session 超时,抛出异常,在db状态下回滚到S1。

    当用户取消报告时,我们也可以抛出异常并回滚到 S1,但我更喜欢通过流程图明确地进行这种转换,并且只是进行这种转换。

    当用户提交报告时,我们进入 S2,状态被提交。

    这需要,可以在向用户显示屏幕之间保留 db 事务 - 例如在 StatefulBean 中(当从 StatefulBean 使用 jbpm 3 时,它存在一些错误,我不知道在新版本的 jbpm 中是否可以这样做这)。

    关于java - 我可以使用哪个 Java 工作流框架将其与 gui 绑定(bind),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5102731/

    10-14 01:05