码迷,mamicode.com
首页 > 其他好文 > 详细

activiti自定义流程之整合(六):获取我的申请任务

时间:2016-04-16 12:31:23      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:

流程启动后,流程节点便进入到了任务相关的部分。可以看到我之前的做法是在启动节点就绑定了form表单,启动时就填写相关的数据。实际上在之前我的做法是不对开始节点做任何操作,知道任务节点的时候再填写相关的数据进行设置。

 

至于这两种方式的优劣,我暂时还不太确定,单独从功能上来说都是可以实现的,因此大家可以都试一试,然后视不同的情况而定,按自己究竟要用哪种。

 

而在任务相关的部分,我是把用户任务分成了两种,一种是我的申请,一种是我的任务。区别就是我发起的任务,和别人提交给我的或者反馈给我的任务。

 

那么流程一启动,第一个自然就是自己的申请了,这里便说明这个问题。

 

在这一篇中,需要注意的并不在于form表单,而是如何判断是不是初次申请,我一开始用的是流程节点来判断,这样就需要拿到流程节点并进行相关的遍历。

 

但是后来我回过头来再看时便发现其实远不止着一种方法,比如也可以通过任务来区分,如果整个流程实例只有一个任务,那么这个任务自然就是申请。当然了,前提是要限制任务是不能删除的。

 

还有就是,每一个任务都有启动时间,根据这个时间进行排序也应该可以进行判断,只是这个我还没有尝试,可行性究竟如何还有待确定。

 

那么下边就又到了上代码的时刻:

后台代码如下:

 

[java] view plain copy
 
 技术分享技术分享
  1. /** 
  2.      * @throwsXMLStreamException 
  3.      *             查询我申请未提交的任务 
  4.      * 
  5.      * @author:tuzongxun 
  6.      * @Title: findTask 
  7.      * @param@return 
  8.      * @return Object 
  9.      * @date Mar 17, 20162:44:11 PM 
  10.      * @throws 
  11.      */  
  12.     @RequestMapping(value = "/findFirstTask.do", method = RequestMethod.POST, produces = "application/json;charset=utf-8")  
  13.     @ResponseBody  
  14.     public Object findFirstTask(HttpServletRequest req)  
  15.            throws XMLStreamException {  
  16.        Map<String, Object> map = new HashMap<String, Object>();  
  17.        boolean isLogin = this.isLogin(req);  
  18.        if (isLogin) {  
  19.            List<TaskModel> taskList = new ArrayList<TaskModel>();  
  20.            HttpSession session = req.getSession();  
  21.            String assginee = (String) session.getAttribute("userName");  
  22.            List<Task> taskList1 = taskService.createTaskQuery()  
  23.                   .taskAssignee(assginee).list();  
  24.            if (taskList1 != null && taskList1.size() > 0) {  
  25.               for (Task task : taskList1) {  
  26.                   TaskModel taskModel = new TaskModel();  
  27.                   // 获取部署名  
  28.                   String processdefintionId = task.getProcessDefinitionId();  
  29.                   ProcessDefinition processDefinition = repositoryService  
  30.                          .createProcessDefinitionQuery()  
  31.                          .processDefinitionId(processdefintionId)  
  32.                          .singleResult();  
  33.    
  34.                   // 根据taskname和节点判断是否是第一个  
  35.                   String taskName = task.getName();  
  36.                   Iterator<FlowElement> iterator = this  
  37.                          .findFlow(processdefintionId);  
  38.                   String row0 = null;  
  39.                   String eleName0 = null;  
  40.                   while (iterator.hasNext()) {  
  41.                      FlowElement flowElement0 = iterator.next();  
  42.                      // 下一个节点  
  43.                      FlowElement flowElement = iterator.next();  
  44.                      String eleName = flowElement.getName();  
  45.                      if (taskName.equals(eleName)) {  
  46.                          row0 = flowElement0.getXmlRowNumber() + "";  
  47.                          eleName0 = flowElement0.getClass().getSimpleName();  
  48.                          break;  
  49.                      }  
  50.                   }  
  51.    
  52.                   // 提交申请时  
  53.                   if (eleName0.equals("StartEvent")) {  
  54.                      ///////////////////////////  
  55.                      // 获取流程变量  
  56.                      Map<String, Object> variables = runtimeService  
  57.                             .getVariables(task.getProcessInstanceId());  
  58.                      Set<String> keysSet = variables.keySet();  
  59.                      Iterator<String> keySet = keysSet.iterator();  
  60.                      Map<String, String> formData = new HashMap<String,String>();  
  61.                      taskModel.setLastForm(this  
  62.                             .getStartForm1((String) variables  
  63.                                    .get("deploymentId")));  
  64.    
  65.                      taskModel.setAssignee(task.getAssignee());  
  66.                      taskModel.setCreateTime(task.getCreateTime());  
  67.                      taskModel.setId(task.getId());  
  68.                      taskModel.setName(task.getName());  
  69.                      taskModel.setProcessInstanceId(task  
  70.                             .getProcessInstanceId());  
  71.                      taskModel  
  72.                             .setProcessDefId(task.getProcessDefinitionId());  
  73.                      taskModel.setFormKey(task.getFormKey());  
  74.                      String deploymentId = processDefinition  
  75.                             .getDeploymentId();  
  76.                      Deployment deployment = repositoryService  
  77.                             .createDeploymentQuery()  
  78.                             .deploymentId(deploymentId).singleResult();  
  79.                      String deploymentName = deployment.getName();  
  80.                      taskModel.setDeploymentName(deploymentName);  
  81.                      while (keySet.hasNext()) {  
  82.                          String key = keySet.next();  
  83.                          String value = (String) variables.get(key);  
  84.                          if (key.contains(row0)) {  
  85.                             formData.put(key, value);  
  86.                          }  
  87.                      }  
  88.                      taskModel.setFormData(formData);  
  89.                      taskList.add(taskModel);  
  90.                   }  
  91.    
  92.               }  
  93.            }  
  94.            map.put("isLogin", "yes");  
  95.            map.put("userName",  
  96.                   (String) req.getSession().getAttribute("userName"));  
  97.            map.put("result", "success");  
  98.            map.put("data", taskList);  
  99.        } else {  
  100.            map.put("isLogin", "no");  
  101.        }  
  102.        return map;  
  103.     }  



 

