Camunda

一、Camunda教程
请点击此处;
比上面还详细的教程。

二、生成的数据表说明
1、总介绍
(1) act_re_*: 're'表示流程资源存储,这个前缀的表包含了流程定义和流程静态资源(图片,规则等),共5张表。
(2) act_ru_*: 'ru'表示流程运行时。 这些运行时的表,包含流程实例,任务,变量,Job等运行中的数据。 Camunda只在流程实例执行过程中保存这些数据,在流程结束时就会删除这些记录, 这样运行时表的数据量最小,可以最快运行。共15张表。
(3)act_id_*: 'id'表示组织用户信息,比如用户,组等,共6张表。
(4)act_hi_*: 'hi'表示流程历史记录。 这些表包含历史数据,比如历史流程实例,变量,任务等,共18张表。
(5)act_ge_*: 'ge'表示流程通用数据, 用于不同场景下,共3张表。

2、每个表介绍
(1)流程资源存储类

  • act_re_case_def:CMMN案例管理模型定义表
  • act_re_decision_def:DMN决策模型定义表
  • act_re_decision_req_def :决策需求定义表
  • act_re_deployment:流程部署表
  • act_re_procdef:BPMN流程模型定义表

(2)流程运行类

  • act_ru_authorization:流程运行时权限授予的表(是否使用与是否开启"camunda.bpm.authorization.enabled" : "true" or "false"有关)
  • act_ru_batch:流程执行批处理表
  • act_ru_case_execution:CMMN案例运行执行表
  • act_ru_case_sentry_part:CMMN案例运行时哨兵部分表
  • act_ru_event_subscr:流程事件订阅表
  • act_ru_execution:BPMN流程运行时记录表(运行时流程执行实例表,与流程实例并不一样)
  • act_ru_ext_task:流程任务消息执行表(运行时外部任务信息表)
  • act_ru_filter:流程定义查询配置表(运行时过滤器表)
  • act_ru_identitylink:运行时流程人员表
  • act_ru_incident:运行时异常事件表(工作流引擎突发事件表)
  • act_ru_job:流程运行时作业表
  • act_ru_jobdef :流程作业定义表
  • act_ru_meter_log:流程运行时度量日志表
  • act_ru_task:流程运行时任务表(最常用的表之一,每一个流程实例开启后,到达的每一个task都会生成在这里,也就是任务实例)
  • act_ru_variable:流程运行时变量表(在开启流程实例或者在流程推进时传入的参数,在流程未结束前,都会存储在这里,但是并不是每个节点的变量变化都在这里,比如一个布尔值的confirm如果多次传入,这里也只会存在一个confirm,但是在act_hi_detail表中会有每个节点中confirm变化的值)

(3)用户信息类

  • act_id_group:审批组信息表
  • act_id_info:用户扩展信息表
  • act_id_membership:用户和审批组之间的关系的表
  • act_id_tenant:租户信息表
  • act_id_tenant_member:用户租户关系表
  • act_id_user:用户信息表

(4)流程历史记录类

  • act_hi_actinst:历史的活动实例表
  • act_hi_attachment:历史的流程附件表
  • act_hi_batch:历史的批处理记录表
  • act_hi_caseactinst:历史的CMMN活动实例表
  • act_hi_caseinst:历史的CMMN实例表
  • act_hi_comment:历史的流程审批意见表
  • act_hi_dec_in:历史的DMN变量输入表
  • act_hi_dec_out:历史的DMN变量输出表
  • act_hi_decinst:历史的DMN实例表,包含有关决策的单个评估的信息,包括输入和输出值
  • act_hi_detail:历史的流程运行时变量详情记录表
  • act_hi_ext_task_log:历史的流程任务消息执行表
  • act_hi_identitylink:历史的流程运行过程中用户关系
  • act_hi_incident:历史的流程异常事件记录表
  • act_hi_job_log:历史的流程作业记录表
  • act_hi_op_log:历史的用户操作记录表,包含有关用户执行的操作的信息的日志条目,这用于记录操作,如创建新任务、完成任务等
  • act_hi_procinst:历史的流程实例
  • act_hi_taskinst:历史的任务实例
  • act_hi_varinst:历史的流程变量记录表

