Activiti的流程变量和流程定义语言

本文详细介绍了Activiti中的流程变量,它们的作用域是流程实例,可用于设置参数,如请假流程中的天数和原因。接着讲解了BPMN流程定义语言,包括顺序流、节点类型如开始、结束、任务节点,以及监听器的使用,如执行监听器和任务监听器,用于处理流程或节点状态变化。监听器分为两类,执行监听器可在任何节点绑定,任务监听器只能绑定到用户任务节点,用于动态设置和操作日志。最后通过实例展示了如何配置监听器。
摘要由CSDN通过智能技术生成

流程变量

流程变量在整个工作流中扮演很重要的作用。例如:请假流程中有请假天数、请假原因等一些参数都为流程变量的范围。流程变量的作用域范围是流程实例。也就是说各个流程实例的流程变量是不相互影响的。流程实例结束完成以后流程变量还保存在数据库中(存放到流程变量的历史表中)。

2.2.4.	设置流程变量
@Test
	public void  setVarTest() throws Exception {
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
		TaskService taskService = processEngine.getTaskService();
		String processInstanceId="2501";
		String assignee="小莉";
		
		//通过任务服务获取这个流程实例中  小莉的唯一的一个任务
		Task task = taskService.createTaskQuery()
		.processInstanceId(processInstanceId)//在一次流程实例中一个人的任务是唯一的
		.taskAssignee(assignee)
		.singleResult();
		System.out.println(task);
		
		//设置一个流程变量
		String taskId = task.getId();
		taskService.setVariable(taskId, "请假人", assignee);
		Map<String,Object> variables=new HashMap<>();
		variables.put("请假原因","想男朋友了");//设置String
		variables.put("请假天数", 3);//设置Integer
		variables.put("是否扣工资",true);//设置boolean:存long型:1true;0false
		variables.put("请假开始时间", new Date());//设置Date类型
		variables.put("扣多少钱", 666.666d);//设置Double
		//设置多个流程变量:
		taskService.setVariables(taskId, variables);
		
		//完成任务的时候设置:
		Map<String,Object> variables1=new HashMap<>();
		variables1.put("叫老板", "亲爱的老板,我真的要回去找男朋友,很急的。。。。。");
		taskService.complete(taskId, variables1);
	}

说明:
1)流程变量的作用域就是流程实例,所以只要设置就行了,不用管在哪个阶段设置
2)基本类型设置流程变量,在taskService中使用任务ID,定义流程变量的名称,设置流程变量的值。
3)Javabean类型设置流程变量,需要这个javabean实现了Serializable接口
4)设置流程变量的时候,向act_ru_variable这个表添加数据

2. 流程定义语言(BPMN)

2.1. 什么是BPMN
业务流程建模与标注(Business Process Model and Notation,BPMN) ,描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram)

Eclispse画出流程,有两个文件bpmn文件和png文件,其中bpmn文件又可以叫做流程定义文件,它需要遵循BPMN语言规范.png:就是一个单纯的图片,没有任何作用.

2.2. 顺序流(sequenceFlow )
2.21. 什么是顺序流
顺序流是连接两个流程节点的连线,代表一个节点的出口。流程执行完一个节点后,会沿着节点的所有外出顺序流继续执行。 就是说,BPMN 2.0默认的行为就是并发的: 两个外出顺序流会创造两个单独的,并发流程分支。
顺序流主要由4个属性组成:
Id: 唯一标示,用来区分不同的顺序流
sourceRef:连线的源头节点ID
targetRef:连线的目标节点ID
name(可选):连线的名称,不涉及业务,主要用于显示。多出口原则要设置。
说明:
1)结束节点没有出口
其他节点有一个或多个出口。如果有一个出口,则代表是一个单线流程;
2.2.2. 分支流程-流程图
在这里插入图片描述3.3. 节点
开始节点
结束节点:加一个执行监听器,修改流程的状态
任务节点
网关节点
监听器节点
3.3.1. 开始事件节点(startEvent)
开始事件对应节点
3.3.2. 结束事件节点(endEvent)
结束事件对应节点
3.3.3. 任务节点 (Task)
接收任务节点 (receiveTask)
接收任务是一个简单任务,它会等待对应消息的到达。 当前,官方只实现了这个任务的java语义。 当流程达到接收任务,流程状态会保存到数据库中。
在任务创建后,意味着流程会进入等待状态, 直到引擎接收了一个特定的消息, 这会触发流程穿过接收任务继续执行。(短跑比赛一样,预备,信号触发跑)
图形标记:
接收任务显示为一个任务(圆角矩形),右上角有一个消息小标记。 消息是白色的(黑色图标表示发送语义):

1)流程图
销售经理统计当前的营业额,然后短信发送给老板

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值