zoukankan      html  css  js  c++  java
  • activiti5转activiti7 获取各流程节点

    网上都是5或者6版本的 获取流程图节点,连线列表的信息。
    我想知道用activiti7版本的怎么获取流程图各节点信息,
    因为我想查出连线和节点信息去设置一些自定义的信息。

    ``` // 查询当前的流程实例
    ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
    BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId());
    //获取当前流程的流程定义processDefinitionEntity,然后根据流程定义获得所有的节点
    ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) repositoryService.createProcessDefinitionQuery()
    .processDefinitionId(processInstance.getProcessDefinitionId()).singleResult();

        processDefinitionEntity.getActivities()
    最主要的是 processDefinitionEntity.getActivities() 再activiti7版本没有这个get方法了。就不知道怎么用了。求教各位大神,帮我研究下。

    有效建议:

      /**
       * 获取流程节点
       *
       * @param definitionId 流程定义ID
       * @param processId 流程ID(可能为子流程),也就是流程定义Key
       * @return
       */
      protected List<FlowElement> getProcessDefinitionNodes(String definitionId, String processId) {
        BpmnModel bpmnModel = repositoryService.getBpmnModel(definitionId);
        List<Process> processes = Lists.newArrayList();
        if (StrUtil.isNotEmpty(processId)) {
          processes.add(bpmnModel.getProcessById(processId));
        } else {
          processes = bpmnModel.getProcesses();
        }
        List<FlowElement> flowElements = Lists.newArrayList();
        processes.forEach(process -> flowElements.addAll(process.getFlowElements()));
        return flowElements;
      }  
    @GetMapping(value = "process/def/nodes/userTask")
      public AppResult getUserTaskNodes(
          @RequestParam(value = "id") String definitionId,
          @RequestParam(value = "processId", required = false) String processId) {
        List<FlowElement> flowElements = getProcessDefinitionNodes(definitionId, processId);
        List<UserTask> userTasks = Lists.newArrayList();
        flowElements.forEach(
            node -> {
              if (node instanceof UserTask) {
                userTasks.add((UserTask) node);
              }
            });
        return buildSuccess(userTasks);
      }
    // 返回数据格式(节点)
    {
        "code": 200,
        "message": "操作成功",
        "data": [
            {
                "id": "Activity_14xmp0o",
                "xmlRowNumber": 7,
                "xmlColumnNumber": 5,
                "name": "一级审批",
                "asynchronous": false,
                "notExclusive": false,
                "incomingFlows": [
                    {
                        "id": "Flow_1s2ypsj",
                        "xmlRowNumber": 20,
                        "xmlColumnNumber": 5,
                        "sourceRef": "StartEvent_1",
                        "targetRef": "Activity_14xmp0o",
                        "waypoints": [
                            238,
                            470,
                            350,
                            470
                        ]
                    }
                ],
                "outgoingFlows": [
                    {
                        "id": "Flow_1xbbtsl",
                        "xmlRowNumber": 21,
                        "xmlColumnNumber": 5,
                        "sourceRef": "Activity_14xmp0o",
                        "targetRef": "Gateway_0astncq",
                        "waypoints": [
                            450,
                            470,
                            555,
                            470
                        ]
                    }
                ],
                "forCompensation": false,
                "formKey": "one-level",
                "candidateGroups": [
                    "one-approval"
                ],
                "extended": false,
                "exclusive": true
            },
            {
                "id": "Activity_19kus41",
                "xmlRowNumber": 11,
                "xmlColumnNumber": 5,
                "name": "二级审批",
                "asynchronous": false,
                "notExclusive": false,
                "incomingFlows": [
                    {
                        "id": "Flow_101i5h2",
                        "xmlRowNumber": 34,
                        "xmlColumnNumber": 5,
                        "name": "通过",
                        "conditionExpression": "${gateway==true}",
                        "sourceRef": "Gateway_0astncq",
                        "targetRef": "Activity_19kus41",
                        "waypoints": [
                            580,
                            445,
                            580,
                            340,
                            670,
                            340
                        ]
                    }
                ],
                "outgoingFlows": [
                    {
                        "id": "Flow_0zdqnmv",
                        "xmlRowNumber": 42,
                        "xmlColumnNumber": 5,
                        "sourceRef": "Activity_19kus41",
                        "targetRef": "Gateway_0jvvxgy",
                        "waypoints": [
                            770,
                            340,
                            875,
                            340
                        ]
                    }
                ],
                "forCompensation": false,
                "formKey": "two-level",
                "candidateGroups": [
                    "two-approval"
                ],
                "extended": false,
                "exclusive": true
            }
        ]
    }

    原文链接:https://ask.csdn.net/questions/1080491

    Activiti7获取当前任务节点出口连线(动态生成处理节点)

     

    Activiti7 中 PVM,ActivitiImpl,PvmTransition ,ExecutionImpl, TransitionImpl 替代方法。

    PVM classes
    All classes from the org.activiti.engine.impl.pvm package (and subpackages) have been removed. This is because the PVM (Process Virtual Machine) model has been removed and replaced by a simpler and more lightweight model.
    
    This means that usages of ActivitiImpl, ProcessDefinitionImpl, ExecutionImpl, TransitionImpl are invalid.
    
    Generally, most of the usage of these classes in version 5 came down to getting information that was contained in the process definition. In version 6, all the process definition information can be found through the BpmnModel, which is a Java representation of the BPMN 2.0 XML for the process definition (enhanced to make certain operations and searches easier).
    
    The quickest way to get the BpmnModel for a process definition is to use the org.activiti.engine.impl.util.ProcessDefinitionUtil class:
    
    // The whole model
    ProcessDefinitionUtil.getBpmnModel(String processDefinitionId);
    
    // Only the specific process definition
    ProcessDefinitionUtil.getProcess(String processDefinitionId);

    大致是说:官方为了轻量化,所以就把原来的PVM 流程引擎给优化了、
    删了后推荐我们获取bpmnModel或者process来获取模型的参数。

    BpmnModel获取方式可以使用官方推荐的,我这边交互刚好只有taskId,就用这个做个demo;

    // 获取当前任务
    Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
    //获取当前模型
    BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
    // 获取当前节点
    FlowElement flowElement = bpmnModel.getFlowElement(task.getTaskDefinitionKey());
    // 这里不转也有方法拿到,我这是为了后人阅读方便
    UserTask userTask = (UserTask)flowElement;
    //获取节点出口线段
    List<SequenceFlow> outgoingFlows = userTask.getOutgoingFlows();
    // 我这边暂时是解析expression 获取条件和约定的值返回到前端构造button

    原文链接:https://blog.csdn.net/weixin_39789689/article/details/106495938

    Activiti7中没有getOutgoingTransitions等方法

    http://zpycloud.com/archives/1903

    activiti 当前活动id

    https://blog.csdn.net/weixin_39941298/article/details/79445850

    个人学习笔记,记录日常学习,便于查阅及加深,仅为方便个人使用。
  • 相关阅读:
    C# 正则表达式
    C# 预处理命令
    C# System.Collections
    C#文件流 System.IO和对文件的读写操作
    c# 网站发布
    C# 数据库
    c# 数据存储过程 存储函数
    insert 插入
    SVN远程管理
    【Win】印象笔记快捷键
  • 原文地址:https://www.cnblogs.com/wq-9/p/15423689.html
Copyright © 2011-2022 走看看