会签2:会签的主要后台JAVA代码

指定会签任务,流转到任务节点会自动生成若干个会签任务,我们需要在任务完成前设置一些流程变量传递过去让流程判断自己何时结束,传递参数的主要后台JAVA代码:

//判断是否是会签任务
        BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
        Collection<FlowElement> flowElements =bpmnModel.getMainProcess().getFlowElements();
        String sequentialType="notEnabled",taskRate="50";

        for(FlowElement e : flowElements) {
            if(e.getId().equals(task.getTaskDefinitionKey())){
                if(e.getAttributes().containsKey("sequentialType")) {
                    sequentialType = e.getAttributes().get("sequentialType").get(0).getValue();
                }
                if(e.getAttributes().containsKey("taskRate")){
                    taskRate=(String)e.getAttributes().get("taskRate").get(0).getValue();
                }
            }
        }

        //会签节点设置
        if(StringUtils.equals(sequentialType,"notEnabled")){
            //不是会签节点
            map.values().removeIf(key -> key == "taskRate");
            map.values().removeIf(key -> key == "nrOfAgreeInstances");
        }else{
            //会签设置
            map.put("taskRate",taskRate);
            //通过数
            int nrOfAgreeInstances=0;
            if(runtimeService.getVariable(task.getProcessInstanceId(),"nrOfAgreeInstances")!=null){
                String agreeCount=String.valueOf(runtimeService.getVariable(task.getProcessInstanceId(),"nrOfAgreeInstances"));
                if(StringUtils.isNotEmpty(agreeCount)){
                    nrOfAgreeInstances=Integer.valueOf(agreeCount);
                }
            }
            if(StringUtils.equals((String)map.get("taskResult"),"agree")){
                nrOfAgreeInstances++;
            }
            map.put("nrOfAgreeInstances",nrOfAgreeInstances);

            runtimeService.setVariable(task.getProcessInstanceId(),"nrOfAgreeInstances",nrOfAgreeInstances);
        }

计算投票通过的人数,取出任务完成率(通过率)的阈值传递到流程里面,然后完成任务。

taskService.setVariablesLocal(task.getId(), map);
taskService.complete(taskId, map);

设计器这样的,然后看下完成的截图,大概长这样。

在 Flowable 中,要实现会签多实例任务的退回,可以通过以下步骤进行操作: 1. 首先,创建一个实现了 MultiInstanceActivityBehavior 接口的自定义活动行为类。这个类将负责处理会签多实例任务的具体逻辑。 ```java public class MyMultiInstanceActivityBehavior implements MultiInstanceActivityBehavior { // 实现 MultiInstanceActivityBehavior 接口的方法 // ... } ``` 2. 在该类中,实现 `leave` 方法,该方法负责处理会签任务每个实例完成后的操作。在这个方法中,可以判断每个实例的完成情况,并根据需要进行退回操作。 ```java @Override public void leave(ActivityExecution execution) { // 判断当前实例是否需要退回 if (shouldReject(execution)) { // 获取会签任务的执行实例 ExecutionEntity multiInstanceExecution = (ExecutionEntity) execution.getParent(); // 将当前实例退回到上一步 CommandContext commandContext = Context.getCommandContext(); commandContext.getExecutionEntityManager().deleteChildExecutions(execution.getParent()); commandContext.getAgenda().planContinueMultiInstanceOperation(multiInstanceExecution); } else { // 正常离开会签任务 super.leave(execution); } } ``` 3. 将自定义的活动行为类应用到会签多实例任务的流程定义中。在 BPMN 文件中,使用 `class` 属性指定自定义类的全限定名。 ```xml <userTask id="multiInstanceTask" name="Multi-Instance Task" flowable:activiti:class="com.example.MyMultiInstanceActivityBehavior" /> ``` 通过以上步骤,就可以在 Flowable 中实现会签多实例任务的退回功能。自定义的活动行为类中的 `leave` 方法可以根据业务逻辑判断是否需要退回,并执行相应的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值