Spring整合activiti-modeler5.16实例(四):部署流程定义

注:(1)环境搭建可参考: Spring整合activiti-modeler5.16实例(一):环境搭建
        (2)创建流程模型可参考: Spring整合activiti-modeler5.16实例(二):创建流程模型
        (3)流程模型列表展示可参考: 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中数据如下:



需要说明的是,这些数据在后续的操作中都需要用到,假如有缺少的,必定会影响后续的操作。

你可能感兴趣的:(Activiti,activiti5.16)