saas ihrm项目activiti7讲义进阶部分_第1页
saas ihrm项目activiti7讲义进阶部分_第2页
saas ihrm项目activiti7讲义进阶部分_第3页
saas ihrm项目activiti7讲义进阶部分_第4页
saas ihrm项目activiti7讲义进阶部分_第5页
已阅读5页,还剩32页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

与者(用户):李假单(102)表示发静态的,包括静态的,包括.bpmn(xml格式、png与者(用户):王publicvoidstartProcessInstance()流程定义StringprocessDefinitionKey=获取RuntimeServiceruntimeService=ProcessInstanceprocessInstance=流程定义:"+System.out.println("流程实例id:"+processInstance.getId());System.out.println("当前活动Id:processInstance.getActivityId());}根据流程定义的keyProcessInstanceprocessInstance=#id和流程实id相同,如果当前有多个分支正在运行则该执行表中有多条记录,存在执行表的主键和流程实例id不相同的记录。不论当前有几个分支总会有一条记录的执行表的主键和流程实例id相同#SELECT*FROM 键就是任务id,任务完成此表记录不删除。SELECT*FROM publicvoidqueryProcessInstance()流程定义StringprocessDefinitionKey=获取RuntimeServiceruntimeService=processEngine.getRuntimeService();List<ProcessInstance>list=runtimeServicefor(ProcessInstanceprocessInstance:list)++processInstance.getProcessDefinitionId());System.out.println("是否执行完成:processInstance.isEnded());System.out.println("是否暂停: }}前活动标识:"+关联在activiti实际应用时,查询流程实例列表时可能要显示出业务系统的一些相关信息,比如:查询当中存在,而并没有在activiti数据库中存在,所以是无法通过activiti的api查询到请假天数等信息。在查询流程实例时,通过businessKey(业务标识)关联查询业务系统的请假单表,查询出请假天通过下面的代码就可以获取activiti中所对应实例保存的业务Key。而这个业务Key一般都会保存相关联的业务操作表的主键,再通过主键ID去查询业务信息,比如通过请假单的ID,去查询的StringbusinessKey=在activiti的act_ru_execution表,字段BUSINESS_KEY就是存放业务KEY流程定义StringprocessDefinitionId=RepositoryServicerepositoryService=ProcessDefinitionprocessDefinition=booleansuspend=true,true,}}流程实例StringprocessInstanceId=获取RuntimeServiceruntimeService==booleansuspend=}}在properties视图中,填写Assignee项为任务由于固定分配方式,任务一步一步执行任务,执行到每一个任务将按照bpmn的配置去分配任务。UEL表达式统一表达式语言,activiti支持两个UEL表达式:UEL-value和UEL-methodassignee这个变量是activiti的一个流程变量。user也是activiti的一个流程变量,user.assignee表示通过调用user的getteruserBean是spring容器中的一个bean,表示调用该bean的getUserId()UEL-method与UEL-valuebeafndMaaerFormpoyee流程变量,emp作为参数传到ldapService.findManagerForEmployee方法中。表达式支持解析基础类型、bean、list、arraymap,也可作为条件判断。${order.price>100&&order.price<Map<String,Object>variables=newHashMap<String,variables.put("assignee"," ProcessInstanceprocessInstance=某个任务使用了表达式${order.price100&&order.price250},当执行该任务时必须保证order在流程变量中存在,否则activiti异常。任务器是发生对应的任务相关时执行自定义java逻辑或表达式Delete:任务完成后触发All:publicclassMyTaskListenerimplements{publicvoidnotify(DelegateTaskdelegateTask)//这里指定任务}}使用器分配方式,按照去执行类的notify方法,方法如果不能正常执行也会影响 publicvoid alTaskList()流程定义StringprocessDefinitionKey=Stringassignee 丰创建TaskServicetaskService=processEngine.getTaskService();List<Task>list=taskService.createTaskQuery()//for(Tasktask:list) :"+task.getAssignee());System.out.println("任务名称:"+task.getName());}}在activiti实际应用时,查询待办任务可能要显示出业务系统的一些相关信息,比如:查询待请而并没有在activiti数据库中存在,所以是无法通过activiti的api查询到请假天数等信息。businessKey()关联查询业务系统的请假单表,查询出请假天publicvoidcompletTask()StringStringtaskId=创建TaskServicetaskService=processEngine.getTaskService();}注意:虽然流程变量中可以业务数据可以通过activiti的api查询流程变量从而实现查询业务注意:如果将pojo到流程变量中,必须实现序列化接口serializable,为了防止由于新增字段无流程变量的作用域默认是一个流程实例(processInstance),也可以是一个任务(task)或一个执行实例一个任务和一个执行实例范围,范围没有流程实例大,称为local变量。:zhansanglobal变量中变量名不允许重复,设置相同名称的变量,后设置的值会覆盖前设置的变量值。Local变量名也可以和global变量名相同,没有影响。1>可以在assignee处设置UEL表达式,表达式的值为任务的比如:${assignee},assignee就是一个流程变量名称Activiti获取UELassigneeassignee的值作为任务的2>可以在连线上设置UEL比如:${price>=10000}和${price<10000}:price就是一个流程变量名称,uel表达式结果类型为如果UEL表达式是true,要决定流程执行Global审核,3天以上先由总经理审核,总经理审核通过再由人事经理存档。publicvoidstartProcessInstance()流程定义StringprocessDefinitionKey=HolidayHolidayholiday=newMap<String,Object>variables=newHashMap<String,variables.put("num",holiday.getNum());RuntimeServiceruntimeService=ProcessInstanceprocessInstance=流程实例+}startProcessInstanceByKey(processDefinitionKeyvariables)流程变量作用域是一个流程实例,流程变量使用Map,同一个流程实例设置变量map中key相同,后者覆盖前者。key在流程实例中已存在相同的名字则后设置的变量替publicvoidcompletTask()StringtaskId=TaskServicetaskService=processEngine.getTaskService();Holidayholiday=newHoliday();Map<String,Object>variables=newHashMap<String,variables.put("holiday",holiday); publicvoidpublicvoidStringexecutionId="2601";RuntimeServiceruntimeService=processEngine.getRuntimeService();Holidayholiday=newHoliday();//通过流程实例id设置流程变量runtimeService.setVariable(executionId"holiday"holiday);}publicvoidTaskServicetaskService=processEngine.getTaskService();Holidayholiday=newHoliday();taskService.setVariable(taskId,"holiday"holiday);}2UEL表达式中流程变量值为空NULL,流程不按UEL#Id_Type_:变量类型Name_:Proc_inst_id_:所属流程实例id,global和local变量都Task_id_:所属任务id,local变量Bytearray_:serializable类型变量对应act_ge_bytearray表的idDouble_:double类型变量值SELECT*FROM globallocal变量local任务办理时设置local流程变量,当前运行的流程实例只能在该任务结束前使用,任务结束该变量无publicvoidcompletTask()StringtaskId=TaskServicetaskService=Map<String,Object>variables=newHashMap<String,Object>();Holidayholiday=newHoliday();Map<String,Map<String,Object>variables=newHashMap<String,variables.put("holiday",holiday);//}publicvoidTaskServicetaskService=processEngine.getTaskService();Holidayholiday=newHoliday();taskService.setVariableLocal(taskId,"holiday"holiday);}如果上边例子中设置global变量改为设置locallocalhistoryService查询每个历HistorikInstanceQuery historikInstanceQuery //查询结果包括local for kInstance kInstance:{ }在流程定义中在任务结点的assignee固定设置任务,在流程定义时将参与者固定设置在.bpmn文件中,如果临时任务变更则需要修改流程定义,系统可扩展性差。查看bpmn我们可以看到部门经理的审核人已经设置为zhangsan,lishi这样的一组候选人,可以使用查询方式同个人任务部分,根据assignee查询用户负责的个人任务。publicvoidfindGroupTaskList()流程定义StringprocessDefinitionKey=StringcandidateUser=创建TaskServicetaskService=List<Task>list=forfor(Tasktask:list)System.out.println("任务id:"+task.getId()); :"+task.getAssignee());System.out.println("任务名称:}}publicvoidTaskServicetaskService=StringtaskId=StringuserId=Tasktask=}} publicvoid流程定义alTaskList()StringprocessDefinitionKey=Stringassignee=创建TaskServicetaskService=processEngine.getTaskService();List<Task>list=taskService.createTaskQuery()//for(Tasktask:list)流程实例 +System.out.println("任务id: :"+task.getAssignee());System.out.println("任务名称:"+task.getName());}}publicvoidStringtaskId="12304";} 查询任务使用TaskServicetaskService=StringtaskId=StringuserId=Tasktask=if(task!=null)}}也可以通过setAssignee方法将任务委托给其它用户负责,注意被委托的用户可以不是候选人(建议publicvoidsetAssigneeToCandidateUser()查询任务使用TaskServiceTaskServicetaskService=StringtaskId=StringuserId=Stringcandidateuser=Tasktask=if(task!={taskService.setAssignee(taskId,}SELECT*FROMact_ru_task任务执行表,记录当前执行的任务,由于该任务当前是组任务,所有assignee为空,当拾取任务后该字段就是拾取用户的idSELECT*FROMact_ru_identitylink任务参与者,记录当前参考任务用户或组,当前任务如果设置act_ru_identitylinkact_hi_identitylinkact_ru_identitylink插入记录的同排他网关(也叫异或(XOR)网关,或叫基于数据的排他网关执行到这个网关,所有分支都会判断条件是否为true,如果为true则执行该分支,上图中,在连线的condition条件上设置分支条件。 exclusivegatewayexclusivegateway1couldbeselectedforcontinuingtheprocess 'exclusivegateway1'couldbeselectedforcontinuingthepro

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论