您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页Activiti实现会签功能

Activiti实现会签功能

来源:意榕旅游网
Activiti实现会签功能

⼀个任务需要多个⾓⾊进⾏审批或者表决,根据这些审批结果来决定流程的⾛向。实现以上任务,activiti已经提供了⽀持,可以使⽤BPMN规范的多实例活动来实现。

1.Activiti多实例:

多实例节点是在业务流程中定义重复环节的⼀个⽅法。 从开发⾓度讲,多实例和循环是⼀样的: 它可以根据给定的集合,为每个元素执⾏⼀个环节甚⾄⼀个完整的⼦流程, 既可以顺序依次执⾏也可以并发同步执⾏。

多实例是在⼀个普通的节点上添加了额外的属性定义 (所以叫做'多实例特性'),这样运⾏时节点就会执⾏多次。 下⾯的节点都可以成为⼀个多实例节点:User TaskScript TaskJava Service TaskWeb Service TaskBusiness Rule TaskEmail TaskManual TaskReceive Task

(Embedded) Sub-ProcessCall Activity

根据规范的要求,每个上级流程为每个实例创建分⽀时都要提供如下变量:nrOfInstances:实例总数

nrOfActiveInstances:当前活动的,⽐如,还没完成的,实例数量。 对于顺序执⾏的多实例,值⼀直为1。nrOfCompletedInstances:已经完成实例的数⽬。可以通过execution.getVariable(x)⽅法获得这些变量。

另外,每个创建的分⽀都会有分⽀级别的本地变量(⽐如,其他实例不可见, 不会保存到流程实例级别):

loopCounter:表⽰特定实例的在循环的索引值。可以使⽤activiti的elementIndexVariable属性修改loopCounter的变量名。图形标记

如果节点是多实例的,会在节点底部显⽰三条短线。 三条竖线表⽰实例会并⾏执⾏。 三条横线表⽰顺序执⾏。

Xml内容

要把⼀个节点设置为多实例,节点xml元素必须设置⼀个multiInstanceLoopCharacteristics⼦元素。 ...

isSequential属性表⽰节点是进⾏ 顺序执⾏还是并⾏执⾏。

实例的数量会在进⼊节点时计算⼀次。 有⼀些⽅法配置它。⼀种⽅法是使⽤loopCardinality⼦元素直接指定⼀个数字。 5也可以使⽤结果为整数的表达式:

${nrOfOrders-nrOfCancellations}

另⼀个定义实例数⽬的⽅法是,通过loopDataInputRef⼦元素,设置⼀个类型为集合的流程变量名。 对于集合中的每个元素,都会创建⼀个实例。 也可以通过inputDataItem⼦元素指定集合。 下⾯的代码演⽰了这些配置:

assigneeList

假设assigneeList变量包含这些值[kermit, gonzo, foziee]。 在上⾯代码中,三个⽤户任务会同时创建。每个分⽀都会拥有⼀个⽤名为assignee的流程变量, 这个变量会包含集合中的对应元素,在例⼦中会⽤来设置⽤户任务的分配者。

loopDataInputRef和inputDataItem的缺点是1)名字不好记, 2)根据BPMN 2.0格式定义,它们不能包含表达式。activiti通过在 multiInstanceCharacteristics中设置 collection和 elementVariable属性解决了这个问题:

activiti:collection=\"${myService.resolveUsersForTask()}\" activiti:elementVariable=\"assignee\" >

多实例节点在所有实例都完成时才会结束。也可以指定⼀个表达式在每个实例结束时执⾏。 如果表达式返回true,所有其他的实例都会销毁,多实例节点也会结束,流程会继续执⾏。 这个表达式必须定义在completionCondition⼦元素中。

activiti:collection=\"assigneeList\" activiti:elementVariable=\"assignee\" >

${nrOfCompletedInstances/nrOfInstances >= 0.6 }

在这⾥例⼦中,会为assigneeList集合的每个元素创建⼀个并⾏的实例。 当60%的任务完成时,其他任务就会删除,流程继续执⾏。以上内容为Activiti⽤户⼿册的内容,下⾯实现⼀个简单地流程2.流程实现流程图为:properties:

XML:

${nrOfCompletedInstances/nrOfInstances >= 0.6 }

发布流程:

Deployment deployment = repositoryService.createDeployment()

.addClasspathResource(\"com/chq/ssh/test/activiti/deploy/huiqian.bpmn20.xml\") .deploy();启动流程:

List assigneeList=new ArrayList(); //分配任务的⼈员assigneeList.add(\"tom\");assigneeList.add(\"jeck\");assigneeList.add(\"mary\");

Map vars = new HashMap(); //参数vars.put(\"assigneeList\

ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(\"huiqian\

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务