注意上边的方法中有调用getStartForm1这个方法,可在上一篇中找到。另外一个调用查询流程节点的方法如下:

 

[java] view plain copy
 
 技术分享技术分享
  1. /** 
  2.      * @throwsXMLStreamException 
  3.      *             查询流程节点 
  4.      * 
  5.      * @author:tuzongxun 
  6.      * @Title: findFlow 
  7.      * @param@return 
  8.      * @return Iterator<FlowElement> 
  9.      * @date Mar 21, 20169:31:42 AM 
  10.      * @throws 
  11.      */  
  12.     public Iterator<FlowElement> findFlow(String processDefId)  
  13.            throws XMLStreamException {  
  14.        List<ProcessDefinition> lists = repositoryService  
  15.               .createProcessDefinitionQuery()  
  16.               .processDefinitionId(processDefId)  
  17.               .orderByProcessDefinitionVersion().desc().list();  
  18.        ProcessDefinition processDefinition = lists.get(0);  
  19.        processDefinition.getCategory();  
  20.        String resourceName = processDefinition.getResourceName();  
  21.        InputStream inputStream = repositoryService.getResourceAsStream(  
  22.               processDefinition.getDeploymentId(), resourceName);  
  23.        BpmnXMLConverter converter = new BpmnXMLConverter();  
  24.        XMLInputFactory factory = XMLInputFactory.newInstance();  
  25.        XMLStreamReader reader = factory.createXMLStreamReader(inputStream);  
  26.        BpmnModel bpmnModel = converter.convertToBpmnModel(reader);  
  27.        Process process = bpmnModel.getMainProcess();  
  28.        Collection<FlowElement> elements = process.getFlowElements();  
  29.        Iterator<FlowElement> iterator = elements.iterator();  
  30.        return iterator;  
  31.     }  



 

前台的代码,我想经过这么久的代码罗列,app.js和html中的写法应该没有必要再写了,业务逻辑如下:

 

