2. AssignmentHandler:assignable.setAssignee(userId); // 指定当前任务的办理人(分配任务)
a) 需要在.jbdl.xml的元素中写
b) 指定的AssignmentHandlerImpl类要实现AssignmentHandler接口
c) 在AssignmentHandlerImpl类中可以使用assignable.setAssignee(userId),分配个人任务。
3. TaskService.assignTask(taskId, userId)// 把指定的任务分配给指定的人
processEngine.getTaskService().assignTask(taskId, userId);
–>组任务的分配
1. 使用流程变量:assignee=“#{userIdsString}” // 要是String型的变量,多个候选人之前用’,'隔开
2. AssignmentHandler:assignable.addCandidateUser(userId);// 添加组任务的候选人
a) 需要在.jbdl.xml的元素中写
b) 指定的AssignmentHandlerImpl类要实现AssignmentHandler接口
c) 在AssignmentHandlerImpl类中可以使用assignable.addCandidateUser(userId),添加组任务候选人。
3. TaskService.addTaskParticipatingUser(taskId,userId,Participation.CANDIDATE);//添加组任务的候选人
v. Decision判断活动
1. 使用expression,如:expr=“#{‘to state2’}”
2. 使用Handler,在Handler Class里配置指定的DecisionHandlerImpl类的路径
DecisionHandlerImpl.java
public class DecisionHandlerImpl implements DecisionHandler {
// 计算离开当前节点用的Transition的名称并返回
@Override
public String decide(OpenExecution execution) {
System.out.println("DecisionHandlerImpl.decide()");
// 获取业务数据
Integer days = (Integer) execution.getVariable("请假天数");
// 选择Transition
if (days > 7) {
return "to 总经理审批";
} else {
return "to end1";
}
}
}
ProcessTest.java
@Test
public void test() {
// 1,部署流程定义
InputStream in = this.getClass().getResourceAsStream("test.jpdl.xml"); // 当前类所在包中的文件
processEngine.getRepositoryService()//
.createDeployment()//
.addResourceFromInputStream("test.jpdl.xml", in)//
.deploy();
// 2,启动流程实例
Map<String, Object> variables = new HashMap<String, Object>();
// variables.put("请假天数", 10);启动流程实例后,进行到to 总经理审批环节。
variables.put("请假天数", 3);//启动流程实例后,进行到to end1环节。
ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByKey("test", variables);
}
此时,如果variables.put(“请假天数”, 3);启动流程实例后,进行到to end1环节。
此时,如果variables.put(“请假天数”, 10);启动流程实例后,进行到to 总经理审批环节。
3. 如果同时配置了expression与Handler,则expression有效,忽略Handler。
vi. fork、join分支/聚合活动
public class ProcessTest {
private ProcessEngine processEngine = Configuration.getProcessEngine();
@Test
public void test() {
// 1,部署流程定义
InputStream in = this.getClass().getResourceAsStream("test.jpdl.xml"); // 当前类所在包中的文件
processEngine.getRepositoryService()//
.createDeployment()//
.addResourceFromInputStream("test.jpdl.xml", in)//
.deploy();
// 2,启动流程实例
ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByKey("test");
System.out.println("processInstanceId = " + pi.getId());
System.out.println("当前正在执行的活动:" + pi.findActiveActivityNames());
}
}
输出结果为:
processInstanceId = test.330007
当前正在执行的活动:[汇款, 发货]
可以看出,汇款和发货同时执行中。并且,只有当2条路线都到join活动,流程才会继续往后执行。
b) 自定义活动(custom)
i. 在元素中指定class属性为指定的类ExternalActivityBehaviourImpl
ii. 这个类要实现ExternalActivityBehaviour接口,其中有两个方法:
1. execute(ActivityExecution):节点的功能代码
2. signal(ActivityExecution, String, Map):在当前节点等待时,外部发信号时的行为
3. 在execute()方法中,可以调用以下方法对流程进行控制
a) ActivityExecution.waitForSignal():在当前节点等待。
b) ActivityExecution.takeDefaultTransition():使用默认的Transition离开,当前节点中定义的第一个为默认的。
c) ActivityExecution.take(String transitionName):使用指定的Transition离开
先自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以扫码领取!
![img](https://img-blog.csdnimg.cn/img_convert/43028a4b6ed7f7269a60ea9a40f17bdc.jpeg)
Ending
Tip:由于文章篇幅有限制,下面还有20个关于MySQL的问题,我都复盘整理成一份pdf文档了,后面的内容我就把剩下的问题的目录展示给大家看一下
如果觉得有帮助不妨【转发+点赞+关注】支持我,后续会为大家带来更多的技术类文章以及学习类文章!(阿里对MySQL底层实现以及索引实现问的很多)
吃透后这份pdf,你同样可以跟面试官侃侃而谈MySQL。其实像阿里p7岗位的需求也没那么难(但也不简单),扎实的Java基础+无短板知识面+对某几个开源技术有深度学习+阅读过源码+算法刷题,这一套下来p7岗差不多没什么问题,还是希望大家都能拿到高薪offer吧。
**
如果觉得有帮助不妨【转发+点赞+关注】支持我,后续会为大家带来更多的技术类文章以及学习类文章!(阿里对MySQL底层实现以及索引实现问的很多)
[外链图片转存中…(img-6K4NfcDQ-1711391984588)]
[外链图片转存中…(img-NTNccMtV-1711391984589)]
吃透后这份pdf,你同样可以跟面试官侃侃而谈MySQL。其实像阿里p7岗位的需求也没那么难(但也不简单),扎实的Java基础+无短板知识面+对某几个开源技术有深度学习+阅读过源码+算法刷题,这一套下来p7岗差不多没什么问题,还是希望大家都能拿到高薪offer吧。
需要更多Java资料的小伙伴可以帮忙点赞+关注,点击传送门,即可免费领取!