activiti自己定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义
注:(1)环境搭建:activiti自己定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建
(2)创建流程模型:activiti自己定义流程之Spring整合activiti-modeler5.16实例(二):创建流程模型
(3)流程模型列表展示:activiti自己定义流程之Spring整合activiti-modeler5.16实例(三):流程模型列表展示
1.maven导包及spring的一些基本配置与之前的没有什么变化,依然沿用就好。
2.与流程定义相关的有3张表,各自是act_ge_bytearray、act_re_procdef和act_re_deployment。
4.angular js前台代码。这里实际上仅仅是在之前的模型列表页面调用了一个方法,因此前端代码依然是上篇中的代码,仅仅是当中的方法这里调用罢了:
(2)创建流程模型:activiti自己定义流程之Spring整合activiti-modeler5.16实例(二):创建流程模型
(3)流程模型列表展示:activiti自己定义流程之Spring整合activiti-modeler5.16实例(三):流程模型列表展示
1.maven导包及spring的一些基本配置与之前的没有什么变化,依然沿用就好。
2.与流程定义相关的有3张表,各自是act_ge_bytearray、act_re_procdef和act_re_deployment。
当然了,假设更准确的说,在我的自己定义流程中,流程定义须要用到流程模型相关的数据,也能够说流程定义相关的就有四张表,也包含model表。
3.后台业务代码,依据前端传入的deploymentId部署流程定义。这里还是使用repositoryService进行操作。大致上的过程就是依据deploymentId查询出创建模型时生成的相关文件,然后进行一定的转换后进行部署:
/** * 依据模型id部署流程定义 * * @author:tuzongxun * @Title: deploye * @param @param activitiModel * @param @param redirectAttributes * @param @return * @return Object * @date Mar 17, 2016 12:30:05 PM * @throws */ @RequestMapping(value = "/deploye.do", method = RequestMethod.POST, produces = "application/json;charset=utf-8") @ResponseBody public Object deploye(@RequestBody ActivitiModel activitiModel, HttpServletRequest req) { Map<String, Object> map = new HashMap<String, Object>(); boolean isLogin = this.isLogin(req); if (isLogin) { String modelId = activitiModel.getId(); try { Model modelData = repositoryService.getModel(modelId); ObjectNode modelNode = (ObjectNode) new ObjectMapper() .readTree(repositoryService .getModelEditorSource(modelData.getId())); byte[] bpmnBytes = null; BpmnModel model = new BpmnJsonConverter() .convertToBpmnModel(modelNode); bpmnBytes = new BpmnXMLConverter().convertToXML(model); String processName = modelData.getName() + ".bpmn20.xml"; Deployment deployment = repositoryService.createDeployment() .name(modelData.getName()) .addString(processName, new String(bpmnBytes)).deploy(); if (deployment != null && deployment.getId() != null) { map.put("isLogin", "yes"); map.put("userName", (String) req.getSession().getAttribute("userName")); map.put("result", "success"); } } catch (Exception e) { e.printStackTrace(); } } else { map.put("isLogin", "no"); } return map; }
4.angular js前台代码。这里实际上仅仅是在之前的模型列表页面调用了一个方法,因此前端代码依然是上篇中的代码,仅仅是当中的方法这里调用罢了:
angular.module('activitiApp') .controller('modelCtr', ['$rootScope','$scope','$http','$location', function($rootScope,$scope,$http,$location){ $scope.init=function(){ $http.post("./modelList.do").success(function(result) { if(result.isLogin==="yes"){ $rootScope.userName=result.userName; console.log(result.data); $scope.modelList=result.data; }else{ $location.path("/login"); } }); } //部署流程定义,这里主要就是用这种方法 $scope.deploye=function(model){ console.log(model); $http.post("./deploye.do",model).success(function(deployResult){ $location.path("/processList"); }); } $scope.update=function(modelId){ window.open("http://localhost:8080/activitiTest2/service/editor?id="+modelId); } }])
5.部署之前。我们能够看到原本创建一个模型的时候,数据库中仅仅会在model表和bytearray两张表分别出现一条和两条数据。
而当成功部署以后。bytearray表中会再次添加两条数据,同一时候act_re_procdef和act_re_deployment这两张表也都会各自出现一条相应的数据。bytearray表此时数据例如以下图:
act_re_procdef表中数据例如以下:
act_re_deployment中数据例如以下:
须要说明的是,这些数据在兴许的操作中都须要用到,假如有缺少的。必然会影响兴许的操作。