(5)流程通用数据类

  • act_ge_bytearray:流程引擎二进制数据表
  • act_ge_property:流程引擎属性配置表
  • act_ge_schema_log:数据库脚本执行日志表

3、每个表中字段说明
(1)act_ge_bytearray(流程引擎二进制数据表)

  • id:主键
  • rev_:版本
  • name_:名称
  • deployment_id_:部署id
  • bytes_:字节内容
  • generated_:是否系统生成(0用户创建,null系统创建)
  • tenant_id_:租户id
  • type_:类型
  • create_time_:创建时间
  • root_proc_inst_id_:流程实例根id
  • removal_time_:删除时间

(2)act_ge_property(流程引擎属性配置表)

  • name_:名称
  • value_:值
  • rev_:版本

(3)act_ge_schema_log(数据库脚本执行日志表)

  • id_:主键
  • timestamp_:时间戳
  • version_:版本

(4)act_hi_actinst(历史的活动实例表)

  • id_:主键
  • parent_act_inst_id_:父节点实例id
  • proc_def_key_:流程定义key
  • proc_def_id_:流程定义id
  • root_proc_inst_id_:流程实例根id
  • proc_inst_id_:流程实例id
  • execution_id_:执行实例id
  • act_id_:节点id
  • task_id_:任务id
  • call_proc_inst_id_:调用外部的流程实例id
  • call_case_inst_id_:调用外部的案例实例id
  • act_name_:节点名称
  • acr_type_:节点类型
  • assignee_:办理人
  • start_time_:开始时间
  • end_time_:结束时间
  • duration_:耗时
  • act_inst_state_:活动实例状态
  • sequence_counter_:序列计数器
  • tenant_id_:租户id
  • removal_time_:删除时间

(5)act_hi_comment(历史流程审批意见表)

  • id_:主键
  • type_:类型
  • time_:时间
  • user_id_:处理人id
  • task_id_:任务id
  • root_proc_inst_id_:流程实例根id
  • proc_inst_id_:流程实例id
  • action_:行为类型
  • messages_:基本内容
  • full_msg_:全部内容
  • tenant_id_:租户id
  • removal_time_:删除时间

(6)act_hi_detail(历史的流程运行详情表)

  • id:主键
  • type_:类型
  • proc_def_key_:流程定义key
  • proc_def_id_:流程定义id
  • root_proc_inst_id_:流程实例根id
  • proc_inst_id_:流程实例id
  • execution_id_:流程执行id
  • case_def_key_:案例定义key
  • case_def_id_:案例定义id
  • case_inst_id_:案例实例id
  • case_execution_id_:案例执行id
  • task_id_:任务id
  • act_inst_id_:节点实例id
  • var_inst_id_:流程变量记录id
  • name_:名称
  • var_type_:变量类型
  • rev_:版本
  • time_:时间戳
  • bytearray_id_:二进制数据对应id
  • double_:double类型值
  • long_:long类型值
  • text_:文本类型值
  • text2_:文本类型值2
  • sequence_counter_:序列计数器
  • tenant_id_:租户id
  • operation_id_:操作id
  • removal_time_:删除时间

(7)act_hi_identitylink(历史的流程运行过程中用户表)

  • id_:主键
  • timestamp_:时间戳
  • type_:类型
  • user_id_:用户id
  • group_id_:用户组id
  • task_id_:任务id
  • root_proc_inst_id_:流程实例根id
  • proc_def_id_:流程定义id
  • operation_type_:操作类型
  • assigner_id_:分配者id
  • proc_def_key_:流程定义key
  • tenant_id_:租户id
  • removal_time_:删除时间

(8)act_hi_procinst(历史的流程实例表)

  • id_:主键
  • proc_inst_id_:流程实例id
  • business_key_:业务key
  • proc_def_key_:流程定义key
  • pro_def_id_:流程定义id
  • start_time_:开始时间
  • end_time_:结束时间
  • removal_time_:删除时间
  • duration_:耗时
  • start_user_id_:启动人id
  • start_act_id_:启动节点id
  • end_act_id_:结束节点
  • super_process_instance_id_:父流程实例id
  • root_proc_inst_id_:流程实例根id
  • super_case_instance_id_:父案例实例id
  • case_inst_id_:案例实例id
  • delete_reason_:删除原因
  • tenant_id_:租户id
  • state_:状态

