长春h5建站,广告创意设计的影响因素,快速网站排名汉狮公司,网站建设背景朝阳一、流程绘制与导入百度啥的找了好多bpmn绘制工具#xff0c;都不尽如人意#xff0c;大多数都不能编辑网关出口的跳转条件#xff0c;最后还是选择了activiti官方的那个绘图的app。。。啥都好#xff0c;就是线不能弯#xff0c;很难受。(后来开发的时候惊讶地发现了方法…一、流程绘制与导入百度啥的找了好多bpmn绘制工具都不尽如人意大多数都不能编辑网关出口的跳转条件最后还是选择了activiti官方的那个绘图的app。。。啥都好就是线不能弯很难受。(后来开发的时候惊讶地发现了方法虽然感觉操作不是很友好)要是有好用的希望大家能够推荐一下~下面Old Version选择6.x Download下载完成后是一个zip包解压后把里面的activiti-app.war丢到tomcat下面启动就行这边使用tomcat8.5.49该war包需要java1.8。(这边用idea直接起war包好像会遇到一系列问题主要是contentPath会变所以还是直接丢到tomcat下面吧)。1、启动后访问http://localhost:8080/activiti-app/#/会跳转到登录页默认账号admin/test即可登陆后界面如下选择第一个2、然后选择Create Process3、新建页面如下Model name为流程名称(可重复)Model key为流程Key实际调用中使用的即为该key似乎key可以相同但是后面创建的会有版本号的概念会自动14、画图就完事了绘图规则可以自行了解bpmn5、保存后选择下载放入工程目录/resources/processes下修改后缀为bpmn其实应该是可以直接解析bpmn20.xml文件的来着具体的还在学习~启动项目出现The following process definition files will be deployed: [***.bpmn]即说明流程部署成功。二、如何开始一个流程我们以上图的流程为例这边先提几个关键的service类2.1 服务接口1、TaskService在流程进行过程中每个节点的操作方法经常用的比如查询处于“领导审批”这个节点的任务完成这个任务等等。2、RuntimeService流程相关服务基本的功能例如开始一个实例流程等等。3、RepositoryService流程部署相关的服务4、HistoryService历史流程相关的服务2.2 开始流程如上所说开始流程我们需要用到RuntimeService这个类。直接上代码PostMapping(value /start)ResponseBodyApiOperation(value 启动某个流程)publicString start(RequestParam String instanceKey) {//map中放入该流程需要的业务数据Map map new HashMap();map.put(createUser, Test);map.put(createTime, 1576206360000L);ProcessInstance instanceruntimeService.startProcessInstanceByKey(instanceKey, map);returninstance.getId();}调用runtimeService.startProcessInstanceByKey()根据部署的流程key来启动一个流程RuntimeService里面也有很多根据其他标识启动流程的方法具体还需要研究。其中instanceKey对应项目启动时日志中部署的流程key也就是bpmn文件中该行的id。根据方法返回的id观察数据库可以发现很多表里面都会新建以该id为主键的数据该条id也可以用来标识一条流程实例。2.3 查询流程流程的最基础的查询也需要用到RuntimeService这个类PostMapping(value /list)ResponseBodyApiOperation(value 查询某个流程实例)public Listlist(RequestParam String definitionKey) {//创建查询条件ProcessInstanceQuery processInstanceQuery runtimeService.createProcessInstanceQuery();//根据流程实例key来查询,即查询该流程有多少个正在进行的实例List runningList processInstanceQuery.processDefinitionKey(definitionKey).list();//返回实例的id这边需要包装成自己需要的业务数据返回List ids new ArrayList();runningList.forEach(list-ids.add(list.getId()));returnids;}这边是根据2.2中的key来查询实例实际观察该类里面的方法可以发现很多的其他查询条件。这边如果直接返回List会报懒加载的一些错误所以还是自己封装一遍比较好里面不需要的字段也比较多。