首页 > 其他分享 >camunda_19_api

camunda_19_api

时间:2022-10-12 07:33:05浏览次数:161  
标签:实例 19 流程 list 查询 api taskService camunda

本文内容转载,

下面内容转载自

流程打回到起始节点

        //获取流程起始节点和发起人
        String toActId = historicActivityInstanceList.get(0).getActivityId();
        String assignee = historicActivityInstanceList.get(0).getAssignee();

        //将流程发起人放到变量
        Map<String, Object> taskVariable = new HashMap<>();
        taskVariable.put("assignee", assignee);
 
        //将流程拉回到起始节点  
        runtimeService.createProcessInstanceModification(processInstanceId)
                //关闭相关任务
                .cancelActivityInstance(getInstanceIdForActivity(activityInstance, taskList.get(0).getTaskDefinitionKey()))
                .setAnnotation("进行了取回到节点操作")
                //启动目标活动节点
                .startBeforeActivity(toActId)
                //流程的可变参数赋值
                .setVariables(taskVariable)
                .execute();

下面内容转载自

https://github.com/jyong-zhu/sigma/blob/main/docs/camunda-tutorial.md

Camunda Service 简介

service description
RepositoryService 操作静态数据,管理 process definition 与 deployment
RuntimeService 操作动态数据,如保存流程上下文的变量,查询 process instance 与 execution
TaskService 操作任务,把任务分配给用户,完成任务,申请任务
IdentityService 管理角色或者用户,camunda 本身不关注用户是否合规
FormService 操作 camunda 中自带的表单,非必需
HistoryService 提供对 process instance、task 的历史数据查询功能
ManagementService 管理数据库表的元数据信息,同时提供对 jobs 的相关操作
FilterService 用于过滤数据
ExternalTaskService 用于外部任务的相关操作

Camunda 查询示例

  1. 链式查询

    List<Task> tasks = taskService.createTaskQuery()
      .taskAssignee("kermit")
      .processVariableValueEquals("orderId", "0815")
      .orderByDueDate().asc()
      .list();
    
  2. 分页查询

    List<Task> tasks = taskService.createTaskQuery()
      .taskAssignee("kermit")
      .processVariableValueEquals("orderId", "0815")
      .orderByDueDate().asc()
      .listPage(20, 50);
    
  3. or:仅适用于对 process instance 和 task 操作

    // assignee = "John Munda" AND (name = "Approve Invoice" OR priority = 5)
    // or 和 endOr 之间的关联关系是 or
    List<Task> tasks = taskService.createTaskQuery()
      .taskAssignee("John Munda")
      .or()
        .taskName("Approve Invoice")
        .taskPriority(5)
      .endOr()
      .list();
    

    or 中关于参数的过滤条件不会被覆盖,但是对非参数的过滤条件会被覆盖,如下:

    List<Task> tasks = taskService.createTaskQuery()
      .or()
      	// 以下3个过滤条件不会彼此覆盖
        .processVariableValueEquals("orderId", "0815")
        .processVariableValueEquals("orderId", "4711")
        .processVariableValueEquals("orderId", "4712")
      .endOr()
      .list();
    
    List<Task> tasks = taskService.createTaskQuery()
      .or()
      	// 以下2个过滤条件会被覆盖,这个语句中只会查出 controlling,不会查出 sales
        .taskCandidateGroup("sales")
        .taskCandidateGroup("controlling")
      .endOr()
      .list();
    
    // 针对以上这种覆盖的条件,不用 or,可以用 in 来做,如下:
    taskCandidateGroupIn()
    tenantIdIn()
    processDefinitionKeyIn()
    
  4. Native Queries:自定义 sql 查询

    List<Task> tasks = taskService.createNativeTaskQuery().sql("SELECT count(*) FROM " + managementService.getTableName(Task.class) + " T WHERE T.NAME_ = #{taskName}") .parameter("taskName", "aOpenTask").list();
    
    long count = taskService.createNativeTaskQuery().sql("SELECT count(*) FROM " + managementService.getTableName(Task.class) + " T1, " + managementService.getTableName(VariableInstanceEntity.class) + " V1 WHERE V1.TASK_ID_ = T1.ID_").count();
    

