activiti(五)连线SequenceFlow

activiti连线

使用流程变量,设置连线需要的流程变量的名称message,并设置流程变量的值

流程会按照指定的连线完成任务。

package cn.panda.f_sequenceFlow;

import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipInputStream;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.history.HistoricVariableInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;

public class SequenceFlowTest {

    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    /**
     * 部署流程定义 (从inputStream)
     */
    @Test
    //key值相同 资源升级
    public void deployementProcessDefinition_inputStream() {
        //从当前文件夹查找
        InputStream inputStreamBpmn =this.getClass().getResourceAsStream("sequenceFlow.bpmn");
        InputStream inputStreamPng =this.getClass().getResourceAsStream("sequenceFlow.png");
        Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署相关的service
                        .createDeployment()//创建部署对象
                        .name("连线")//添加部署对象
                        .addInputStream("sequenceFlow.bpmn", inputStreamBpmn)
                        .addInputStream("sequenceFlow.png", inputStreamPng)
                        .deploy();//完成部署
        System.out.println(deployment.getId());
        System.out.println(deployment.getName());
    }

    /**
     * 启动流程实例
     */
    @Test
    public void startProcessInstance() {
        //使用key值启动 默认按照最新版本的流程定义启动
        String processDefinitionKey="sequenceFlow";
        ProcessInstance processInstance = processEngine.getRuntimeService()//与正在执行的流程实例和执行对象相关的Service
                        .startProcessInstanceByKey(processDefinitionKey);//使用流程定义的key启动流程实例 key对应bpmn文件的id属性值
        System.out.println("流程实例id"+processInstance.getId());//流程实例id
        System.out.println("流程定义ID"+processInstance.getProcessDefinitionId());//流程定义ID
    }

    /**
     * 查询当前人的个人任务act_ru_task
     */
    @Test
    public void findMyPersonalTask() {
        String assignee="赵六";
        List<Task> list = processEngine.getTaskService()//与正在执行的任务管理相关的Service
                        .createTaskQuery()//创建任务查询对象
                        .taskAssignee(assignee)//指定个人任务
                        .orderByTaskCreateTime().asc()
                        .list();
        if (list!=null&&list.size()>0) {
            for (Task task : list) {
                System.out.println("任务ID"+task.getId());
                System.out.println("任务名称"+task.getName());
                System.out.println("任务创建时间"+task.getCreateTime());
                System.out.println("任务的办理人"+task.getAssignee());
                System.out.println("流程实例id:"+task.getProcessInstanceId());
                System.out.println("执行对象id:"+task.getExecutionId());
                System.out.println("流程定义id:"+task.getProcessDefinitionId());

            }
        }
    }

    /**
     * 完成我的任务
     */
    @Test
    public void completeMyPersonalTask() {
        String taskId = "3303";
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("message", "重要");
        //完成任务同时 设置流程变量${message=='不重要'}
        processEngine.getTaskService()
                        .complete(taskId, variables);
        System.out.println("完成任务 任务ID:"+taskId);
    }


}

bpmn:

这里写图片描述

如果有多个SequenceFlow ,则需要使用流程变量设置codition的名称。message表示流程变量的名称,‘不重要’表示流程变量的值,${}中间的内容要使用boolean类型的表达式,用来判断应该执行的连线。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"activiti7 no outgoing sequence flow of element"是指在Activiti7中的某个元素(如节点或网关)没有出口的流程序列。这通常是在设计和模型流程图时出现错误或遗漏所导致的。 在Activiti7中,流程图是由一系列的元素(节点、网关和连接线)组成的。连接线表示流程的流向,连接线分为进入连接线(incoming sequence flow)和出口连接线(outgoing sequence flow)。当某个元素没有出口的连接线时,系统会报出"activiti7 no outgoing sequence flow of element"的错误信息。 这种错误通常出现在以下几种情况下: 1. 某个节点或网关没有连接到其他节点或网关。解决方法是为该元素添加正确的出口连接线,确保流程的流向是连续的。 2. 某个节点或网关没有配置正确的出口条件。在网关中,需要根据条件来判断流程的分支情况。如果未配置出口条件,或者条件不正确,就会导致没有出口的连接线。解决方法是仔细检查每个网关的出口条件,确保它们符合流程的逻辑和要求。 3. 某个节点或网关的出口连接线被删除或者被错误地配置。在编辑流程图时,有可能不小心删除了某个元素的出口连接线,或者在连接线上设置了错误的目标元素。解决方法是检查该元素的所有出口连接线,确保它们有效且正确地指向目标元素。 总之,解决"activiti7 no outgoing sequence flow of element"的错误,需要仔细检查流程图的设计和配置,确保每个元素都有正确的出口连接线,且连接线的条件或目标元素都符合流程的要求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值