论坛首页 Java企业应用论坛

jbpm里,如何将各个任务节点同大量参与者绑定起来?

浏览 4760 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-09-21  

简单地绑定指定的参与者,这个没什么问题。

我现在有三个泳道,代码如下:

xml 代码
  1. <swimlane name="受理者">  
  2.     <assignment class="com.xxx.workflow.AccepAssignment"></assignment>  
  3. </swimlane>  
  4.   
  5. <swimlane name="审核者">  
  6.     <assignment class="com.xxx.workflow.VerifyAssignment"></assignment>  
  7. </swimlane>  
  8.   
  9. <swimlane name="审批者">  
  10.     <assignment class="com.xxx.workflow.ApproveAssignment"></assignment>  
  11. </swimlane>  

这三个泳道分别委托给三个类了。

事实上,在实际的应用中,这三个泳道分别对应着几十个机构里几百个用户。我是准备将用户与任务关联起来。那么,我应该如何将这几百个用户同受理者,审核者,审批者对应起来呢?而且,在实际工作中,可能会有变化,如这个用户原来是审核者,后来变成审批者了。

 

   发表时间:2007-09-21  
有没有人知道啊?我知道一般的系统里可能只有一个机构,一些角色和用户,这种情况肯定很好处理。可是我有几十个机构啊。
0 请登录后投票
   发表时间:2007-09-21  
任务分配比较复杂的话可以考虑结合Drools来做
0 请登录后投票
   发表时间:2007-09-21  

以下是我和一位朋友讨论这个问题时的记录:

胡萝卜(634369863) 16:32:47
但是,我有几十个机构,几百个用户。而且如果全市推进,就会有几百个机构,几千个用户。
胡萝卜(634369863) 16:33:08
这种情况该如何处理啊?
胡萝卜(634369863) 16:33:50
给个思路也行啊。
胡萝卜(634369863) 16:34:35
山楂泡水 Mansan 飞
胡萝卜(634369863) 16:35:31
如果没有思路,说说你们自己的用户组织绑定的处理方法也啊。
山楂泡水(43154448) 16:35:55
我们项目刚开始用JBPM 没有什么经验
胡萝卜(634369863) 16:36:14
有多少用户?
山楂泡水(43154448) 16:36:24
100人吧
胡萝卜(634369863) 16:36:43
准备如何将这些些用户或角色与任务绑定呢?
飞(373271457) 16:37:23
是什么样的业务逻辑?
胡萝卜(634369863) 16:37:34
是写死在xml里,还是开发一个管理程序,批量选择用户,然后用程序写到xml里,最后再部署到数据库?
山楂泡水(43154448) 16:37:52
写死XML

胡萝卜(634369863) 16:38:50
业务流程倒不复杂。
胡萝卜(634369863) 16:39:14
 
胡萝卜(634369863) 16:40:23
山楂泡水,看到我的流程图了吗?
山楂泡水(43154448) 16:41:48
看到了
山楂泡水(43154448) 16:42:22
挺复杂的啊
胡萝卜(634369863) 16:42:51
那倒没什么关系。关键是用户机构太多,
飞(373271457) 16:43:10
是不是可以自己定义一些swimlane这样处理?
山楂泡水(43154448) 16:43:13
你们以前用过JBPM没有?
胡萝卜(634369863) 16:43:25
就是定义的swimlane啊。没。
胡萝卜(634369863) 16:43:51
 