(9)act_hi_taskinst(历史的任务实例表)

  • id_:主键
  • task_def_key_:任务定义key
  • proc_def_key_:流程定义key
  • proc_def_id_:流程定义id
  • root_proc_inst_id_:流程实例根id
  • proc_inst_id_:流程实例id
  • execution_id_:流程执行id
  • case_def_key_:案例定义key
  • case_def_id_:案例定义id
  • case_inst_id_:案例实例id
  • case_execution_id_:案例执行id
  • act_inst_id_:节点实例id
  • name_:名称
  • parent_task_id_:父任务id
  • description_:描述
  • owner_:委托人id
  • assignee_:办理人id
  • start_time_:开始时间
  • end_time_:结束时间
  • duration_:耗时
  • delete_reason_:删除原因
  • priority_:优先级
  • due_date_:超时时间
  • follow_up_date_:跟踪时间
  • tenant_id_:租户id
  • removal_time_:删除时间

(10)act_hi_varinst(历史的流程变量表)

  • id_:主键
  • proc_def_key_:流程定义key
  • proc_def_id_:流程定义id
  • root_proc_inst_id_:流程实例根id
  • proc_inst_id:流程实例id
  • execution_id_:流程执行id
  • act_inst_id:节点实例id
  • case_def_key_:案例定义key
  • case_def_id_:案例定义id
  • case_inst_id_:案例实例id
  • case_execution_id_:案例执行id
  • task_id_:任务id
  • name_:名称
  • var_type_:变量类型
  • create_time_:创建时间
  • rev_:版本
  • bytearrary_id_:二进制数据id
  • double_:double类型值
  • long_:long类型值
  • text_:文本类型值
  • text2_:文本类型值2
  • tenant_id_:租户id
  • state_:状态
  • removal_time_:删除时间

(11)act_id_user(用户表)

  • id_:主键
  • rev_:版本
  • first_:姓
  • last_:名
  • emall_:邮件
  • pwd_:密码
  • salt_:盐值
  • lock_exp_time_:锁定过期时间
  • attempts_:尝试次数
  • picture_id_:图片id

(12)act_id_group(群组表)

  • id_:主键
  • rev_:版本
  • name_:组名称
  • type_:组类型(SYSTEM系统、WORKFLOW业务)

(13)act_id_membership(用户与群组关系表)

  • user_id_:用户id
  • group_id_:组id

(14)act_re_deployment(流程部署表)

  • id_:主键
  • name_:流程名称
  • deploy_time_:部署时间
  • source_:来源
  • tenant_id_:租户id

(15)act_re_procdef(流程定义表)

  • id_:主键
  • rev_:版本
  • category_:流程定义的Namespace分类
  • name_:流程定义名称
  • key_:流程定义key
  • version_:流程定义版本号
  • deployment_id_:部署id
  • resource_name_:资源名称
  • dgrm_resource_name_:gram资源名称
  • has_start_form_key_:是否有启动表单
  • suspension_state_:流程挂起
  • tenant_id_:租户id
  • version_tag_:版本标签
  • startable_:是否是可启动流程

(16)act_ru_event_subscr(流程事件订阅表)

  • id_:主键
  • rev_:版本
  • event_type_:事件类型
  • event_name_:事件名称
  • execution_id_:执行id
  • pro_inst_id:流程实例id
  • activity_id_:节点id
  • configuration_:配置
  • created_:创建时间
  • tenant_id_:租户id

(17)act_ru_execution(流程运行时表)

  • id_:主键
  • rev_:版本
  • root_proc_inst_id_:流程实例根id
  • proc_inst_id_:流程实例id
  • business_key_:业务key
  • parent_id_:流程父实例id
  • proc_def_id_:流程定义id
  • super_exec_:父流程实例对应的执行
  • super_case_exec_:父案例实例对应的执行
  • case_inst_id_:案例实例id
  • act_id_:节点id
  • act_inst_id:节点实例id
  • is_active_:是否激活
  • is_concurrent_:是否并行
  • is_scope_是否多实例范围
  • is_event_scope_:是否事件多实例范围
  • suspension_state_:挂起状态
  • cached_ent_state_:缓存状态
  • sequence_counter_:序列计数器
  • tenant_id_:租户id

