<提问> JBPM 业务数据与流程数据的整合 ?

abo123 2008-05-11
新手提问:
看了JBPM的DOC,大致明白了它是如何定义和控制流程的,但是如何和业务数据整合起来还想不太明白,希望大家指教:

案例情况: 有一个流程,每个节点都会有很多结果数据(信息表,审核表,合同等),如何把这些信息与流程的流转结合起来? 并且每个节点必须在这些数输入或者处理后才能结束?

我想了想:

方法一:把每个节点涉及到的所有信息均用JBPM中的Variable来处理,这样就相对简单.但是如果节点很多,信息也很多.这样处理的话 以后维护起来不方便;另外如果这些信息只是作为流程变量存储,就没有其他的入口进行管理.如果以后需要修改,也只能通过流程节点,再一步一步检索出信息,想起来也不是很方便.

方法二:对业务中涉及到的信息分类,分别建表,如建立<合同表>,其中合同ID作为主键; 在jbpm的节点中,设置一个变量 : contractID,用来索引到合同表,在流程流转的时候,调用其他页面来处理合同信息,再返回到流程流转页面,进行跳转.

问题:

1、大家采用以上那种方式进行业务数据的存储,或者有更好的解决办法?

2、如何来控制必须先填写(处理)业务数据,才能继续流程的流转? 是通过设置一个《完成变量》吗?如果已经填写业务信息,就把变量设置为true??


很希望得到大家的指点 :) 多谢

我的email 是 wangtlx@163.com.
kencool 2008-05-12
1.流程数据和业务数据要分离,界面中再整合到一起。
2.“必填项”可以用onclick等验证方式实现
abo123 2008-05-12
kencool 写道
1.流程数据和业务数据要分离,界面中再整合到一起。
2.“必填项”可以用onclick等验证方式实现


分离是好理解,也容易实现。分离之后如何联系在一起呢 ?难道在界面<手动地>关联吗? 在数据层面不建立关联吗?不需要设定那个节点需要<自动地>关联哪些数据吗? 多谢大家的指点。
isky 2008-05-13
一直关注你们
kencool 2008-05-13
一个流程和哪些业务数据关联当然要持久化到数据库中的,不用细化到每个节点吧?暂时没看到这样的实际需求。

界面中负责整合,是用相应的关联数据显示相应的业务数据。
wang19841229 2008-05-14
我现在使用的一个工作流,就是将流程和业务数据分离,再用业务数据和流程数据利用字段进行关联
ppig 2008-05-14
我们现在用到的就是把流程数据和业务数据分离,就是考虑到如果把太多的业务数据和流程数据混在一起不方便维护。
目前的做法就是只在流程里放一些key或者id

2、如何来控制必须先填写(处理)业务数据,才能继续流程的流转? 是通过设置一个《完成变量》吗?如果已经填写业务信息,就把变量设置为true??
--如果是一些“必填项来决定流程的流转”,那么这个必填项应该也是流程数据的一部分,我的做法是增加一个流程变量表示。想想“是否已经填写业务信息”本身就应该作为流程变量来理解,而不是业务数据。
kadywen 2008-05-31
同意楼上的方案,个人觉得在流程中尽量少使用变量,必须的变量也就保存索引主键,要是把一大堆业务数据保存到流程中是很不好的。而且,在流程中保存一个id或者key实现方式比较简单,更清晰一些。

思考一个问题:对于不同的信息应该有不同的处理方法,那么光是id记录的是不够的,我的实现方法是:建立一套jbpm流程与业务信息的映射关系(相当于一个映射矩阵)在查询时首先获得信息数据或流程数据,然后通过映射矩阵获得id、适配器信息,由适配器获得数据并建立关联,这样流程和信息完全分离,相互均不保存数据。

至于先填业务数据,再流转,简单的实现一个标签就能解决问题,可以在后天Java实现;也可以JavaScript实现。基本思路就是根据业务数据是否填写控制流程驱动按钮。没必要保存一个生命期很短,而且没什么实际意义的开关变量。
xl801026 2008-06-05
我觉得可以在jbpm中设置一个变量存业务数据主键,用这个主键关联所有该业务的数据,这样就要求流程启动后要有这个主键值。还可以在业务主表种存流程实例的键值,这种思路后期可以做统计查询的时候用
javadev 2008-06-06
我对jbpm不是很熟,正在学习中,但大家上面讨论的内容对我很有帮助,继续关注中,因为我们也遇到了类似的问题。