博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
activiti自定义流程之整合(六):获取我的申请任务
阅读量:5891 次
发布时间:2019-06-19

本文共 11444 字,大约阅读时间需要 38 分钟。

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

后台代码如下:

/**     * @throwsXMLStreamException     *             查询我申请未提交的任务     *     * @author:tuzongxun     * @Title: findTask     * @param@return     * @return Object     * @date Mar 17, 20162:44:11 PM     * @throws     */    @RequestMapping(value = "/findFirstTask.do", method = RequestMethod.POST, produces = "application/json;charset=utf-8")    @ResponseBody    public Object findFirstTask(HttpServletRequest req)           throws XMLStreamException {       Map
map = new HashMap
(); boolean isLogin = this.isLogin(req); if (isLogin) { List
taskList = new ArrayList
(); HttpSession session = req.getSession(); String assginee = (String) session.getAttribute("userName"); List
taskList1 = taskService.createTaskQuery() .taskAssignee(assginee).list(); if (taskList1 != null && taskList1.size() > 0) { for (Task task : taskList1) { TaskModel taskModel = new TaskModel(); // 获取部署名 String processdefintionId = task.getProcessDefinitionId(); ProcessDefinition processDefinition = repositoryService .createProcessDefinitionQuery() .processDefinitionId(processdefintionId) .singleResult(); // 根据taskname和节点判断是否是第一个 String taskName = task.getName(); Iterator
iterator = this .findFlow(processdefintionId); String row0 = null; String eleName0 = null; while (iterator.hasNext()) { FlowElement flowElement0 = iterator.next(); // 下一个节点 FlowElement flowElement = iterator.next(); String eleName = flowElement.getName(); if (taskName.equals(eleName)) { row0 = flowElement0.getXmlRowNumber() + ""; eleName0 = flowElement0.getClass().getSimpleName(); break; } } // 提交申请时 if (eleName0.equals("StartEvent")) { /// // 获取流程变量 Map
variables = runtimeService .getVariables(task.getProcessInstanceId()); Set
keysSet = variables.keySet(); Iterator
keySet = keysSet.iterator(); Map
formData = new HashMap
(); taskModel.setLastForm(this .getStartForm1((String) variables .get("deploymentId"))); taskModel.setAssignee(task.getAssignee()); taskModel.setCreateTime(task.getCreateTime()); taskModel.setId(task.getId()); taskModel.setName(task.getName()); taskModel.setProcessInstanceId(task .getProcessInstanceId()); taskModel .setProcessDefId(task.getProcessDefinitionId()); taskModel.setFormKey(task.getFormKey()); String deploymentId = processDefinition .getDeploymentId(); Deployment deployment = repositoryService .createDeploymentQuery() .deploymentId(deploymentId).singleResult(); String deploymentName = deployment.getName(); taskModel.setDeploymentName(deploymentName); while (keySet.hasNext()) { String key = keySet.next(); String value = (String) variables.get(key); if (key.contains(row0)) { formData.put(key, value); } } taskModel.setFormData(formData); taskList.add(taskModel); } } } map.put("isLogin", "yes"); map.put("userName", (String) req.getSession().getAttribute("userName")); map.put("result", "success"); map.put("data", taskList); } else { map.put("isLogin", "no"); } return map; }

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

/**     * @throwsXMLStreamException     *             查询流程节点     *     * @author:tuzongxun     * @Title: findFlow     * @param@return     * @return Iterator
* @date Mar 21, 20169:31:42 AM * @throws */ public Iterator
findFlow(String processDefId) throws XMLStreamException { List
lists = repositoryService .createProcessDefinitionQuery() .processDefinitionId(processDefId) .orderByProcessDefinitionVersion().desc().list(); ProcessDefinition processDefinition = lists.get(0); processDefinition.getCategory(); String resourceName = processDefinition.getResourceName(); InputStream inputStream = repositoryService.getResourceAsStream( processDefinition.getDeploymentId(), resourceName); BpmnXMLConverter converter = new BpmnXMLConverter(); XMLInputFactory factory = XMLInputFactory.newInstance(); XMLStreamReader reader = factory.createXMLStreamReader(inputStream); BpmnModel bpmnModel = converter.convertToBpmnModel(reader); Process process = bpmnModel.getMainProcess(); Collection
elements = process.getFlowElements(); Iterator
iterator = elements.iterator(); return iterator; }

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

