Activiti工作流之流程分支

Activiti工作流之流程分支

2023年8月1日发(作者:)

Activiti⼯作流之流程分⽀回顾:⼯作流之flow管理10张表:select * from act_re_deployment;select * from act_re_procdef;select * from act_ge_bytearray;select * from act_ru_execution;select * from act_ru_task;select * from act_hi_taskinst;select * from act_hi_procinst;select * from act_hi_actinst;select * from act_hi_varinst;select * from act_ru_variable;新建bpmn图, 流程定义的key设置为"ruzhi":在"经理审批通过"和"发送⽼板审批"的分⽀上设置流程变量:① 测试: 部署-->启动流程, 此时流程执⾏到"经理审批"的节点上, 然后选择流程变量的分⽀为"经理审批通过"执⾏下去package 1;import p;import ;import sEngine;import sEngines;import toryService;import eService;import rvice;import mentBuilder;import ;import ;import ;public class ActivitiTest1 { //定义⼀个成员变量 RepositoryService repositoryService;

RuntimeService runtimeService;

TaskService taskService;

/** * 获取流程引擎 */ @Before public void setUp() throws Exception { //获取流程引擎对象, 默认是读取配置⽂件"" ProcessEngine processEngine = aultProcessEngine(); //获取RepositoryService接⼝的实现类 repositoryService = ositoryService(); runtimeService = timeService(); taskService = kService(); } /** * 部署流程①: 通过单⽂件的形式加载部署 * 部署流程①: 通过单⽂件的形式加载部署 */ @Test public void delpoyActiviti1() { //获取部署对象 DeploymentBuilder deploymentBuilder = Deployment(); sspathResource("diagrams1/") .name("⼊职流程").category("⼊职") .addClasspathResource("diagrams1/"); //部署流程 (); }

/** * 启动流程 */ @Test public void startProcess() { //根据流程的key来启动相对应的流程, 默认是启动最新版本的流程 rocessInstanceByKey("ruzhi"); }

/** * 完成任务: 执⾏"经理审批通过"分⽀ */ @Test public void completeTask1(){ String assignee = "manager"; Task task = TaskQuery() .processDefinitionKey("ruzhi").taskAssignee(assignee).singleResult(); Map map = new HashMap(); ("outcome", "经理审批通过"); te((), map); }

}结果: "经理审批通过"分⽀完成, 任务结束.② 测试: 执⾏"发送⽼板审批"分⽀/** * 完成任务: 执⾏"发送⽼板审批"分⽀ */ @Test public void completeTask2(){ String assignee = "manager"; Task task = TaskQuery() .processDefinitionKey("ruzhi").taskAssignee(assignee).singleResult(); Map map = new HashMap(); ("outcome", "发送⽼板审批"); te((), map); }

/** * ⽼板办理任务 */ @Test public void completeTask3(){ String assignee = "boss"; Task task = TaskQuery() .processDefinitionKey("ruzhi").taskAssignee(assignee).singleResult(); te(()); }结果: "发送⽼板审批"分⽀完成, 任务结束.

获取outcome和income的连接线获取分⽀连接线⾮常重要, 可以在项⽬中⾃动⽣成按钮.测试代码:@Test public void getOutcomeFlow(){ String assignee = "manager"; Task task = TaskQuery() .processDefinitionKey("ruzhi").taskAssignee(assignee).singleResult(); //获取流程定义// ProcessDefinitionQuery().processDefinitionKey("ruzhi").singleResult(); //或者 //获取流程定义实体的对象(不需要创建查询对象*****) ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) repositoryService .getProcessDefinition(cessDefinitionId()); //获取流程实例 ProcessInstance processInstance = ProcessInstanceQuery() .processInstanceId(cessInstanceId()).singleResult(); //获取当前流程实例的活动id String activityId = ivityId(); //获取当前流程定义中的活动节点(包括开始和结束节点) ActivityImpl activityImpl = tivity(activityId); //获取输出的flow List transitionList = goingTransitions();//改为getIncomingTransitions()就是获取income的连接线 for(PvmTransition transition: transitionList){ String flowName = (String) perty("name"); n(flowName); } }问题: 获取当前节点的来路income新建⼀个bpmn⽂件:测试代码:/** * 获取来路 */ public List getIncomeFlow(String assignee){ List strList = new ArrayList(); Task task = TaskQuery() .processDefinitionKey("leave_bill").taskAssignee(assignee).singleResult(); ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) repositoryService .getProcessDefinition(cessDefinitionId()); //获取流程实例 ProcessInstance processInstance = ProcessInstanceQuery() .processInstanceId(cessInstanceId()).singleResult(); //获取当前流程实例的活动id String activityId = ivityId(); //获取当前流程定义中的活动节点(包括开始和结束节点) ActivityImpl activityImpl = tivity(activityId); //获取输出的flow List transitionList = omingTransitions(); for(PvmTransition transition: transitionList){ String flowName = (String) perty("name"); (flowName); } return strList; }

/** * 获取当前节点的来路 * ① 获得当前节点的所有来路(其中⼀条是来路) * ② 拿到上⼀步的节点(历史节点),找到它的所有出路(其中有⼀条出路是当前节点的来路) * ③ 找到以上两步中的重复的连线就是当前节点的来路 */ @Test public void getIncomingFlow(){ String assignee = "employee"; String assignee = "employee"; List preActivityOutcomeList = new ArrayList(); Task task = TaskQuery().processDefinitionKey("leave_bill") .taskAssignee(assignee).singleResult(); List historicActivityInstanceList = historyService .createHistoricActivityInstanceQuery() .processInstanceId(cessInstanceId()) .finished()//已经结束的活动节点 .orderByHistoricActivityInstanceStartTime().desc().list(); for(HistoricActivityInstance historicActivityInstance: historicActivityInstanceList){ n("历史活动ID: "+ivityId()); n("历史活动名称: "+ivityName()); } //获取当前节点的前⼀个活动节点 HistoricActivityInstance historicActivityInstance = (0); //获取前⼀个活动节点的id String activityId = ivityId(); //获取流程定义实体的对象(不需要创建查询对象*****) ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) repositoryService .getProcessDefinition(cessDefinitionId()); //获取前⼀个活动节点的实现类对象 ActivityImpl activityImpl = tivity(activityId); //获取前⼀个活动节点的所有出路 List outgoingList = goingTransitions(); for(PvmTransition outgoing: outgoingList){ String flowName = (String) perty("name"); n(flowName); (flowName); } //获取当前节点的所有⼊路 List incomeFlows = omeFlow(assignee); n(incomeFlows);

String incomeFlow = null; loop : for(String income: incomeFlows){ for(String outcome: preActivityOutcomeList){ if((outcome)){ incomeFlow = income;//incomeFlow = outcome; break loop; } } } n("当前节点的来路是: "+incomeFlow); }

发布者:admin,转转请注明出处:http://www.yc00.com/web/1690873945a452183.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信