zoukankan      html  css  js  c++  java
  • 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。

    当然了,假设更准确的说,在我的自己定义流程中,流程定义须要用到流程模型相关的数据,也能够说流程定义相关的就有四张表,也包含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中数据例如以下:



    须要说明的是,这些数据在兴许的操作中都须要用到,假如有缺少的。必然会影响兴许的操作。

  • 相关阅读:
    DP 水题 最长不下降子序列
    数的划分
    水题------纪念品分组
    NY95 众数问题
    NY86 找球号(一)
    C3-Zexal的矩阵链乘
    C3-Zexal的多路流水线调度
    C4-Zexal的食物链
    C4-排列
    C3-炮弹杀伤力
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7158417.html
Copyright © 2011-2022 走看看