(18)act_ru_identitylink(流程运行时表)

  • id_:主键
  • rev_:版本
  • group_id_:用户组id
  • type_:类型
  • user_id_:用户id
  • task_id_:任务id
  • proc_def_id_:流程定义id
  • tenant_id_:租户id

(19) act_ru_incident( 运行时异常记录表)

  • id_:主键
  • rev_:版本
  • incident_timestamp_:事件时间戳
  • incident_msg_:事件信息
  • incident_type_:事件类型
  • execution_id_:流程执行id
  • activity_id_:节点id
  • proc_inst_id_:流程实例id
  • proc_def_id_:流程定义id
  • cause_incident_id_:事件原因id
  • root_cause_incident_id_:事件原因根id
  • configuration_:事件配置
  • tenant_id_:租户id
  • job_def_id_:job定义id

(20)act_ru_job( 流程运行时作业表)

  • id_:主键
  • rev_:版本
  • type_:类型
  • lock_exp_time_:锁定过期时间
  • lock_owner_:锁定用户
  • exclusive_:独占标识
  • execution_id_:执行id
  • process_instance_id_:流程实例id
  • process_def_id_:流程定义id
  • process_def_key_:流程定义key
  • retries_:重试次数
  • exception_stack_id_:异常堆栈id
  • exception_msg_:异常信息
  • duedate_:截止时间
  • repeat_:重复
  • handler_type_:处理类型
  • handler_cfg_:处理配置
  • deployment_id_:部署id
  • suspension_state_:挂起状态
  • job_def_id_:作业定义id
  • priority_:作业优先级
  • sequence_counter_:序列计数器
  • tenant_id:租户id
  • create_time_:创建时间

(21)act_ru_jobdef( 流程作业定义表)

  • job_type_:job类型
  • job_configuration_:job配置
  • suspension_state_:挂起状态
  • job_priority:优先级

(22)act_ru_task( 流程运行时任务表)

  • execution_id_:流程执行id
  • proc_inst_id_:流程实例id
  • proc_def_id_:流程定义id
  • case_execution_id_:案例执行id
  • case_inst_id_:案例实例id
  • case_def_id_:案例定义id
  • parent_task_id_:父任务id
  • description_:描述
  • task_def_key_:任务定义key
  • owner_:委托人
  • assignee_:办理人
  • delegation:委托状态
  • priority_:优先级
  • due_date_:截止时间
  • follow_up_date_:跟踪时间
  • suspension_state_:挂起状态

(23)act_ru_variable( 流程运行时变量表)

  • execution_id_:流程执行id
  • proc_inst_id_:流程实例id
  • case_exrcution_id_:案例执行id
  • case_inst_id_:案例实例id
  • task_id_:任务id
  • bytearray_id_:二进制内容id
  • double_:double类型值
  • long_:long类型值
  • text_:文本
  • text2:文本2
  • var_scope_:变量范围
  • sequence_counter_:序列计数器
  • is_concurrent_local_:是否并发

三、springboot集成camunda部署教程以及说明
1、创建springboot项目,并且导入依赖



    4.0.0

    com.zjy.workflow
    camunda-springboot-testdemo
    1.0.0-SNAPSHOT

    
        UTF-8
        8
        8
    

    
        
            
                org.springframework.boot
                spring-boot-dependencies
                2.7.9
                pom
                import
            

            
                org.camunda.bpm
                camunda-bom
                7.19.0
                import
                pom
            
        
    


    
        






        
        
            org.camunda.bpm.springboot
            camunda-bpm-spring-boot-starter-rest
        

        
        
            org.camunda.bpm.springboot
            camunda-bpm-spring-boot-starter-webapp
        

        
            org.camunda.bpm
            camunda-engine-plugin-spin
        

        
            org.camunda.spin
            camunda-spin-dataformat-all
        

        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-jdbc
        

        
            com.alibaba.fastjson2
            fastjson2
            2.0.12
        

        






        
        
            org.postgresql
            postgresql
        
        
            com.alibaba
            druid-spring-boot-starter
            1.1.21
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        


            org.springframework.boot
            spring-boot-starter-log4j2
            2.6.1
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                2.7.9
            
        
    



2、创建application.yml

server:
  port: 8088

