当前位置: 首页 > news >正文

网站最下面版权模板/泉州seo报价

网站最下面版权模板,泉州seo报价,门户网站开发 报价,一品威客旅游网站开发Activiti提供了流程运行时对流程进行控制的API,可以使用RuntimeService提供的方法对流程进行控制,与先前博客中提到的一样,RuntimeService是Activiti提供的业务组件之一。前几篇博客中介绍的TaskService主要用于任务管理,包括任务操作&#x…

     Activiti提供了流程运行时对流程进行控制的API,可以使用RuntimeService提供的方法对流程进行控制,与先前博客中提到的一样,RuntimeService是Activiti提供的业务组件之一。前几篇博客中介绍的TaskService主要用于任务管理,包括任务操作,任务数据管理等;IdentityService主要用于管理流程的身份数据;RepositoryService主要用于管理流程部署的数据;而本篇博客要学习的RuntimeService主要用于管理流程在运行时产生的数据以及提供对流程进行操作的API。其中流程运行时产生的数据包括流程参数、事件、流程实例以及执行流等。


     什么是流程实例与执行流

     在Activiti中,启动了一个流程后,就会创建一个流程实例(ProcessInstance),每个流程实例至少会有一个执行流(Execution);如果流程中出现了分支,那么执行流的概念就出现了。所以一个流程实例就是一个执行流,这就是区别所在。


 

     RuntimeService中的查询操作

     执行流查询

RuntimeService中有createExecutionQuery方法可以得到一个ExecutionQuery对象,该对象就可以根据执行流的相关数据查询执行流。直接看个例子吧!从实战中学习。