胡萝卜(634369863) 16:44:05
三个泳道。
飞(373271457) 16:45:57
这样的方式不可以么,可根据需要获取一组用户放到这些泳道里吧
胡萝卜(634369863) 16:46:52
你的意思是在泳道的那个类里,写上一些SQL语句,根据需要获得一些用户?
胡萝卜(634369863) 16:50:22
在用户组织里,哪些用户是“受理者”,哪些用户是“审核者”,哪些用户是“审批者”,是没有记录的。也不可能这样分类。
Mansan(17629634) 16:50:41
其实要绑定用户到一些节点中去,只有一个办法,就是用角色管理你的用户,然后把角色set到你的流程实例中去。这也是jbpm设计的出发点,如你定义的流程中,"审批者"可以作为你的系统角色不行吗?
胡萝卜(634369863) 16:51:07
"审批者"可以作为我的系统角色
Mansan(17629634) 16:51:16
就是了,
Mansan(17629634) 16:52:02
那你可以把这个审批者角色分配置给那些你希望参考这个角色的工作的人员就可以了
Mansan(17629634) 16:52:12
这看你的系统权限这块是怎么弄的
胡萝卜(634369863) 16:52:14
问题是,一个机构里,有一个审批者的角色。现在我有几十个机构,里面都有“审批者”。
Mansan(17629634) 16:52:37
不对了
Mansan(17629634) 16:52:52
审批者的角色只有一个,所有的机构都共用
飞(373271457) 16:53:06
嗯,应该这样的
Mansan(17629634) 16:53:16
你的系统是基于角色管理的吧
胡萝卜(634369863) 16:53:42
我们的系统是以分机构的,每个机构可以有自己的角色。
Mansan(17629634) 16:54:21
是b/s的系统吧
Mansan(17629634) 16:54:57
我们的系统是以分机构的,每个机构可以有自己的角色。---这跟共用角色没有冲突
飞(373271457) 16:55:16
在这个流程里可以定义自己的角色,属于这个流程的,成员可以来源于各个机构,是这样理解么
Mansan(17629634) 16:55:50
每个机构可以定义他们的角色,那些角色就给他们自己的机构用,有些是全局的角色,可以每个机构都用
胡萝卜(634369863) 16:55:50
bs。就算是按你说的,“审批者的角色只有一个,所有的机构都共用”,那么,当一份公文的流程走到审批者这里后,那岂不是所有的机构里的有审批者角色的人都能看到这公文?
Mansan(17629634) 16:56:40
嗯,这样你还需要过滤一下,加上机构的id
保赢(35131698) 16:57:22
如Masan所说,机构id传到Assign类中就可以了
胡萝卜(634369863) 16:57:30
机构id加在哪里呢?
胡萝卜(634369863) 16:57:47
作为一个变量?
Mansan(17629634) 16:59:10
目前的问题就是,你该如何显示给当前审批者角色的用户看到自己需要审批的流程
Mansan(17629634) 16:59:26
是不是?
Mansan(17629634) 16:59:48
而不能看到其他机构的审批流程
胡萝卜(634369863) 16:59:59
 这是一个问题。还有一个问题,我该如何设置泳道里的参与者。
