1、用activiti 工作流 实现简单的请假 附带源码用activiti 工作流 实现简单的请假 附带源码用activiti 工作流 实现简单的请假 附带源码新建一个Maven项目项目结构pom.xmlhtmlview plaincopy1.projectxmlns=http:/maven.apache.org/POM/4.0.0xmlns:xsi=http:/www.w3.org/2001/XMLSchema-instance2.xsi:schemaLocation=http:/maven.apache.org/POM/4.0.0http:/maven.apache.org/xsd/maven
2、-4.0.0.xsd3.modelVersion4.0.0modelVersion4.5.groupIdcom.dengkun.activitigroupId6.artifactIdTest1artifactId7.version0.0.1-SNAPSHOTversion8.packagingjarpackaging9.nameTest1Namename10.descriptionTest1ddescription11.12.properties13.project.build.sourceEncodingUTF-8project.build.sourceEncoding14.properti
3、es15.16.dependencies17.dependency18.groupIdorg.vaadin.addonsgroupId19.artifactIddcharts-widgetartifactId20.version0.10.0version21.typejartype22.dependency23.24.dependency25.groupIdorg.activitigroupId26.artifactIdactiviti-engineartifactId27.version5.15.1version28.dependency29.dependency30.groupIdorg.
4、activitigroupId31.artifactIdactiviti-springartifactId32.version5.15.1version33.dependency34.dependency35.groupIdorg.activitigroupId36.artifactIdactiviti-explorerartifactId37.version5.15.1version38.dependency39.40.dependency41.groupIdcommons-dbcpgroupId42.artifactIdcommons-dbcpartifactId43.version1.4
5、version44.dependency45.dependency46.groupIdmysqlgroupId47.artifactIdmysql-connector-javaartifactId48.version5.1.29version49.dependency50.51.dependency52.groupIdorg.springframeworkgroupId53.artifactIdspring-coreartifactId54.version4.0.6.RELEASEversion55.dependency56.dependency57.groupIdorg.springfram
6、eworkgroupId58.artifactIdspring-beansartifactId59.version4.0.6.RELEASEversion60.dependency61.dependency62.groupIdorg.springframeworkgroupId63.artifactIdspring-testartifactId64.version4.0.6.RELEASEversion65.dependency66.dependency67.groupIdorg.springframeworkgroupId68.artifactIdspring-contextartifact
7、Id69.version4.0.6.RELEASEversion70.dependency71.dependency72.groupIdorg.springframeworkgroupId73.artifactIdspring-context-supportartifactId74.version4.0.6.RELEASEversion75.dependency76.dependency77.groupIdorg.springframeworkgroupId78.artifactIdspring-txartifactId79.version4.0.6.RELEASEversion80.depe
8、ndency81.dependency82.groupIdorg.springframeworkgroupId83.artifactIdspring-ormartifactId84.version4.0.6.RELEASEversion85.dependency86.87.dependency88.groupIdorg.mybatisgroupId89.artifactIdmybatisartifactId90.version3.2.5version91.dependency92.dependency93.groupIdorg.mybatisgroupId94.artifactIdmybati
9、s-springartifactId95.version1.2.2version96.dependency97.98.dependency99.groupIdjunitgroupId100.artifactIdjunitartifactId101.version4.11version102.dependency103.104.dependency105.groupIdlog4jgroupId106.artifactIdlog4jartifactId107.version1.2.4version108.dependency109.dependency110.groupIdorg.slf4jgro
10、upId111.artifactIdslf4j-apiartifactId112.version1.7.6version113.dependency114.dependency115.groupIdorg.slf4jgroupId116.artifactIdjcl-over-slf4jartifactId117.version1.7.6version118.dependency119.dependency120.groupIdorg.slf4jgroupId121.artifactIdslf4j-log4j12artifactId122.version1.7.6version123.depen
11、dency124.125.dependency126.groupIdmonsgroupId127.artifactIdcommons-lang3artifactId128.version3.1version129.dependency130.dependency131.groupIdcommons-iogroupId132.artifactIdcommons-ioartifactId133.version2.4version134.dependency135.dependency136.groupIdcommons-fileuploadgroupId137.artifactIdcommons-
12、fileuploadartifactId138.version1.2.2version139.dependency140.141.dependency142.groupIdjavax.annotationgroupId143.artifactIdjavax.annotation-apiartifactId144.version1.2version145.dependency146.dependency147.groupIdjoda-timegroupId148.artifactIdjoda-timeartifactId149.version2.1version150.dependency151
13、.152.dependencies153.project本人使用的是开源中国的库,dcharts-widget 路径不同,所以要复制到本地的私服库,注意名字不能错。activiti.cfg.xml:htmlview plaincopy1.xmlversion=1.0encoding=UTF-8?2.beansxmlns=http:/www.springframework.org/schema/beans3.xmlns:xsi=http:/www.w3.org/2001/XMLSchema-instance4.xsi:schemaLocation=http:/www.springframewor
14、k.org/schema/beanshttp:/www.springframework.org/schema/beans/spring-beans.xsd5.6.beanid=processEngineConfigurationclass=org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration7.propertyname=jdbcUrlvalue=jdbc:mysql:/myactiviti/8.propertyname=jdbcDrivervalue=com.mysql.jdbc.Driver/9.propertyn
15、ame=jdbcUsernamevalue=root/10.propertyname=jdbcPasswordvalue=123456/11.propertyname=databaseSchemaUpdatevalue=true/12.bean13.beans在 resource下新建Activiti Diagram可以通过这个地址安装插件Activiti BPMN 2.0 designer -http:/activiti.org/designer/update/(如果是公司需要代理才能连接外网,请注意设置代理)将UserTask分别修改成入下图所示修改好ID和 NAME然后在修改Mainco
16、nfig中的Assignee,员工请假修改为张三,老板审批修改为老板点击Window-Preferences-Activiti-Save Actions:将Createprocessdefinitionimagewhensavingthediagram勾选然后保存bpmn文件的时候会自动帮你截图通过ProcessEngines.getDefaultProcessEngine获取流程引擎注:请先在MySql建立数据库myactiviti,使用默认设置即可,然后运行App.java 中的main函数,当获取到的processEngine对象不为空时就会在数据库创建关于activiti的23张表,要
17、保证数据库连接正常。javaview plaincopy1.publicclassApp2.publicstaticvoidmain(Stringarg)3.ProcessEngineprocessEngine=ProcessEngines.getDefaultProcessEngine();4.5.通过源码可以看到getDefaultProcessEngine方法会通过默认的activiti.cfg.xml文件名或者是activiti-context.xml文件名读取xml文件具体作用如下:跟详细的情况可以去下面这个地址了解:此时你可以在数据库中看到act_ge_property表中插入了3
18、条数据将MyLeave.bpmn和MyLeave.png打包成myleave.zip文件(一定要是zip别压缩成rar)执行以下方法,发布请假流程:MyTest.java附录的项目的代码,建议执行一个函数看下数据库再执行下一个,能比较快速上手数据库。注:保证数据库链接正常,否则processEngine会报空指针。javaview plaincopy1./*2.*发布流程3.*发布流程后,流程文件会保存到数据库中4.*/5.Test6.publicvoiddeployFlow()7.RepositoryServicerepositoryService=processEngine.getRepo
19、sitoryService();8.9./获取在classpath下的流程文件10.InputStreamin=this.getClass().getClassLoader().getResourceAsStream(myleave.zip);11.ZipInputStreamzipInputStream=newZipInputStream(in);12./使用deploy方法发布流程13.repositoryService.createDeployment()14.addZipInputStream(zipInputStream)15.name(Myleave)16.deploy();17.
20、查看数据库发布的流程文件信息会保存在下面的三张表中:我们可以通过RepositoryService获取详细的流程定义信息htmlview plaincopy1.Test2.publicvoidqueryProcdef()3.RepositoryServicerepositoryService=processEngine.getRepositoryService();4./创建查询对象5.ProcessDefinitionQueryquery=repositoryService.createProcessDefinitionQuery();6./添加查询条件7.query.processDefi
21、nitionKey(myProcess);/通过key获取8./.processDefinitionName(Myprocess)/通过name获取9./.orderByProcessDefinitionId()/根据ID排序10./执行查询获取流程定义明细11.ListProcessDefinitionpds=query.list();12.for(ProcessDefinitionpd:pds)13.System.out.println(ID:+pd.getId()+,NAME:+pd.getName()+,KEY:+pd.getKey()+,VERSION:+pd.getVersion(
22、)+,RESOURCE_NAME:+pd.getResourceName()+,DGRM_RESOURCE_NAME:+pd.getDiagramResourceName();14.15.key和name就是我们原先画bpmn时候声明的:使用流程定义的Key发布一个请假流程:javaview plaincopy1./*2.*发布流程3.*/4.Test5.publicvoidstartFlow()6.7.RuntimeServiceruntimeService=processEngine.getRuntimeService();8./*9.*启动请假单流程并获取流程实例10.*因为该请假单流程
23、可以会启动多个所以每启动一个请假单流程都会在数据库中插入一条新版本的流程数据11.*通过key启动的流程就是当前key下最新版本的流程12.*13.*/14.ProcessInstanceprocessInstance=runtimeService.startProcessInstanceByKey(myProcess);15.System.out.println(id:+processInstance.getId()+,activitiId:+processInstance.getActivityId();16.流程发布后在act_ru_task,act_ru_execution, act_
24、ru_identitylink表中插入流程数据接下来就可以通过用户ID去查看该用户的任务了javaview plaincopy1./*2.*查看任务3.*/4.Test5.publicvoidqueryTask()6./获取任务服务对象7.TaskServicetaskService=processEngine.getTaskService();8./根据接受人获取该用户的任务9.Listtasks=taskService.createTaskQuery()10.taskAssignee(张三)11.list();12.for(Tasktask:tasks)13.System.out.println(ID:+task.ge
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1