- A+
所属分类:工作流引擎
所谓知会,就是在流程进行到某一个节点时,通知另一个人,这个人可以看到该流程的进展,但是不会影响整个流程。
在activiti7中,虽然没有直接的方法实现,但是有一个createTask方法,用这个方法我们可以实现知会功能。因为createTask新建出来的任务,不管执行人完成或不完成任务,都不会影响到整个流程,这不正好和知会的需求是一样的吗?
整个思路如下:
- 用户在某个节点需要知会另一人时,调用createTask方法,assingee指定为要知会的人。
- 业务端维护一张知会表,把知会人和businessKey存和这张表中,代表这个人有权看到这个businessKey相对应的流程实例。
- 被知会人登录,查询知会表,如果有记录,则在前端显示有知会提示,这时想查看流程实例的具体信息时,通过businessKey来查询流程实例显示到页面。
- 如果被知会人不想老是有这个知会提示,则可以调用complete方法来完成任务,同时在知会表里更新状态,前端则不显示知会提示
整个过程看起来没什么问题,但是实际开发中发现一个严重的问题是,用createTask新建出来的任务里的businessKey是空的,这个就有点麻烦了,我们知道,activiti里业务表是通过businessKey来和流程实例相关联的,如果businessKey为空,而有两个实例都知会了某个人,那么这个人想看其中一个流程实例的具体信息就做不到了。
一个不是太好的解决方法就是,因为是在某一个节点知会另一个人, 这个节点的当前任务里是有businessKey的,那么在调用createTask方法时,把taskName的值设为businessKey,这样一来,下次查询知会记录时,就可以通过taskName拿到businessKey了。