Devin~Y 2024-05-14 15:09 采纳率: 0%
浏览 82

Camunda流程引擎实现会签拒绝

你们好,请问一下,流程引擎中,对于会签任务想要拒绝如何实现?市面上的教程拒绝都是删除流程实例,如何实现只是任务被拒绝但是不会删除流程实例。
这里我进行补充说明一下,我使用的流程引擎是Camunda,对于Camunda会签拒绝这个任务,我想到的实现效果是,比如一个共有5个人需要审批任务,我设置的会签通过比例是3/5,例如第一个人同意,第二个人点拒绝,此时如何实现这个拒绝?这个人拒绝后可以第三个人继续审批,一直到五个人审批完,才会有结果这个会签任务是拒绝回退还是同意扭转到下一节点

  • 写回答

2条回答 默认 最新

  • 笑面虎 2024-05-14 15:09
    关注

    以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


    【您想要解决的问题】:您想要解决的问题是在Camunda流程引擎中实现会签任务的拒绝功能,而不是简单地删除整个流程实例。您希望当一个会签任务被某个审批者拒绝时,这个拒绝不会立即终止流程,而是允许其他审批者继续审批,直到所有审批者都完成他们的审批动作,再根据预设的通过比例决定流程是继续执行还是被回退。

    【问题出现原因】:这个问题出现的原因是Camunda默认的拒绝行为可能是终止流程实例,而不是仅仅拒绝一个任务。这可能不满足某些业务场景的需求,比如需要多个审批者参与决策的会签场景。

    【问题解决方案】:为了实现您想要的效果,您需要自定义Camunda的BPMN行为。这通常涉及到以下几个步骤:

    1. 定义审批者集合和审批计数器:在流程模型中定义一个变量来存储审批者集合和已审批的计数器。
    2. 实现审批逻辑:在用户界面上,为每个审批者提供一个审批操作,该操作将触发一个BPMN执行监听器。
    3. 编写BPMN执行监听器:在BPMN执行监听器中,更新审批计数器,并根据当前的审批状态和预设的通过比例来决定流程的下一步。
    4. 使用排他网关(Exclusive Gateway):在BPMN模型中使用排他网关来根据审批结果决定流程分支。

    【提供代码】:以下是一个简化的BPMN模型片段,用于说明如何实现会签逻辑:

    <serviceTask id="approveTask" camunda:delegateExpression="${approveDelegate}" />
    <exclusiveGateway id="decisionGateway" />
    <sequenceFlow id="flow1" sourceRef="approveTask" targetRef="decisionGateway" />
    <sequenceFlow id="flow2" sourceRef="decisionGateway" targetRef="nextTask">
        <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approveCounter >= 3}]]></conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="flow3" sourceRef="decisionGateway" targetRef="rejectEndEvent">
        <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approveCounter < 3}]]></conditionExpression>
    </sequenceFlow>
    

    以及一个Java委托类的示例:

    public class ApproveDelegate implements JavaDelegate {
        public void execute(DelegateExecution execution) throws Exception {
            int approveCounter = (int) execution.getVariable("approveCounter");
            List<String> approvers = (List<String>) execution.getVariable("approvers");
            String currentUser = (String) execution.getVariable("currentUser");
            
            if (!approvers.contains(currentUser)) {
                approvers.add(currentUser);
                execution.setVariable("approvers", approvers);
                approveCounter++;
                execution.setVariable("approveCounter", approveCounter);
            }
        }
    }
    

    【代码运行方式】:您需要将上述BPMN模型部署到Camunda引擎中,并将Java委托类部署到Java应用服务器上,确保Camunda可以调用它。

    【代码预期运行结果】:当审批者执行审批操作时,会签逻辑将根据当前的审批计数器和预设的通过比例来决定流程是继续执行到下一个任务还是被回退。

    【推荐相关链接】:

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月14日

悬赏问题

  • ¥18 help me! 希望大家来看看 吉~
  • ¥15 C++显示超限兔子集结
  • ¥15 sql server 2012的下载出错
  • ¥15 图像识别用户软件开发
  • ¥20 类原生rom lineageos
  • ¥15 有没有会做中专,云计算,卷子的,有偿一百块
  • ¥15 HC32串口DMA循环发送数据
  • ¥15 Uni-App实现飞书授权登陆
  • ¥50 Qt应用中如何通过代码打开开发者工具devtools
  • ¥20 mpp硬解码h264转为yuv