ccflow 驰骋工做流引擎的共享任务,应用背景,设置,设计,sdk接口
------------------------------------------------------------------- web
在之前的版本中,若是多人处理一个工做,ccflow 按照强办处理,好比: a 发送到 b , 在B 点若是N人处理(N>=2),其中的一我的处理完成后,其余的人就不能看到了,若是多我的同时打开了,一我的发送了,另外的一我的在执行发送就会提示发送错误。 ui
以上的应用场景具备必定的局限性,若是处理得工做人员有多个,容易出现工做交叉处理的状况,为此ccflow启用了任务池的概念。 设计
关于对ccflow任务池的描述: 日志
1,在流程属性与全局配置设置了启动任务池的状态下,若是一个节点遇到多我的处理,这个任务就放在了任务池里,只有参与处理的人人员才能看获得。
2,工做人员在处理该工做以前须要申请,放到本身的代办里,一人申请以后,其余人就不能申请了,多我的同时申请第一我的申请的先获得。
3,申请以后,任务池里就不出如今条工做而是进入了被申请人的待办里。
4,若是申请人处理不了这件工做,他能够把该工做放入任务池中,放入任务池的工做能够被其余的N我的能够看到。
5,无论取回与放入,都须要写入流程日志。 接口
任务池的功能启用: 工作流
1,任务池功能有两个地方配置,web.config , 与流程属性,属性名称都是: IsEnableTaskPool 是否启用任务池。 配置
2,web.config 中的配置,是用来讲明全局是否启用任务池?若是全局启用了任务池,流程属性里的 IsEnableTaskPool 设置才有效。 List
3,若是全局启用了任务池,可是个别的流程不使用任务池,就在流程属性里单独配置它,这样既能够解决有一些流程须要启用任务池,有一些流程不须要任务池的须要。 sdk
任务池的设计: co
1,在流程引擎控制表 WF_GenerWorkFlow 中增长了以下字段:
TaskSta, 枚举类型, 0=不启用,1=共享,2=被申请。
TodoEmpsNum,int类型,处理人员数量,当前节点工做有多少人待办,若是此值大于等于2,讨论共享任务才有意义。
TodoEmps varchar(500) 待办人员,格式为 处理人员编号,处理人员名称; 好比:guobaogeng,郭宝庚;fuhui,福惠;
2,在流程引擎控制表的人员列表中 WF_GenerWorkerList 中对于IsEnable字段,进行扩充了,若是等于 -1=任务池禁用,0=分配工做被屏蔽,1=正常。
3,增长了一个功能界面 /WF/TaskPoolSmaller.aspx 次功能界面是有在任务池启用才能被使用。
4,在流程属性里增长一个字段 IsEnableTaskPool 是否启用任务池? 此字段用来控制该流程是否启用任务池。
任务池的SDK接口:
1,得到共享任务: DB_TaskPool
2,得到共享任务中个人待办:DB_TaskPoolOfMy
3,从共享任务中取回:Node_TaskPoolTakebackOne
4,把取回的共享任务放入任务池: Node_TaskPoolPutOne