ccflow 驰骋工作流引擎的共享任务,应用背景,设置,设计,sdk接口
-------------------------------------------------------------------
在以前的版本中,如果多人处理一个工作,ccflow 按照强办处理,比如: a 发送到 b , 在B 点如果N人处理(N>=2),其中的一个人处理完成后,其他的人就不能看到了,如果多个人同时打开了,一个人发送了,另外的一个人在执行发送就会提示发送错误。
以上的应用场景具有一定的局限性,如果处理得工作人员有多个,容易出现工作交叉处理的情况,为此ccflow启用了任务池的概念。
关于对ccflow任务池的描述:
1,在流程属性与全局配置设置了启动任务池的状态下,如果一个节点遇到多个人处理,这个任务就放在了任务池里,只有参与处理的人人员才能看得到。
2,工作人员在处理该工作之前需要申请,放到自己的代办里,一人申请之后,其他人就不能申请了,多个人同时申请第一个人申请的先得到。
3,申请之后,任务池里就不出现在条工作而是进入了被申请人的待办里。
4,如果申请人处理不了这件工作,他可以把该工作放入任务池中,放入任务池的工作可以被其他的N个人可以看到。
5,不管取回与放入,都需要写入流程日志。
任务池的功能启用:
1,任务池功能有两个地方配置,web.config , 与流程属性,属性名称都是: IsEnableTaskPool 是否启用任务池。
2,web.config 中的配置,是用来说明全局是否启用任务池?如果全局启用了任务池,流程属性里的 IsEnableTaskPool 设置才有效。
3,如果全局启用了任务池,但是个别的流程不使用任务池,就在流程属性里单独配置它,这样既可以解决有一些流程需要启用任务池,有一些流程不需要任务池的需要。
任务池的设计:
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