<span style="font-family:Comic Sans MS;font-size:18px;">public class ExecutionQuery {public static void main(String[] args) {// 创建流程引擎ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();// 得到流程存储服务实例RepositoryService repositoryService = engine.getRepositoryService();// 得到运行时服务组件RuntimeService runtimeService = engine.getRuntimeService();// 部署流程描述文件repositoryService.createDeployment().addClasspathResource("bpmn/ExecutionQuery.bpmn").deploy();//设置参数Map<String, Object> vars1 = new HashMap<String, Object>();vars1.put("days", 5);Map<String, Object> vars2 = new HashMap<String, Object>();vars2.put("days", 6);Map<String, Object> vars3 = new HashMap<String, Object>();vars3.put("days", 7);vars3.put("name", "crazyit");// 开始流流程ProcessInstance pi1 = runtimeService.startProcessInstanceByKey("testProcess", "businessKey1", vars1);ProcessInstance pi2 = runtimeService.startProcessInstanceByKey("testProcess", "businessKey2", vars2);ProcessInstance pi3 = runtimeService.startProcessInstanceByKey("testProcess", "businessKey3", vars3);// 使用执行流查询方法List<Execution> exes = runtimeService.createExecutionQuery().processDefinitionKey("testProcess").list();System.out.println("使用processDefinitionKey方法查询执行流:" + exes.size());		exes = runtimeService.createExecutionQuery().processInstanceBusinessKey("businessKey1").list();System.out.println("使用processInstanceBusinessKey方法查询执行流:" + exes.size());		exes = runtimeService.createExecutionQuery().messageEventSubscriptionName("messageName").list();System.out.println("使用messageEventSubscriptionName方法查询执行流:" + exes.size());// 根据节点id属性查询当前的执行流Execution exe = runtimeService.createExecutionQuery().activityId("messageintermediatecatchevent1").processInstanceId(pi1.getId()).singleResult();System.out.println("使用activityId和processInstanceId方法查询执行流,得到执行ID:" + exe.getId());//让流程往下执行runtimeService.messageEventReceived("messageName", exe.getId());exes = runtimeService.createExecutionQuery().signalEventSubscriptionName("signalName").list();System.out.println("使用signalEventSubscriptionName方法查询执行流:" + exes.size());// 根据参数查询执行流exes = runtimeService.createExecutionQuery().variableValueEquals("name", "crazyit").list();System.out.println("使用variableValueEquals方法查询执行流:" + exes.size());exes = runtimeService.createExecutionQuery().variableValueGreaterThan("days", 5).list();System.out.println("使用variableValueGreaterThan方法查询执行流:" + exes.size());exes = runtimeService.createExecutionQuery().variableValueGreaterThanOrEqual("days", 5).list();System.out.println("使用variableValueGreaterThanOrEqual方法查询执行流:" + exes.size());exes = runtimeService.createExecutionQuery().variableValueLessThan("days", 6).list();System.out.println("使用variableValueLessThan方法查询执行流:" + exes.size());exes = runtimeService.createExecutionQuery().variableValueLessThanOrEqual("days", 6).list();System.out.println("使用variableValueLessThanOrEqual方法查询执行流:" + exes.size());exes = runtimeService.createExecutionQuery().variableValueLike("name", "%crazy%").list();System.out.println("使用variableValueLike方法查询执行流:" + exes.size());exes = runtimeService.createExecutionQuery().variableValueNotEquals("days", 8).list();System.out.println("使用variableValueNotEquals方法查询执行流:" + exes.size());}}</span>


 

     流程实例查询

     与上述类似,也可以通过RuntimeService的createProcessInstanceQuery方法获取ProcessInstanceQuery实例,在该实例中也为我们提供了有关流程实例的查询方法


<span style="font-family:Comic Sans MS;font-size:18px;">public class ProcessInstanceQuery {public static void main(String[] args) {// 创建流程引擎ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();// 得到流程存储服务实例RepositoryService repositoryService = engine.getRepositoryService();// 得到运行时服务组件RuntimeService runtimeService = engine.getRuntimeService();// 部署流程描述文件repositoryService.createDeployment().addClasspathResource("bpmn/ProcessInstanceQuery.bpmn").deploy();ProcessInstance pi1 = runtimeService.startProcessInstanceByKey("testProcess", "key1");ProcessInstance pi2 = runtimeService.startProcessInstanceByKey("testProcess", "key2");ProcessInstance pi3 = runtimeService.startProcessInstanceByKey("testProcess", "key3");// 将流程置为中断状态runtimeService.suspendProcessInstanceById(pi1.getId());// 查询流程实例List<ProcessInstance> pis = runtimeService.createProcessInstanceQuery().processDefinitionKey("testProcess").list();System.out.println("使用processDefinitionKey方法查询流程实例:" + pis.size());pis = runtimeService.createProcessInstanceQuery().active().list();System.out.println("使用active方法查询流程实例:" + pis.size());pis = runtimeService.createProcessInstanceQuery().processInstanceBusinessKey("key2").list();System.out.println("使用processInstanceBusinessKey方法查询流程实例:" + pis.size());// 根据多个流程实例ID查询Set<String> ids = new HashSet<String>();ids.add(pi1.getId());ids.add(pi2.getId());pis = runtimeService.createProcessInstanceQuery().processInstanceIds(ids).list();System.out.println("使用processInstanceIds方法查询流程实例:" + pis.size());}}
</span>



 

     启动流程 

     RuntimeServcie中也为我们提供了很多启动流程的方法,方法统一命名为startProcessInstanceByXXX,其中XXX有流程定义ID、流程定义的key(流程描述文件中的process的id属性)和流程中定义的额message。


     startProcessInstanceById方法

 

<span style="font-family:Comic Sans MS;font-size:18px;">public class StartById {/*** @param args*/public static void main(String[] args) {// 创建流程引擎ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();// 得到流程存储服务实例RepositoryService repositoryService = engine.getRepositoryService();RuntimeService runtimeService = engine.getRuntimeService();// 部署流程描述文件Deployment dep = repositoryService.createDeployment().addClasspathResource("bpmn/startById.bpmn20.xml").deploy();		// 查找流程定义ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();//设置流程参数Map<String, Object> vars = new HashMap<String, Object>();vars.put("days", 5);//启动流程runtimeService.startProcessInstanceById(pd.getId());runtimeService.startProcessInstanceById(pd.getId(), vars);runtimeService.startProcessInstanceById(pd.getId(), "vacationRequest1");runtimeService.startProcessInstanceById(pd.getId(), "vacationRequest2", vars);// 查询流程实例,结果为4long count = runtimeService.createProcessInstanceQuery().count();System.out.println("流程实例数量:" + count);}}
</span>


     startProcessInstanceByKey方法

<span style="font-family:Comic Sans MS;font-size:18px;">public class StartByKey {/*** @param args*/public static void main(String[] args) {// 创建流程引擎ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();// 得到流程存储服务实例RepositoryService repositoryService = engine.getRepositoryService();RuntimeService runtimeService = engine.getRuntimeService();// 部署流程描述文件repositoryService.createDeployment().addClasspathResource("bpmn/startByKey.bpmn20.xml").deploy();	//初始化流程参数Map<String, Object> vars = new HashMap<String, Object>();vars.put("days", 4);//启动流程runtimeService.startProcessInstanceByKey("vacationRequest");runtimeService.startProcessInstanceByKey("vacationRequest", vars);runtimeService.startProcessInstanceByKey("vacationRequest", "testKey");runtimeService.startProcessInstanceByKey("vacationRequest", "testKey2", vars);// 查询流程实例,结果为4long count = runtimeService.createProcessInstanceQuery().count();System.out.println("流程实例数量:" + count);}}
</span>




     startProcessInstanceByMessage方法

<span style="font-family:Comic Sans MS;font-size:18px;">public class StartByMessage {/*** @param args*/public static void main(String[] args) {// 创建流程引擎ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();// 得到流程存储服务实例RepositoryService repositoryService = engine.getRepositoryService();RuntimeService runtimeService = engine.getRuntimeService();// 部署流程描述文件repositoryService.createDeployment().addClasspathResource("bpmn/startByMessage.bpmn20.xml").deploy();	//初始化流程参数Map<String, Object> vars = new HashMap<String, Object>();vars.put("days", 4);//启动流程runtimeService.startProcessInstanceByMessage("startMsg");runtimeService.startProcessInstanceByMessage("startMsg", vars);runtimeService.startProcessInstanceByMessage("startMsg", "testKey");runtimeService.startProcessInstanceByMessage("startMsg", "testKey2", vars);// 查询流程实例,结果为4long count = runtimeService.createProcessInstanceQuery().count();System.out.println("流程实例数量:" + count);}}
</span>


     流程参数

     RuntimeService组件跟其他组件类似,也可以在流程运行的过程中来设置参数,方法与其他组件都类似,并且参数也有作用域的问题。在此就给个demo看一下吧

<span style="font-family:Comic Sans MS;font-size:18px;">public class SetVariableLocal {public static void main(String[] args) {// 创建流程引擎ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();// 得到流程存储服务实例RepositoryService repositoryService = engine.getRepositoryService();// 得到运行时服务组件RuntimeService runtimeService = engine.getRuntimeService();// 得到任务TaskService taskService = engine.getTaskService();// 部署流程描述文件repositoryService.createDeployment().addClasspathResource("bpmn/localVariable.bpmn20.xml").deploy();//启动流程ProcessInstance pi = runtimeService.startProcessInstanceByKey("vacationRequest");//查询全部的任务,得到相应的执行流,设置不同的参数List<Task> tasks = taskService.createTaskQuery().processInstanceId(pi.getId()).list();for (Task task : tasks) {Execution exe = runtimeService.createExecutionQuery().executionId(task.getExecutionId()).singleResult();if ("Manager Audit".equals(task.getName())) {//经理审核节点,设置Local参数runtimeService.setVariableLocal(exe.getId(), "managerVar", "manager var");} else {//HR审核节点,设置全局参数runtimeService.setVariable(exe.getId(), "hrVar", "hr var");}}//两个执行流时输出参数for (Task task : tasks) {Execution exe = runtimeService.createExecutionQuery().executionId(task.getExecutionId()).singleResult();if ("Manager Audit".equals(task.getName())) {				System.out.println("使用getVariableLocal方法获取经理参数:" + runtimeService.getVariableLocal(exe.getId(), "managerVar"));System.out.println("使用getVariable方法获取经理参数:" + runtimeService.getVariableLocal(exe.getId(), "managerVar"));} else {System.out.println("使用getVariableLocal方法获取HR参数:" + runtimeService.getVariableLocal(exe.getId(), "hrVar"));System.out.println("使用getVariable方法获取HR参数:" + runtimeService.getVariable(exe.getId(), "hrVar"));}}//完成任务for (Task task : tasks) {taskService.complete(task.getId());}System.out.println("========  完成流程分支后     ========");//重新查找流程任务tasks = taskService.createTaskQuery().processInstanceId(pi.getId()).list();for (Task task : tasks) {System.out.println("当前流程节点:" + task.getName());Execution exe = runtimeService.createExecutionQuery().executionId(task.getExecutionId()).singleResult();System.out.println("经理参数:" + runtimeService.getVariable(exe.getId(), "managerVar"));System.out.println("HR参数:" + runtimeService.getVariable(exe.getId(), "hrVar"));}}}
</span>



http://www.jmfq.cn/news/5274307.html

相关文章:

  • 做做同城网站好还是做垂直网站好/ui设计公司
  • 百度如何建网站/徐州百度搜索网站排名
  • 有平面广告设计的网站/百度高级搜索引擎
  • 做网站卖东西/百度竞价推广屏蔽软件
  • 资源网站很难做/无锡网站关键词推广
  • 什么网站可以在图片上做超链接/网络广告策划案例
  • 二手书交易网站开发背景分析/搜索大全引擎入口网站
  • 电影订票网站怎么做/seo在线优化网站
  • 设计网站案例网站/百度关键词优化排名技巧
  • 做网站用哪种代码比较好推广/百度推广培训班
  • 天津创思佳网络网站制作公司/站长工具是什么
  • 南通网站建设排名公司哪家好/seo销售
  • 网站建设都是需要什么软件/百度推广后台登陆
  • 拓网手机版网站管理系统/手机端百度收录入口
  • wordpress加载评论很慢/丈哥seo博客
  • 建立网站的流程是什么/亚马逊开店流程及费用
  • 网站服务器时间在哪里查询/网站seo谷歌
  • 东莞市门户网站建设怎么样/重庆百度推广优化排名
  • 网站关键字推广/五行seo博客
  • 有没有免费查公司的软件/长沙网站推广和优化
  • 个人网站logo生成/福州模板建站哪家好
  • 海外免费云服务器/站长工具seo综合查询下载
  • 如何做翻唱网站/百度网址大全电脑版旧版本
  • 建设主题网站步骤/今日疫情最新消息
  • 嘉定网站设计怎么样/网上营销新观察网
  • 专业积分商城网站制作/sem优化是什么意思
  • php开发网站的优势/湖南网络优化
  • 摄影网站哪个最好/seo门户网
  • 南京整站优化/宁波网站推广联系方式
  • 网站怎么做sitemap/网络广告策划与制作