[javascript] view plain copy
 
 技术分享技术分享
    1. angular.module(‘activitiApp‘)   
    2. .controller(‘findFirstTaskCtr‘, [‘$rootScope‘,‘$scope‘,‘$http‘,‘$location‘,‘$state‘, function($rootScope,$scope,$http,$location,$state){   
    3. $scope.init=function(){  
    4.         $http.post("./findFirstTask.do").success(function(result) {  
    5.         if(result.isLogin==="yes"){  
    6.         $rootScope.userName=result.userName;  
    7.         $scope.taskList=result.data;  
    8.         }else{  
    9.              $location.path("/login");  
    10.         }  
    11.         });  
    12. }     
    13.         //查看findDetail(task)  
    14.         $scope.findDetail=function(task){  
    15.         console.log(task);  
    16.         $(‘#findDetail‘).html(‘‘).dialog({  
    17.              title:‘节点名称[‘ + task.name + ‘]‘,  
    18.             modal:true,  
    19.             width:$.common.window.getClientWidth() * 0.6,  
    20.             height:$.common.window.getClientHeight() * 0.9,  
    21.             open:function() {  
    22.                // 获取json格式的表单数据,就是流程定义中的所有field  
    23.             var dialog = this;  
    24.             // 读取启动时的表单  
    25.                 // 获取的form是字符行,html格式直接显示在对话框内就可以了,然后用form包裹起来  
    26.                 $(dialog).append("<div class=‘formContent‘ />");  
    27.                 $(‘.formContent‘).html(‘‘).wrap("<form id=‘findDetailForm‘ class=‘formkey-form1‘method=‘post‘ />");   
    28.                 var $form = $(‘.formkey-form1‘);  
    29.                 //设置部署的Id  
    30.                 $form.append("任务Id:<input type=‘text‘ readonly=‘readonly‘style=‘background-color:#DEDCDC;margin-top:10px‘ name=‘taskId‘ value="+task.id+"></br>");  
    31.                 $form.append("申请时间:<input type=‘text‘ readonly=‘readonly‘style=‘background-color:#DEDCDC;margin-top:10px‘ name=‘createTime‘ value="+new Date(task.createTime).format(‘yyyy-MM-dd hh:mm:ss‘)+"></br>");  
    32.                 //根据formData设置申请页面  
    33.                 //处理form字符串  
    34.                 var form=task.lastForm;  
    35.                 //console.log(form);  
    36.                 varindex0=form.lastIndexOf(">");  
    37.                    var p=form.split("<p>");  
    38.                    for(var i=1;i<p.length;i++){  
    39.                        var pName=p[i].substring(0,p[i].indexOf(":")+1);  
    40.                        var index1=p[i].indexOf(‘name="‘);  
    41.                        var p0=p[i].substring(index1,p[i].lastIndexOf(">"));  
    42.                        var index2=p0.indexOf(‘"‘);  
    43.                        var keyName=p[i].substring(index1+6,index2+index1+7);  
    44.                       var value=null;  
    45.                     for(var key in task.formData){  
    46. //                        var keyString=key+"";  
    47. //                        if(keyString===keyName){  
    48. //                        value=(task.formData)[key];  
    49.                       var keyString=key.substring(0,key.length-1);  
    50.                       if(keyString===keyName){  
    51.                       value=(task.formData)[key];  
    52.                       }  
    53.                    }  
    54.                      
    55.                     $form.append(pName+"<input type=‘text‘ readonly=‘readonly‘style=‘background-color:#DEDCDC;margin-top:10px‘ name=‘createTime‘value=‘"+value+"‘></br>");  
    56.                    }  
    57.                     
    58.                 // 初始化日期组件  
    59.                 $form.find(‘.datetime‘).datetimepicker({  
    60.                        stepMinute: 5  
    61.                  });  
    62.                 $form.find(‘.date‘).datepicker();  
    63.                  
    64.                 // 表单验证  
    65.                 $form.validate($.extend({},$.common.plugin.validator));  
    66.              
    67.             },  
    68.             buttons:[{  
    69.                text:‘关闭‘,  
    70.                click:function() {  
    71.                    $("#findDetail").dialog("close");  
    72.                    //sendStartupRequest();  
    73.                }  
    74.             }]  
    75.         }).position({  
    76.                //my:"center",  
    77.                //at:"center",  
    78.             offset:‘300 300‘,  
    79.                of: window,  
    80.                collision:"fit"  
    81.             });  
    82.         }  
    83.        
    84.         //完成任务  
    85.         $scope.completeTaskTo=function(task){  
    86.         console.log(task);  
    87.         $(‘#comTask‘).html(‘‘).dialog({  
    88.              title:‘节点名称[‘ + task.name + ‘]‘,  
    89.             modal:true,  
    90.             width:$.common.window.getClientWidth() * 0.6,  
    91.             height:$.common.window.getClientHeight() * 0.9,  
    92.             open:function() {  
    93.                // 获取json格式的表单数据,就是流程定义中的所有field  
    94.             var dialog = this;  
    95.             // 读取启动时的表单  
    96.                 // 获取的form是字符行,html格式直接显示在对话框内就可以了,然后用form包裹起来  
    97.                 $(dialog).append("<div class=‘formContent‘ />");  
    98.                 $(‘.formContent‘).html(‘‘).wrap("<form id=‘completeTask‘ class=‘formkey-form‘method=‘post‘ />");       
    99.                 var $form = $(‘.formkey-form‘);  
    100.    
    101.                 // 设置表单action   getStartFormAndStartProcess  
    102.                 $form.attr(‘action‘, ‘./completeTask‘);  
    103.                 //设置部署的Id  
    104.                 $form.append("任务Id:<input type=‘text‘ readonly=‘readonly‘style=‘background-color:#DEDCDC;margin-top:10px‘ name=‘taskId‘ value="+task.id+"></br>");  
    105.                 $form.append("申请时间:<input type=‘text‘ readonly=‘readonly‘style=‘background-color:#DEDCDC;margin-top:10px‘ value="+new Date(task.createTime).format(‘yyyy-MM-dd hh:mm:ss‘)+"></br>");  
    106.                 //根据formData设置申请页面  
    107.                 //处理form字符串  
    108.                 varform=task.lastForm;  
    109.                  //console.log(form);  
    110.                 varindex0=form.lastIndexOf(">");  
    111.                    var p=form.split("<p>");  
    112.                    for(var i=1;i<p.length;i++){  
    113.                        var pName=p[i].substring(0,p[i].indexOf(":")+1);  
    114.                        var index1=p[i].indexOf(‘name="‘);  
    115.                        varp0=p[i].substring(index1,p[i].lastIndexOf(">"));  
    116.                        var index2=p0.indexOf(‘"‘);  
    117.                        var keyName=p[i].substring(index1+6,index2+index1+7);  
    118.                       var value=null;  
    119.                     for(var key in task.formData){  
    120.                       var keyString=key.substring(0,key.length-1);  
    121.                       if(keyString===keyName){  
    122.                       value=(task.formData)[key];  
    123.                       }  
    124.                    }  
    125.                     $form.append(pName+"<input type=‘text‘ readonly=‘readonly‘style=‘background-color:#DEDCDC;margin-top:10px‘ value=‘"+value+"‘></br>");  
    126.                    }    
    127.                         ///////////////////////////////////////     
    128.                     $.post(‘./getTaskForm.do‘,task.formKey, function(result) {  
    129.                     //设置部署的Id  
    130.                     //$form.append("<inputtype=‘hidden‘ name=‘deploymentId‘ value="+deploymentId+">");  
    131.                     $form.append(result.form);            
    132.                     });     
    133.                     ////////////////////////////////////////  
    134.                 // 初始化日期组件  
    135.                 $form.find(‘.datetime‘).datetimepicker({  
    136.                        stepMinute: 5  
    137.                  });  
    138.                 $form.find(‘.date‘).datepicker();  
    139.                 // 表单验证  
    140.                 $form.validate($.extend({},$.common.plugin.validator));  
    141.              
    142.             },  
    143.             buttons:[{  
    144.                text:‘提交‘,  
    145.                click:function() {  
    146.                    $("#comTask").dialog("close");  
    147.                    sendStartupRequest();  
    148.                }  
    149.             }]  
    150.         }).position({  
    151.                //my:"center",  
    152.                //at:"center",  
    153.             offset:‘300 300‘,  
    154.                of: window,  
    155.                collision:"fit"  
    156.             });  
    157.         }  
    158.          
    159.         /** 
    160.      * 提交表单 
    161.      * @return {[type]} [description] 
    162.      */  
    163.     functionsendStartupRequest() {  
    164.         if ($(".formkey-form").valid()) {  
    165.             var url = ‘./completeTask.do‘;  
    166.             var args = $(‘#completeTask‘).serialize();  
    167.             $.post(url,args, function(data){  
    168.                $("#comTask").dialog("close");  
    169.                //$location.path("/processList");  
    170.                window.location.href=("#/processList");  
    171.                setTimeout(function(){  
    172.                    //$location.path("/findFirstTask");  
    173.                    window.location.href =("#/findFirstTask");  
    174.                },1500);  
    175.             });  
    176.         }  
    177.     }  
    178.    
    179. }])    

activiti自定义流程之整合(六):获取我的申请任务

标签:

原文地址:http://www.cnblogs.com/tuzongxun/p/5397884.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!