胡萝卜(634369863) 17:00:21
因为机构很多,而我不可能每个机构都去搞一个xml配置。
Mansan(17629634) 17:00:38
这个简单,可以在定义文件里完成,所有的机构共用一个xml配置文件
胡萝卜(634369863) 17:01:13
对。我就是想所有的机构共用一个xml配置文件,只要他们的流程是一致的就行。
Mansan(17629634) 17:01:44
对,除非每个机构审批流程不一样
胡萝卜(634369863) 17:01:56
为了达到共用一个配置文件,就不能把参与者写死在xml里。
胡萝卜(634369863) 17:02:09
这就产生了我们刚才说的那个问题。
Mansan(17629634) 17:02:47
我想想
Mansan(17629634) 17:04:28
你应该有一个中间表,来记录当前启动流程的实例id,及启动者的部门id
Mansan(17629634) 17:04:49
目前不知道你有没有
胡萝卜(634369863) 17:05:09
有。
胡萝卜(634369863) 17:06:59
我们的流程在致是这样的:居委会受理,然后街道审核,最后,根据业务类型的不同,街道会把公文转到相应的区一级部门,如教育局,卫生局。
胡萝卜(634369863) 17:07:26
每种业务类型,我们都会设置一个xml。
Mansan(17629634) 17:08:07
那可以作为一个子流程来处理就行了
Mansan(17629634) 17:09:01
有中间表就好办,你查询的时候,就可以通过部门id过滤
Mansan(17629634) 17:09:53
刚才的问题就可以解决
胡萝卜(634369863) 17:10:32
问题是,只有一个启动者的部门id
胡萝卜(634369863) 17:10:48
如何能知道下个节点应是哪个部门?
Mansan(17629634) 17:12:52
子流程又是另外一个流程了了
胡萝卜(634369863) 17:13:40
这和子流程有关系吗?我觉得没有吧。
胡萝卜(634369863) 17:14:01
是用子流程,还是多用几个任务节点,都是可以的啊。
胡萝卜(634369863) 17:14:14
我们的系统中受理,审核,审批,这三级的部门不是固定的。也不是固定按照上下级的关系来的。
胡萝卜(634369863) 17:14:46
说得不是很准确。
胡萝卜(634369863) 17:16:14
现在,我有当前启动流程的实例id,及启动者的部门id,在xml里又有相应的角色id。因此,在受理时(启动时),是没有什么问题的。
胡萝卜(634369863) 17:19:08
受理完成以后,会转到第二个节点。由于第二个节点的参与者是审核者这个角色。因此,所有有这个角色的人都能看到这个公文。本来就想转到A街道,结果B街道也能看到。
Mansan(17629634) 17:19:47
我还不是很了解你需要实现的部门控制功能
胡萝卜(634369863) 17:20:23
我详细地说一下。
Mansan(17629634) 17:20:30
同一个流程,在运行的时候,是不是可能会跨多个部门?
胡萝卜(634369863) 17:21:22
一份公文从受理,到审核,到审批,肯定是有两个或三个的部门。
Mansan(17629634) 17:22:12
你如何指定每个部门?是人为去指定,还是已经规定了每个环节一定要由某个部门来处理
胡萝卜(634369863) 17:22:51
我们有二十多种业务。按照业务需求,每个业务的参与部门都不一样。
Mansan(17629634) 17:23:40
看来复杂不少
胡萝卜(634369863) 17:24:52
系统是一个区的综合系统。用户有区教育局,卫生局,等十个局,有二十个街道办事处。每个街道办事处下面还有一些居委会。
胡萝卜(634369863) 17:26:13
同一个业务,比如学生救助,虽然他的流程是一致的,如,都是居委会受理,街道审核,教育局审批。但是,具体到每个街道,居委,参与部门是不一样的。
胡萝卜(634369863) 17:27:33
为了简化问题,现在就当我们只有一个业务,就是学生救助。
Mansan(17629634) 17:27:36
原理还是一样,只跟角色绑定。不管你机构如何复杂。回到刚才问题中去,就是跨部门,在进行流程跨部门移交的时候,你需要在中间中设置回当前的部门id
Mansan(17629634) 17:28:48
a部门处理这件事,到b部门处理这个流程的时候,中间表就得把当前的流程设置成b部门的id
胡萝卜(634369863) 17:29:35
问题是,由于在xml中,并没有具体的指定第二个节点的部门b,公文会怎么样流转到b呢?
Mansan(17629634) 17:31:08
你说一下你们是怎么交流两个不同的部门
胡萝卜(634369863) 17:31:40
交流?
Mansan(17629634) 17:31:44
把公文流到下一个部门的时候
Mansan(17629634) 17:32:19
是不是在界面应该有一个指定部门来处理这样一个东东
Mansan(17629634) 17:32:34
表示我这个公文要移到其他部门去
胡萝卜(634369863) 17:33:25
现在用jbpm还没有做到这步。以前的工作流是我们自己做的,那时的做法是,在页面上设置一个业务的流转,具体选择受理、审核、审批这个环节的参与者(通过下拉框)
胡萝卜(634369863) 17:33:57
以前的工作流,只能选择机构作为参与者。
Mansan(17629634) 17:34:10
我就是这个意思了,jbpm是可以实现这个东西的啊
胡萝卜(634369863) 17:34:24
怎么实现?
胡萝卜(634369863) 17:34:32
在哪里指定?
Mansan(17629634) 17:35:50
你把你的这个部门的这个角色用户显示出来,在流程跳转的时候指给这个流程就可以
Mansan(17629634) 17:36:32
你理解一下jbpm提供的角色接口,应该明白的
胡萝卜(634369863) 17:36:38
你的意思是,现在我们用jbpm作为工作流,还是需要有一个类似于我们以前工作流的界面。
胡萝卜(634369863) 17:36:48
来进行设置?
Mansan(17629634) 17:37:09
是可以的啊,这根据你的业务的需要来定
Mansan(17629634) 17:37:22
jbpm还是比较灵活的
胡萝卜(634369863) 17:37:51
Mansan(17629634) 17:35:50
你把你的这个部门的这个角色用户显示出来,在流程跳转的时候指给这个流程就可以
Mansan(17629634) 17:38:07
是的
胡萝卜(634369863) 17:38:18
上面这话的意思是不是,在页面上选择各个泳道的参与者?
Mansan(17629634) 17:39:03
也可以这么认为,不过你的参与者是角色用户,不是具体的某个用户
胡萝卜(634369863) 17:39:40
那如果还是要这样来做,那jbpm的作用在哪里?
Mansan(17629634) 17:39:44
如果是按上面的来做的话,那么你的中间表还记录执行人的id才行
Mansan(17629634) 17:40:02
jbpm的流程自己走
Mansan(17629634) 17:40:25
作用就是jbpm只管流程
胡萝卜(634369863) 17:41:22
也就是说,由于我们系统的特殊性,使用jbpm就只能管流程,不能管到参与者。
胡萝卜(634369863) 17:41:51
参与者是由我们自己来管的。
Mansan(17629634) 17:42:07
可以管参与者啊,你可以用他的参与者来做,也可以用你自己的
胡萝卜(634369863) 17:42:34
没法用他的参与者啊。
Mansan(17629634) 17:42:37
不过用他的参与者,像你的系统,真是不太好搞
Mansan(17629634) 17:43:04
这是我做产品一点想法,可能也不是太好,你有更好的想法,也说说
胡萝卜(634369863) 17:43:56
我之所以想用jbpm来替代原来的工作流,就是因为它灵活,
胡萝卜(634369863) 17:44:09
可是现在
大布丁(371925163) 17:44:37
灵活带来的是复杂
胡萝卜(634369863) 17:44:44
其实说到底,像我这种系统,不管怎么样,都需要有一个界面来管理参与者。
Mansan(17629634) 17:44:59
那是要的
胡萝卜(634369863) 17:45:15
否则,难道你一个居委一个居委地去画流程?那是不可能的。
Mansan(17629634) 17:45:28
 
