Activiti实现抄送方案实现(监听器方式)

前言

近期在开发一个基于Activiti基础实现的工作流平台,发现目前的工作流引擎都是不太符合国内的一些业务需求的,例如国内的驳回抄送目前流行的工作流引擎都没有具体的实现。在这里记录一下相关的大致实现方案。

这里分享的是抄送业务,驳回、会签、或签功能会在其他文章中分享,若相应文章编写完毕,会在文章最下方放上相应连接。

抄送业务实现

  • 基本思路 - 监听器实现
    可以通过给抄送节点添加监听器,进而在通过自己的业务实现数据库消息表的添加。
  • 技术难点
    1. 需要在监听器中拿到Spring IOC容器中的service,
    2. 多实例的抄送(抄送多人)
  • 实现方案
    1. 拿到Spring IOC
      delegateExpression类型的监听器 ,该属性的值为 Spring IOCbean的名字
      工具添加
      在这里插入图片描述

      BPMN文件添加

      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/test" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" expressionLanguage="http://www.w3.org/1999/XPath" id="m1585975437203" name="" targetNamespace="http://www.activiti.org/test" typeLanguage="http://www.w3.org/2001/XMLSchema">
        <process id="testListener6" isClosed="false" isExecutable="true" name="测试监听器" processType="None">
          <startEvent id="_2" name="StartEvent"/>
          <endEvent id="_3" name="EndEvent"/>
          <userTask activiti:exclusive="true" id="_4" name="创建申请">
            <extensionElements>
                <activiti:taskListener delegateExpression="#{TestListener}" event="create"/>
            </extensionElements>
          </userTask>
          <userTask activiti:exclusive="true" id="_5" name="审核申请">
          </userTask>
          <sequenceFlow id="_6" sourceRef="_2" targetRef="_4"/>
          <sequenceFlow id="_7" sourceRef="_4" targetRef="_5"/>
          <sequenceFlow id="_8" sourceRef="_5" targetRef="_3"/>
        </process>
      </definitions>
      

      核心代码-注意extensionElements是包裹在userTask标签内部的

      <extensionElements>
           <activiti:taskListener delegateExpression="#{TestListener}" event="create"/>
       </extensionElements>
      
    2. 相关代码-监听器代码,这里要注意Bean的名字。

      @Component("TestListener")
      public class TestListener implements TaskListener {
         @Autowired
         TaskService taskService;
         @Override
         public void notify(DelegateTask delegateTask) {
             System.out.println("delegateTask.getAssignee() = " + delegateTask.getAssignee());
             System.out.println("delegateTask.getId() = " + delegateTask.getId());
             System.out.println("=--------------------------------=");
             taskService.complete(delegateTask.getId());
         }
      }
      

接下在监听其中编写相应逻辑即可 ,大致思路是 拿到当前task的一些信息,查询要抄送的人的信息,然后通过Spring IOC中拿到的service进行相应的业务逻辑添加(消息表新增),然后对该节点进行一个通过。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值