• 驰骋工作流程引擎多人待办处理模式的升级


    多人待办工作处理模式,也是待办处理模式。是当接受的节点是多个人的时候,如何处理待办?

    wps4B7F.tmp

    根据不用的场景,ccbpm把多人在普通节点下的处理模式分为如下几种。

    抢办模式:

    A发送到B ,B节点上有n个人可以处理。这n个人都可以看到待办,当其中一个人处理后,其他人的待办就消失了。这样的工作模式属于抢办,这n个人可以同时打开,当一个人发送后,其他人都不能在发送了。通俗的说,也就是谁抢到了这件工作,就是谁处理的。抢办模式是一个默认的处理模式。

    协作模式:

    A发送到B ,B节点上有n个人可以处理。这个n个人都可以去处理,都可以去发送,有最后一个处理人发送到下一个节点上去,这n个人的处理不分顺序。这样的模式我们叫做协作模式。

    协作模式通常用在具有审核组件的表单中,每个人都可以填写自己的意见,发表自己的看法,在审核组件里审核每个人在一个节点上只能写入一条数据,也就是说只能表达一次意见。

    也经常用在传阅的情况下,必须这些人都读取了,知道了才能向下运动。它与抄送不同的地方是,抄送可以不看,就可以向下运行,但是他必须处理才能向下运行。

    通常的协作模式,就是多人都要点击一下发送功能按钮,来确认自己处理了,确认自己同意了或者认可了。

    队列模式:

    A发送到B ,B节点上有n个人可以处理。这个n个人按照设置的先后顺序去处理,在同一个时间点必须有一个人待办,其他人看不到。

    应用场景: 一个公文发送给一个部门,该部门下n个人可以接受(注意这是一个节点),按照国内的行政制度,这n个人会从小到达排一个队列,有最小的级别的工作人员审批,然后依次类推,走到最后由最后一个人发送到下一个节点去。这n个人都是该节点的处理人,这n个人的审核步骤是由他们的顺序确定的,所以在设置该节点的接受人时,要按照顺序执行。

    通常这样的模式也与审核组件一起使用,每个人表达意见后,就发送到下一个节点,当然这样的模式也

    共享模式:

    A发送到B ,B节点上有n个人可以处理。ccbpm有一个任务池,这写人都需要从这个任务池里获取。

      关于对ccbpm任务池的描述:

      1,在流程属性与全局配置设置了启动任务池的状态下,如果一个节点遇到多个人处理,这个任务就放在了任务池里,只有参与处理的人人员才能看得到。

      2,工作人员在处理该工作之前需要申请,放到自己的代办里,一人申请之后,其他人就不能申请了,多个人同时申请第一个人申请的先得到。

      3,申请之后,任务池里就不出现在条工作而是进入了被申请人的待办里。

      4,如果申请人处理不了这件工作,他可以把该工作放入任务池中,放入任务池的工作可以被其他的N个人可以看到。

      5,不管取回与放入,都需要写入流程日志。

    6,任务池的设计:  

      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 是否启用任务池? 此字段用来控制该流程是否启用任务池。

    协作组长模式:

    这个模式与协作模式区别在于,如果当前的人员中有一个是组长(领导),他在执行发送的时候就标记这个流程结束。

    这种模式有如下3中情况:

    第一种:接受人员列表里没有领导/组长,这种模式与协作模式是一样的,就是所有的成员都表态(举手)才能向下发送。

    第二种:只有一个领导/组长的情况,领导/组长向下发送的时候,标识该节点完成。比如: 当前节点是一个采样节点,采样组有1个组长n个组员,只有组长向下发送的时候才标记次流程完成。

    第三种:有n个领导/组长的情况,n>=1 任何一个领导/组长向下发送的时候标记该流程完成。比如:当前节点的采样任务交给了两个采样组负责,有两个组长n个成员,任何一个组长向下发送,标记流程结束。

    怎么标记该其中一个成员是领导?当前登录人员是所在的部门的领导,他就是组长或者领导,我们用sql表达如下。SELECT COUNT(No) AS num FROM Port_Dept WHERE No='"+WebUser.FK_Dept+"' AND Leader='"+WebUser.No+"'

      任务池的SDK接口:

      1,获得共享任务: DB_TaskPool

      2,获得共享任务中我的待办:DB_TaskPoolOfMy

      3,从共享任务中取回:Node_TaskPoolTakebackOne

      4,把取回的共享任务放入任务池: Node_TaskPoolPutOne

  • 相关阅读:
    Linux 共享库
    使用Visual Studio(VS)开发Qt程序代码提示功能的实现(转)
    ZOJ 3469 Food Delivery(区间DP)
    POJ 2955 Brackets (区间DP)
    HDU 3555 Bomb(数位DP)
    HDU 2089 不要62(数位DP)
    UESTC 1307 windy数(数位DP)
    HDU 4352 XHXJ's LIS(数位DP)
    POJ 3252 Round Numbers(数位DP)
    HDU 2476 String painter (区间DP)
  • 原文地址:https://www.cnblogs.com/fdsfa/p/6288409.html
Copyright © 2020-2023  润新知