胡萝卜(634369863) 17:45:50
我们原来在北京做的系统,有3000多个居委会。
胡萝卜(634369863) 17:45:58
那不是要人死啊。
胡萝卜(634369863) 17:45:59
呵。
Mansan(17629634) 17:46:05

Mansan(17629634) 17:46:17
你们做都是政府系统啊
胡萝卜(634369863) 17:46:21
对。
胡萝卜(634369863) 17:47:40
我们原来的工作流,是按居委来设置流程,由于一个街道下的居委会都是一样的,因此,我们批量复制,
胡萝卜(634369863) 17:47:48
这样,就只需要设置一次。
胡萝卜(634369863) 17:48:26
不知道现在用jbpm,是不是也可以按这种思路来。
胡萝卜(634369863) 17:49:17
比如,我设置好一个业务的流程,然后,用程序将这个流程定义复制多份,每份都对应着一个唯一的居委。
胡萝卜(634369863) 17:49:49
这样,流程只是画一个,但是,在jbpm的数据库里,实际上却是多份。
胡萝卜(634369863) 17:50:39
这样,每个流程的参与者,都是写死在xml里。只不过不是手工写的,是程序写的。
胡萝卜(634369863) 17:52:24
Mansan(17629634) 17:35:50
你把你的这个部门的这个角色用户显示出来,在流程跳转的时候指给这个流程就可以
胡萝卜(634369863) 17:53:57
Mansan,你用jbpm做过系统吗?
Mansan(17629634) 17:55:02
刚才走开了
Mansan(17629634) 17:55:28
我用了jbpm写了应用于产品,不过没有你写得这么复杂
胡萝卜(634369863) 17:56:33
那如果你的参与者发生了变化,如需要增加角色或用户,是不是还需要重新生成xml,重新部署?
Mansan(17629634) 17:59:56
只要你的原来的在xml中定义的swimlane不变
胡萝卜(634369863) 18:00:25
swimlane一般不会变。
胡萝卜(634369863) 18:01:35
那你的参与者是需要有一个界面管理,不是没那么复杂,只需要在程序里查出相应的参与者就行了?
胡萝卜(634369863) 18:01:51
还是没那么复杂
胡萝卜(634369863) 18:03:24
能把你的xml和相应的swimlane中的assignment类发一些代码给我吗?
胡萝卜(634369863) 18:03:36
或者截图给我看看。
Mansan(17629634) 18:03:42
不能多说了,老总在旁边呢
胡萝卜(634369863) 18:03:48
呵。

1 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics