activiti自定义流程之Spring整合activiti-modeler5.16实例(八):完成个人任务
注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建
(2)创建流程模型:activiti自定义流程之Spring整合activiti-modeler5.16实例(二):创建流程模型
(3)流程模型列表展示:activiti自定义流程之Spring整合activiti-modeler5.16实例(三):流程模型列表展示
(4)部署流程定义:activiti自定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义
(5)流程定义列表:activiti自定义流程之Spring整合activiti-modeler5.16实例(五):流程定义列表
(6)启动流程:activiti自定义流程之Spring整合activiti-modeler5.16实例(六):启动流程
(7)任务列表展示:activiti自定义流程之Spring整合activiti-modeler5.16实例(七):任务列表展示
1.完成个人任务依旧是使用taskService操作,调用complete方法,需要传入任务id,同时还可以传入流程变量。
2.后台业务代码,
(1)自定义的任务实体类(使用之前自定义的taskModel)
(2)业务逻辑:
完成任务使用taskService调用complete方法来完成,一旦正确调用了这个方法,当前任务就会结束,进入到下一个任务,如果当前任务已经是最后一个任务,则整个流程结束。
对于已经结束的任务,act_ru_task中所存在的那条对应数据会被删除,取而代之的是,对应的act_hi_taskinst中的那条数据会增加结束时间。
上边所说的正确调用是指,如果当前任务的下一个任务设有个人任务变量或者组任务变量,那么提交的时候必须有对应的变量数据,否则会抛出异常,完成任务失败。(但是,如果下一个任务没有设置这些,提交时依旧填了流程变量是不会出错的)
下边的例子中,之所以还查询了流程节点的信息,并做了相关的处理,是为了实现针对任意数量任务的流程都能正常运行,否则不需要这么麻烦。
- /**
- * @throws XMLStreamException
- * 完成个人任务
- *
- * @author:tuzongxun
- * @Title: completeTask
- * @param @return
- * @return Object
- * @date Mar 17, 2016 4:55:31 PM
- * @throws
- */
- @RequestMapping(value = "/completeTask.do", method = RequestMethod.POST, produces = "application/json;charset=utf-8")
- @ResponseBody
- public Object completeTask(@RequestBody TaskModel taskModel,
- HttpServletRequest req) throws XMLStreamException {
- boolean isLogin = this.isLogin(req);
- if (isLogin) {
- String taskId = taskModel.getId();
- // 1、查task
- Task task = taskService.createTaskQuery().taskId(taskId)
- .singleResult();
- // 2、查variables
- Map<String, Object> variables = runtimeService.getVariables(task
- .getProcessInstanceId());
- Set<String> keysSet = variables.keySet();
- Iterator<String> keySet = keysSet.iterator();
- Map<String, Object> variables1 = new HashMap<String, Object>();
- String assignee = task.getAssignee();
- // 判断之后是否还有任务
- // ////////////////
- while (keySet.hasNext()) {
- String key = keySet.next();
- if (key.equals("cause") || key.equals("content")
- || key.equals("taskType")) {
- continue;
- } else if (!(assignee.equals(variables.get(key)))) {
- // 3、查flowElement
- Iterator<FlowElement> iterator = this.findFlow(task
- .getProcessDefinitionId());
- while (iterator.hasNext()) {
- FlowElement flowElement = iterator.next();
- String classNames = flowElement.getClass()
- .getSimpleName();
- if (classNames.equals("UserTask")) {
- UserTask userTask = (UserTask) flowElement;
- String assginee11 = userTask.getAssignee();
- String assginee12 = assginee11.substring(
- assginee11.indexOf("{") + 1,
- assginee11.indexOf("}"));
- String assignee13 = (String) variables
- .get(assginee12);
- if (assignee.equals(assignee13)) {
- // 看下下一个节点是什么
- iterator.next();
- FlowElement flowElement2 = iterator.next();
- String classNames1 = flowElement2.getClass()
- .getSimpleName();
- // 设置下一个任务人
- if (!(classNames1.equals("EndEvent"))) {
- UserTask userTask2 = (UserTask) flowElement2;
- String assginee21 = userTask2.getAssignee();
- String assginee22 = assginee21.substring(
- assginee21.indexOf("{") + 1,
- assginee21.indexOf("}"));
- // String assignee23 = (String) variables
- // .get(assginee22);
- String assignee23 = taskModel
- .getNextPerson();
- variables1.put(assginee22, assignee23);
- }
- }
- }
- }
- }
- }
- taskService.complete(taskId, variables1);
- }
- return null;
- }
3.angular js前台代码(前台只是做简单的展示,不多讲):
(1)app.js中配置路由:
- $stateProvider
- .state('completeTaskTo', {
- url: "/completeTaskTo",
- views: {
- 'view': {
- templateUrl: 'activi_views/completeTask.html',
- controller: 'completeTaskCtr'
- }
- }
- });
(2)逻辑相关代码:
- angular.module('activitiApp')
- .controller('completeTaskCtr', ['$rootScope','$scope','$http','$location','$state', function($rootScope,$scope,$http,$location,$state){
- $http.post("createFlush.do").success(function(result){
- if(result.isLogin==="yes"){
- $rootScope.userName=result.userName;
- if($rootScope.task==null||$rootScope.task.id==null){
- $location.path("/taskList");
- }else{
- $scope.task=$rootScope.task;
- }
- }else{
- $location.path("/login");
- }
- });
- $scope.completeTask=function(task){
- console.log(task);
- $rootScope.task=task;
- $http.post("./completeTask.do",task).success(function(taskResult){
- $location.path("/taskList");
- });
- }
- }])
4.对应的填写相关信息的页面:
- <div style="margin-top:20px;margin-left:200px;background-color:#ccf;height:550px;width:50%;font-size:18px;position:relative;float:left;">
- <center>
- <p style="font-size:24px;margin-top:10px">处理当前任务</p>
- 类 型:<input ng-model="task.taskType" readonly="readonly" style="background-color:#9cf"></input>
- </br>
- </br>
- NAME :<input ng-model="task.name" readonly="readonly" style="background-color:#9cf"></input>
- </br>
- </br>
- 任 务 ID :<input ng-model="task.id" readonly="readonly" style="background-color:#9cf"></input>
- </br>
- </br>
- ProcessIntanceId:<input ng-model="task.processInstanceId" readonly="readonly" style="background-color:#9cf"></input>
- </br>
- </br>
- ProcessDefId :<input ng-model="task.processDefId" readonly="readonly" style="background-color:#9cf"></input>
- </br>
- </br>
- 创 建 时 间 :<input ng-model="task.createTime" readonly="readonly" style="background-color:#9cf"></input>
- </br>
- </br>
- 申 请 人 :<input ng-model="task.assignee" readonly="readonly" style="background-color:#9cf"></input>
- </br>
- </br>
- 受 理 人 :<input ng-model="task.nextPerson"></input>
- </br>
- </br>
- 申 请 原 因 :<input ng-model="task.cause"></input>
- </br>
- </br>
- 申 请 内 容 :<input ng-model="task.content"></input>
- </br>
- </br>
- <input style="font-size:22px;cursor:pointer" type="button" value="处理任务" ng-click="completeTask(task);">
- <input style="font-size:22px;cursor:pointer" type="button" value="返回">
- </center>
- </div>
activiti自定义流程之Spring整合activiti-modeler5.16实例(八):完成个人任务的更多相关文章
- activiti自定义流程之Spring整合activiti-modeler5.16实例(九):历史任务查询
注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建 (2)创建流程模型:activiti自定义流程之Spring ...
- activiti自定义流程之Spring整合activiti-modeler5.16实例(七):任务列表展示
注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建 (2)创建流程模型:activiti自定义流程之Spring ...
- activiti自定义流程之Spring整合activiti-modeler5.16实例(六):启动流程
注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建 (2)创建流程模型:activiti自定义流程之Spring ...
- activiti自定义流程之Spring整合activiti-modeler5.16实例(五):流程定义列表
注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建 (2)创建流程模型:activiti自定义流程之Spring ...
- activiti自定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义
注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建 (2)创建流程模型:activiti自定义流程之Spring ...
- activiti自定义流程之Spring整合activiti-modeler5.16实例(三):流程模型列表展示
注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建 (2)创建流程模型:activiti自定义流程之Spring ...
- activiti自定义流程之Spring整合activiti-modeler5.16实例(二):创建流程模型
注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建 1.maven导包,这里就没有什么多的好说了,直接代码: <depe ...
- activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建
项目中需要整合activiti-modeler自定义流程,找了很多资料后,终于成功的跳转到activiti-modeler流程设计界面,以下是记录: 一.整合基础:eclipse4.4.1.tomca ...
- activiti自己定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义
注:(1)环境搭建:activiti自己定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建 (2)创建流程模型:activiti自己定义流程之Spr ...
随机推荐
- web标准的可用性和可访问性
在Web前端开发界,有三个词经常被提及:可用性(Usability).可访问性(Accessibility)和可维护性(Maintainability). 可用性指的是:产品是否容易上手,用户能否完成 ...
- UVa1589 象棋
就是声明两个数组,一个模拟棋局,另一个模拟黑将不能走的位置.不过写得有点长了... #include<iostream> #include<string> using name ...
- Vigenère 密码NOIP 2012 提高组 第一天 第一题
题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...
- scala言语基础学习
scala变长参数: 递归累加: scala异常的使用: array和arraybuffer的使用 定长array: arraybuff:
- HMTL—表单
<body> <form> 账号:<input type="text" value="123" /> <br /> ...
- thinkPHP 中去除URL中的index.php
例如你的原路径是 http://localhost/app/index.php/module/action/var/value/ 那么现在的地址是 http://localhost/app/modul ...
- meta是什么意思?
META标签,是HTML语言head区的一个辅助性标签.在几乎所有的page里,我们都可以看 到类似下面这段html代码: -------------------------------------- ...
- ls命令大全
ls 命令:15个Linux面试级问题--第一集 [日期:2015-03-12] 来源:Linux社区 作者:GuiltyMan [字体:大 中 小] 注释:'ls'是“list”的意思,重点在 ...
- 黑马程序员——JAVA基础之Vector集合
------- android培训.java培训.期待与您交流! ---------- 基本已被淘汰 枚举就是Vector特有的取出方式.枚举和迭代器很像.其实枚举和迭代是一样的. 因为枚举的名称 ...
- java编程之:生成rsa密钥
通过openssl工具生成RSA的公钥和私钥(opnssl工具可在互联网中下载到,也可以点此下载无线接口包,里面包含此工具) 打开openssl文件夹下的bin文件夹,执行openssl.exe文件: ...