camunda 流程引擎如何实现 【知会】功能 ?

camunda 流程引擎如何实现 【知会】功能 ?在做流程引擎二次开发时 业务方一般都会要求实现 知会 功能 要实现这个功能 我想首先应该弄清楚 知会 到底什么意思 下面是百度百科的解释 业务方提出了需求 在进一步沟通后 确认业务方就是想让这条流程让某某人知道 能看到这条信息 这让我想起邮箱里面的 抄送

大家好,我是讯享网,很高兴认识大家。

在做流程引擎二次开发时,业务方一般都会要求实现【知会】功能,要实现这个功能,我想首先应该弄清楚,【知会】到底什么意思?

下面是百度百科的解释。


讯享网

业务方提出了需求,在进一步沟通后。确认业务方就是想让这条流程让某某人知道,能看到这条信息。

这让我想起邮箱里面的 抄送 功能,感觉这2者异曲同工,功能实现是一样的,只是叫法不一样。

 

既然理解了需求,接下来开始干就完了。

没想到刚开始就遇到问题了。 真是烦人!

流程引擎是把整个业务流程抽象成一个一个结点,在每个结点产生任务,让一个人或多人完成,一个节点完成就流转到下一个节点。 可问题是在用camunda的画流程工具里面没有【知会】这样的结点,我CAO这该如何搞!!

 

这不得不让我停下编码,重新整理整个过程。既然【知会】实现的功能是想让人看到一条流程,我是不是只需要在特定的表里写一条数据(包含:流程,想看的人)是不是就可以了。

这让我又想到【知会】可能会有2种情况:

a: 流程中:自动知会;

b:流程外:参与流程任务的人主动知会某人。

经过上面的整理,思路终于清楚了,心里忍不住窃喜,我终于可以开始编码了。

 

 

上面是我画的一个报帐申请的流程图。老板对进帐没感觉,但对出帐却要求钱不管多少,每一笔他都需要知道。

所以在上面加一个自动任务的节点(右边选择Java Class,   在填上实例的Java类路径 ,)自动实现【知会】老板的功能,也就是向表中添加一条数据。

通过查看Camunda的表设计,结合上面的分析【知会】产生的数据需要写到:ACT_RU_TASK 表中。

下图:在【申请人】节点需要上传的参数及值

 

参数说明:

        assignee: 参数为需要知会的人ID

        executionId: 执行ID(ACT_RU_EXECUTION表的ID

下面贴出自动【知会】的代码,是能够正常运行:

package com.bpm.config; import lombok.extern.slf4j.Slf4j; import org.camunda.bpm.engine.delegate.DelegateExecution; import org.camunda.bpm.engine.delegate.JavaDelegate; import org.camunda.bpm.engine.impl.persistence.entity.TaskEntity; import org.springframework.stereotype.Component; import java.util.Date; import java.util.UUID; / * 自动知会 */ @Slf4j @Component public class AutoInfoService implements JavaDelegate {     @Override     public void execute(DelegateExecution execution) throws Exception {         try{             // 如果是知会多个人 以 ,隔开             String assignees = execution.getVariable("assignee").toString().trim();             String[] assigneeArray = assignees.split(",");             for (String assignee : assigneeArray){                 TaskEntity taskEntity = new TaskEntity();                 taskEntity.setId(UUID.randomUUID().toString());                 taskEntity.setRevision(1);                 taskEntity.setExecutionId(execution.getVariable("executionId").toString());                 taskEntity.setProcessInstanceId(execution.getProcessInstanceId());                 taskEntity.setProcessDefinitionId(execution.getProcessDefinitionId());                 taskEntity.setName(execution.getCurrentActivityName());                 taskEntity.setParentTaskId("自动知会");                 taskEntity.setDescription("自动知会");                 taskEntity.setTaskDefinitionKey(execution.getCurrentActivityId());                 taskEntity.setPriority(50);                 taskEntity.setCreateTime(new Date());                 taskEntity.setSuspensionState(1);                 taskEntity.setAssignee(assignee.trim());                 taskEntity.insert();             }         }catch (Exception e){             throw new Exception("自动知会 异常 ", e);         }     } }

讯享网

执行上面的节点后,会在 ACT_RU_TASK 表中增加2条数据。

以上用是在流程中有自动【知会】的节点的代码。

以下为在流程外,手动【知会】的功能实现:

讯享网public String handleInfo(String taskId, String assignees, String executionId){     if(StringUtils.isBlank(taskId)){         return "任务ID不能为空";     }     if(StringUtils.isBlank(assignees)){         return "知会人不能为空";     }     if(StringUtils.isBlank(executionId)){         return "执行ID不能为空";     }     Task task = taskService.createTaskQuery().taskId(taskId).singleResult();     if(ObjectUtils.isEmpty(task)){         return "没有查询到当前任务";     }     String[] assigneeArray = assignees.split(",");     for (String assignee : assigneeArray){         TaskEntity taskEntity = new TaskEntity();         taskEntity.setId(UUID.randomUUID().toString());         taskEntity.setRevision(1);         taskEntity.setExecutionId(task.getExecutionId());         taskEntity.setProcessInstanceId(task.getProcessInstanceId());         taskEntity.setProcessDefinitionId(task.getProcessDefinitionId());         taskEntity.setName("手动知会");         taskEntity.setParentTaskId(task.getParentTaskId());         taskEntity.setDescription("手动知会");         taskEntity.setTaskDefinitionKey(task.getTaskDefinitionKey());         taskEntity.setPriority(50);         taskEntity.setCreateTime(new Date());         taskEntity.setSuspensionState(1);         taskEntity.setAssignee(assignee.trim());         taskEntity.insert();     }     return ""; }
小讯
上一篇 2025-01-28 18:14
下一篇 2025-01-11 18:02

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/59667.html