spring:
  application:
    name: camunda-springboot-testdemo
  datasource:
    # postgresql
    url: jdbc:postgresql://192.168.126.130:5432/postgres?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&useSSL=false
    type: com.alibaba.druid.pool.DruidDataSource
    username: postgres
    password: root
    driver-class-name: org.postgresql.Driver
  sql:
    init:
      mode: always

    # mysql
#    url: jdbc:mysql://39.103.217.57:3306/camunda2?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&useOldAliasMetadataBehavior=true
#    driver-class-name: com.mysql.jdbc.Driver
#    username: root
#    password: root

camunda:
  bpm:
    admin-user:
      id: demo
      password: demo
    auto-deployment-enabled: false # 关闭springboot继承好的自动部署功能

3、创建日志输出log4j2.xml配置文件




    
    
        
        

    
    
    
        
        
            
            
        
        





    
    
    
        
        
            
            
        
    


4、使用流程设计器,设计一个bpmn流程,并保存到resources目录下


image.png

image.png

(1)预约维修节点


image.png

(2)师傅上门维修节点
image.png

(3)公司电话回访节点
image.png

(4)查看评分节点


image.png

5、创建service
(1)预约维修节点
package com.zjy.workflow.service;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.engine.delegate.JavaDelegate;
import org.springframework.stereotype.Service;

/**
 * @创建人 zjy
 * @文件名 ReserveRepairService
 * @创建时间 2023/10/20
 * @描述 预约维修
 */
@Service
public class ReserveRepairService implements JavaDelegate {

    private final Logger logger = LogManager.getLogger(ReserveRepairService.class);

    @Override
    public void execute(DelegateExecution execution) throws Exception {
        logger.info("进入到预约家电维修环节~");
        String currentActivityName = execution.getCurrentActivityName();
        String currentActivityId = execution.getCurrentActivityId();
        logger.info("当前活动名称:" + currentActivityName + "\n当前活动id:" + currentActivityId);
    }
}

(2)师傅上门维修节点

package com.zjy.workflow.service;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.engine.delegate.JavaDelegate;
import org.springframework.stereotype.Service;

/**
 * @创建人 zjy
 * @文件名 DoingRepairService
 * @创建时间 2023/10/23
 * @描述 师傅上门维修
 */
@Service("doRepair")
public class DoingRepairService implements JavaDelegate {

    private final Logger logger = LogManager.getLogger(DoingRepairService.class);

    @Override
    public void execute(DelegateExecution execution) throws Exception {
        logger.info("进入到师傅上门维修环节~");
        String currentActivityName = execution.getCurrentActivityName();
        logger.info("当前活动名:" + currentActivityName);
        execution.setVariable("repairName","小王");
    }
}

(3)公司电话回访和查看评分节点

package com.zjy.workflow.service;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Service;

/**
 * @创建人 zjy
 * @文件名 TelCallService
 * @创建时间 2023/10/23
 * @描述 公司电话回访和查看评分
 */
@Service("telCall")
public class TelCallService {

    private final Logger logger = LogManager.getLogger(TelCallService.class);

    // 公司电话回访
    public int doCall(DelegateExecution execution) {
        logger.info("公司电话回访~");
        Object repairName = execution.getVariable("repairName");
        logger.info("您对" + repairName.toString() + "打了几分?");
        logger.info("您对" + String.valueOf(repairName) + "打了几分?");
        return 10;
    }

    // 查看评分
    public void getScore(DelegateExecution execution) {
        logger.info("查看评分~");
        String s = String.valueOf(execution.getVariable("repairName"));
        Object score = execution.getVariable("score");
        logger.info("顾客对" + s + "的评分:" + (int)score);
    }
}

6、创建controller

package com.zjy.workflow.controller;

import org.camunda.bpm.engine.RepositoryService;
import org.camunda.bpm.engine.RuntimeService;
import org.camunda.bpm.engine.repository.Deployment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/flow")
public class FlowController {

    @Autowired
    private RepositoryService repositoryService;
    @Autowired
    private RuntimeService runtimeService;

