Activiti 常见操作(二)

摘要:
map=newHashMap<地图);查询候选组任务TaskServicetaskService=processEngine。getTaskService();list=taskService.createTaskQuery().processDefinitionKey(key).taskCandidateUser(candidateUser).list();

UEL分配任务

在任务节点设计的时候,assignce设置为${assigneeNum},在启动的时候,把这个变量带上,Activiti就可以动态地设置流程接收人。

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService=processEngine.getRuntimeService();
//设置assignee的取值
Map<String,Object> map=new HashMap<>();
map.put("assignee0","xiaoyi");
map.put("assignee1","xiaoer");
map.put("assignee2","xiaosan");
ProcessInstance processInstance=runtimeService.startProcessInstanceByKey("holiday",map);

监听器分配任务

在流程设计的时候,指定监听器,在监听器中设置流程接收人,这样也可以动态的指定流程接收人。

流程变量+流程变量类型+作用域

在流程进行的过程可以附带一些数据,控制流程的走向。流程变量支持很多类型,包括Java实体类。作用域分为节点作用域和全流程作用域。

候选人处理任务

多个人都有权力处理某个单据,多个人处理的任务可以称为组任务。

查询候选人组任务

TaskService taskService = processEngine.getTaskService();
String key="myProcess5";
String candidateUser="zhangsan";
//查询
List<Task> list = taskService.createTaskQuery().processDefinitionKey(key).taskCandidateUser(candidateUser).list();

拾取组任务

TaskService taskService = processEngine.getTaskService();
//设置查询条件
String key="myProcess5";
String candidateUser="zhangsan";
//查询
Task task = taskService.createTaskQuery().processDefinitionKey(key).taskCandidateUser(candidateUser).singleResult();
if (task!=null){
    taskService.claim(task.getId(),candidateUser);
    System.out.println("任务拾取完毕!");
}

候选人查询自己任务,并完成

TaskService taskService = processEngine.getTaskService();
//设置查询条件
String key = "myProcess5";
String assignee = "zhangsan";
 //查询
List<Task> list = taskService.createTaskQuery().processDefinitionKey(key).taskAssignee(assignee)//设置任务处理人
    .list();
for (Task task : list) {
    taskService.complete(task.getId());
    System.out.println("任务执行完毕");
}

把当前任务归还组任务

//获取taskService
TaskService taskService = processEngine.getTaskService();
//设置查询条件
String key = "myProcess5";
String assignee = "zhangsan";
String candidateUser = "lishi";
//查询
Task task = taskService.createTaskQuery().processDefinitionKey(key).taskAssignee(assignee)//设置任务处理人
    .singleResult();
if (task!=null){
    taskService.setAssignee(task.getId(),null);//把任务归还,把任务执行人设置为null
    //taskService.setAssignee(task.getId(),candidateUser); 张三把当前任务指定给lisi处理
    System.out.println("任务归还完毕");
}

排他网关

当你的流程出现这样的场景:请假申请,三天以内,部门经理审批流程就结束了,三天以上需要总经理,这个时候就需要排他网关。

并行网关

当出现这样的场景:请假申请开始,需要项目经理和部门经理都审批,两者没有前后需要两个人全部审批才能进入下个节点。这个时候就需要并行网关。

包含网关

当出现这样的场景:你申请请假,如果是病假,找项目经理审批,如果不是找部门经理+项目经理审批。说白了就像是排他跟并行的合体。

全局监听器

全局监听器主要使用的场景就是监控这个流程的启动和结束。流程开始的时候可以监控,流程结束的时候可以监控,这里说的是流程实例启动结束的监控,并非是流程引擎的启动结束监控。

连线监听器

当节点结束的时候,经过连线的时候,我们可以在线上定义类,实现自己的业务逻辑。

节点监听器

在实际项目开发中,任务节点是经常用到的,所以我们必须要会使用节点监听器。

免责声明:文章转载自《Activiti 常见操作(二)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇xml之XSLTROS系统玩转自主移动机器人(4)-- 嵌入式硬件平台下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

节点操作--JavaScript

1 - 概念 网页中的所有内容都是节点(标签、属性、文本、注释),在DOM中,节点使用node来表示。 HTML DOM树中的所有节点均可通过JS进行访问,所有HTML元素(节点)均可被修改,也可以创建或者删除。 一般地,节点至少拥有nodeType(节点类型)、nodeName(节点名称)和nodeValue(节点值)这三个基本属性。 元素节点 nod...

如何退出正在Sleep的线程

    今天有个同事问我Thread的Interrupe方法,这个方法用于终止另一个正在等待(Sleep/Wait/Join)状态的线程,如果那个线程未处于等待状态,则等到下次进入等待状态时再抛出。     这个方法的平时用的机会其实并不大,由于需要线程处于等待状态,很大程度上限制了使用的机会,因此问了下同事实际的使用场景,原来是某些线程进入了长时间的Sl...

几种定时任务(Timer、TimerTask、ScheduledFuture)的退出—结合真实案例【JAVA并发】

工作中常常会有定时任务的开发需求,特别是移动端。最近笔者正好有所涉及,鉴于此,结合开发中的案例说明一下几种定时任务的退出。 需求说明:定时更新正在生成的文件大小和状态【进行中、失败、完成】,如果文件生成完成,则退出【CoderBaby】 调度可以用Timer 【调用schedule()或者scheduleAtFixedRate()方法实现】或者Sched...

Python设计模式

简介 部署图也称配置图,用来显示系统中硬件和软件的物理架构。从中可以了解到软件和硬件组件之间的物理拓扑、连接关系以及处理节点的分布情况。 部署图建模步骤     - 找出需要进行部署的各类节点,如网络硬件设备、服务器硬件设备、及部署在硬件设备上的软件系统等     - 确定各类节点之间的连接关系及通信方式     - 从性能、可扩展性、可维护性、可移植性角...

Gluster的搭建和使用

Gluster的搭建和使用 序言我们为什么要去使用分布式存储,在一家大型公司或者大规模的集群中,大家可能会经常遇到一个问题,我的数据怎么存放,放在那,数据空间不够了怎么办,这些问题经常困扰着我们。 笔者是在电信的一个部门工作的,我们的环境比较复杂。环境有NAS,各种NFS,还有为了高可用搭建的HA上面跑的共享目录,每次我们遇到的一个最大的问题就是,哪哪哪的...

【转】.Net 读取xml

一、常规方法 1.知识介绍 //初始化一个xml对象 XmlDocument xml = new XmlDocument(); //加载xml文件 xml.Load("文件路径"); //读取指定的节点 XmlNode xmlNode = xml.SelectS...