Camunda 使用

  1. 部署流程定义

    Deployment deployment = repositoryService.createDeployment().addInputStream(processName + ".bpmn", xmlStream).deploy();
    
  2. 发起流程实例

    runtimeService.startProcessInstanceByKey(processDef.getProcDefKey(), paramMap);
    
  3. 中止流程实例

    // 首先,camunda 将 runtime 中的一些数据删除
    // 再将 ACT_HI_PROCINST 中的流程实例状态改为 INTERNALLY_TERMINATED
    runtimeService.deleteProcessInstance(procInstId, comment);
    
  4. 查询任务列表

    // 任务的执行人信息均在 cadidateGroup 中,无论是 userId 或者 roleId
    // identityList 包含查询人的 userId 和 roleId
    taskService.createTaskQuery().taskCandidateGroupIn(identityList).list();
    
  5. 提交任务

    taskService.complete(task.getId(), paramMap);
    
  6. 查询流程实例列表

    // 进行中的流程实例
    historyService.createHistoricProcessInstanceQuery().active().list();
    // 已结束的流程实例
    historyService.createHistoricProcessInstanceQuery().finished().list();
    
  7. 查询流程实例处于活跃状态的活动

    runtimeService.getActiveActivityIds(processInstance.getId());
    
  8. 更新流程实例上下文的变量值

    runtimeService.setVariables(processInstance.getId(), paramMap);
    

参考资料

  1. Camunda 官网:https://camunda.com/
  2. Camunda 官方文档:https://docs.camunda.org/manual/latest/

标签:实例,19,流程,list,查询,api,taskService,camunda
From: https://www.cnblogs.com/harrychinese/p/camunda_19_api.html

相关文章

  • [Recoil] Optimising API Calls
    UsingcacheclasstoreduceAPIcallsimport{Button}from'@chakra-ui/button'import{Input}from'@chakra-ui/input'import{Box,Divider,Heading,VStack}fr......
  • Flink Table API 的开发步骤
    1.创建TableEnvironmentFlink的TableAPI/SQL的执行入口功能如下:1.1注册Catalog【数据系统实例】1.2在Catalog中注册库和表1.3加载插件模块1.4执行SQL的查询1.......
  • 使用 Stream API 高逼格 优化 Java 代码
    Java8的新特性主要是Lambda表达式和流,当流和Lambda表达式结合起来一起使用时,因为流申明式处理数据集合的特点,可以让代码变得简洁易读放大招,流如何简化代码如果有一个需求,需......
  • camunda_18_user_task_assignment
    Camunda后台数据库内建有几个人员/组织数据表,但在Usertaskassignment方便,并不强制我们要将自己的人员/组织数据导入到这些table中.举例讲,我们需要将某个usertas......
  • 详解ROMA Connect API 流控实现技术
    1、概述ROMA平台的核心系统ROMAConnect源自华为流程IT的集成平台,在华为内部有超过15年的企业业务集成经验。依托ROMAConnect,可以将物联网、大数据、视频、统一通信、GIS等......
  • P1194 买礼物
    P1194买礼物普及的题目,而且一眼就能看出该用什么做法。我主要是决定这道题建图的思想值得借鉴,每样东西原本的价格是a,所以新建一个节点0,0向i连边,边权为a,这样一共就有b......
  • windows内核Api的学习
    windows内核api就是ntoskrnl.exe导出的函数。我们可以跟调用应用层的api一样,调用内核api。不过内核api需要注意的是,如果函数导出了,并且函数文档化(也就是可以直接在msdn上搜......
  • VS2019 使用 C/C++ 动态链接库 并 进行调用
     vs2019生成dll并调用的实现示例:​​https://www.jb51.net/article/179759.htm​​ 1.VS 中生成动态链接库的三种方式(导出函数) 开发环境:VS2019 创建动态链接库项目新......
  • VS2019 添加三方文件夹遇到的坑
    在开发新项目时需要用到一些三方API,这些三方API没有生成lib,所以我们在VS编译器中添加这些三方文件夹的头文件路径后会出现ERRORLNK2019的错误提示,这些提示通常都......
  • 做题记录整理栈7 P1950 长方形(2022/10/11)
    P1950长方形玉蟾宫升级版#include<bits/stdc++.h>#definefor1(i,a,b)for(inti=a;i<=b;i++)#definelllonglong#definemp(a,b)make_pair(a,b)usingnamespa......