    // 说明:springboot项目在依赖camunda-bpm-spring-boot-starter中已经实现了自动部署的功能,
    // 所以我们不用在执行下面的controller方法去手动部署流程了,在启动项目的时候,springboot项目
    // 会自动帮我们部署好resources目录下的所有流程
    @GetMapping("/deploy")
    public String deplopy(){
        Deployment deploy = repositoryService.createDeployment()
                .name("部署的第一个流程") // 定义部署文件的名称
                .addClasspathResource("LoanApproval.bpmn") // 绑定需要部署的流程文件
                .deploy();// 部署流程
        return deploy.getId() + ":" + deploy.getName();
    }

    @GetMapping("/startFlow/{processKey}")
    public void startFlow(@PathVariable String processKey) {
        runtimeService.startProcessInstanceByKey(processKey); // 这里的方法是ByKey!
    }
}

7、启动项目测试。
8、部署说明
说明:有三种部署方式。
(1)代码方法(手动部署)

@Autowired
private RepositoryService repositoryService;

 @GetMapping("/deploy")
    public String deplopy(){
        Deployment deploy = repositoryService.createDeployment()
                .name("部署的第一个流程") // 定义部署文件的名称
                .addClasspathResource("LoanApproval.bpmn") // 绑定需要部署的流程文件
                .deploy();// 部署流程
        return deploy.getId() + ":" + deploy.getName();
    }

(2)通过依赖camunda-bpm-spring-boot-starter自动部署
导入依赖


           org.camunda.bpm.springboot
          camunda-bpm-spring-boot-starter
          7.17.0

启动项目,就自动将resources目录下的所有流程部署好了。
可以通过修改配置来关闭自动部署:

camunda:
  bpm:
      auto-deployment-enabled: false # 关闭自动部署

(3)使用processes.xml配置文件实现自动部署
在resources目录下新建META-INF目录,在META-INF目录下新建processes.xml



    
        default
        
        
        
        
        
        
            false
            true
        
    

然后在项目启动类上使用注解 @EnableProcessApplication,启动项目,也可以把resources目录下的所有流程成功部署。
注意:使用processes.xml配置文件实现自动部署,必须使用注解 @EnableProcessApplication 才能生效,不然不会自动部署。

9、节点参数介绍
(1)Service Task(自动执行节点)
1)Implementation
a. Java Class
需要实现JavaDelegate接口,并将实现了JavaDelegate接口的类的全路径填写到Java class一栏;
b. Delegate expression
需要实现JavaDelegate接口,然后将实现了JavaDelegate接口的类使用注解注入到容器中(可以起个别名),然后将类的名字开头变小写填入Delegate expression一栏(如果使用了别名,就填别名),它会自动执行execute的方法;
c. Expression
将类注入到容器中(可以起个别名),类中方法的参数为DelegateExecution execution,然后在Expression一栏填入类名开头变小写.方法名(execution),Result variable为方法的返回值变量名;
a、b、c填入例子可以查看上面部署流程。
(2)并行
1)nrOfActiviteInstances:当前活动的实例数量,即还没有完成的实例数量;
2)loopCounter:循环计数器,办理人在列表中的索引;
3)nrOfInstances:多实例任务中总共的实例数;
4)nrOfCompletedInstances:已经完成的实例数量。
可以通过设置Completion Condition 为${nrOfCompletedInstances == 2}表示任意两个人完成审批。

10、流程执行过程说明
每个节点执行时,都会先执行下一个节点的User assignment、Task listeners等,目的是将设置好的数据,比如下一个节点审批人,审批策略等传给前端。

四、外部任务订阅
1、项目git地址:https://gitee.com/zuo-junyuan/camunda.git
2、项目介绍
(1)bpmn是:RomeInvades.bpmn,在src/main/resources/bpmn/zjy/RomeInvades.bpmn;
(2)只实现三个业务节点,最后那个用户节点没有去实现(主要针对的是业务节点的外部任务实现),第一个业务是Decide On Direction of Expansion,是使用nodejs实现的外部任务;

Snipaste_2024-01-14_14-37-47.png

Snipaste_2024-01-14_14-39-51.png

(3)说明:启动项目,登录驾驶舱查看,有这个工作流了,启动流程,如果没有外部任务去获取订阅这个启动的流程,流程就会一直卡在第一个Decide On Direction of Expansion节点上,无法往下执行,只有当启动订阅了这个主题的外部任务启动后,才会往下执行。

你可能感兴趣的:(Camunda)