• camunda_19_api


    本文内容转载,

    下面内容转载自

    流程打回到起始节点

            //获取流程起始节点和发起人
            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/
  • 相关阅读:
    数据持久化编程学习总结
    Boost Replaceable by C++11 language features or libraries
    【敬业福bug】支付宝五福卡敬业福太难求 被炒至200元
    由文字生成path后制作写字的动画
    CSS经典布局之弹性布局
    HDU2082 找单词 【母函数】
    HDOJ 题目2475 Box(link cut tree去点找祖先)
    DELPHI中MDI子窗口的关闭 和打开
    sql语句中日期相减的操作
    Delphi编码规范
  • 原文地址:https://www.cnblogs.com/harrychinese/p/camunda_19_api.html
Copyright © 2020-2023  润新知