angular.module('activitiApp') .controller('findFirstTaskCtr', ['$rootScope','$scope','$http','$location','$state', function($rootScope,$scope,$http,$location,$state){ $scope.init=function(){        $http.post("./findFirstTask.do").success(function(result) {        if(result.isLogin==="yes"){        $rootScope.userName=result.userName;        $scope.taskList=result.data;        }else{             $location.path("/login");        }        });}           //查看findDetail(task)        $scope.findDetail=function(task){        console.log(task);        $('#findDetail').html('').dialog({             title:'节点名称[' + task.name + ']',            modal:true,            width:$.common.window.getClientWidth() * 0.6,            height:$.common.window.getClientHeight() * 0.9,            open:function() {               // 获取json格式的表单数据,就是流程定义中的所有field            var dialog = this;            // 读取启动时的表单                // 获取的form是字符行,html格式直接显示在对话框内就可以了,然后用form包裹起来                $(dialog).append("
"); $('.formContent').html('').wrap("
"); var $form = $('.formkey-form1'); //设置部署的Id $form.append("任务Id:
"); $form.append("申请时间:
"); //根据formData设置申请页面 //处理form字符串 var form=task.lastForm; //console.log(form); varindex0=form.lastIndexOf(">"); var p=form.split("

"); for(var i=1;i

")); var index2=p0.indexOf('"'); var keyName=p[i].substring(index1+6,index2+index1+7); var value=null; for(var key in task.formData){// var keyString=key+"";// if(keyString===keyName){// value=(task.formData)[key]; var keyString=key.substring(0,key.length-1); if(keyString===keyName){ value=(task.formData)[key]; } } $form.append(pName+"
"); } // 初始化日期组件 $form.find('.datetime').datetimepicker({ stepMinute: 5 }); $form.find('.date').datepicker(); // 表单验证 $form.validate($.extend({},$.common.plugin.validator)); }, buttons:[{ text:'关闭', click:function() { $("#findDetail").dialog("close"); //sendStartupRequest(); } }] }).position({ //my:"center", //at:"center", offset:'300 300', of: window, collision:"fit" }); } //完成任务 $scope.completeTaskTo=function(task){ console.log(task); $('#comTask').html('').dialog({ title:'节点名称[' + task.name + ']', modal:true, width:$.common.window.getClientWidth() * 0.6, height:$.common.window.getClientHeight() * 0.9, open:function() { // 获取json格式的表单数据,就是流程定义中的所有field var dialog = this; // 读取启动时的表单 // 获取的form是字符行,html格式直接显示在对话框内就可以了,然后用form包裹起来 $(dialog).append("

"); $('.formContent').html('').wrap(""); var $form = $('.formkey-form'); // 设置表单action getStartFormAndStartProcess $form.attr('action', './completeTask'); //设置部署的Id $form.append("任务Id:
"); $form.append("申请时间:
"); //根据formData设置申请页面 //处理form字符串 varform=task.lastForm; //console.log(form); varindex0=form.lastIndexOf(">"); var p=form.split("

"); for(var i=1;i

")); var index2=p0.indexOf('"'); var keyName=p[i].substring(index1+6,index2+index1+7); var value=null; for(var key in task.formData){ var keyString=key.substring(0,key.length-1); if(keyString===keyName){ value=(task.formData)[key]; } } $form.append(pName+"
"); } /// $.post('./getTaskForm.do',task.formKey, function(result) { //设置部署的Id //$form.append("
"); $form.append(result.form); }); // 初始化日期组件 $form.find('.datetime').datetimepicker({ stepMinute: 5 }); $form.find('.date').datepicker(); // 表单验证 $form.validate($.extend({},$.common.plugin.validator)); }, buttons:[{ text:'提交', click:function() { $("#comTask").dialog("close"); sendStartupRequest(); } }] }).position({ //my:"center", //at:"center", offset:'300 300', of: window, collision:"fit" }); } /** * 提交表单 * @return {[type]} [description] */ functionsendStartupRequest() { if ($(".formkey-form").valid()) { var url = './completeTask.do'; var args = $('#completeTask').serialize(); $.post(url,args, function(data){ $("#comTask").dialog("close"); //$location.path("/processList"); window.location.href=("#/processList"); setTimeout(function(){ //$location.path("/findFirstTask"); window.location.href =("#/findFirstTask"); },1500); }); } } }])

转载地址:http://dabsx.baihongyu.com/

你可能感兴趣的文章
LeetCode:Reverse Nodes in k-Group - 分组翻转链表
查看>>
我的友情链接
查看>>
android 实现区域截图
查看>>
bash shell 内部命令及添加
查看>>
java内存分配
查看>>
android蓝牙通讯 java.io.IOException: Service disco...
查看>>
Linux快捷键汇总
查看>>
apache配置https步骤
查看>>
Linux下文本文件中^M 符号问题的解决
查看>>
JVM性能监控诊断
查看>>
php 魔术方法 __debugInfo()
查看>>
【学习笔记】Android 图像加载类库使用
查看>>
RabbitMQ虚拟主机作用以及配置
查看>>
Log4J基础详解及示例大全
查看>>
CentOS7.2 Keepalived + Nginx 实现高可用性
查看>>
U盘中word文件误操作后恢复案例
查看>>
手机验证码
查看>>
噩梦遇地震,醒后忆岁月
查看>>
对面向对象的理解
查看>>
java反射
查看>>