activiti自定义流程之整合(三):整合自定义表单创建模型

简介: <p><br></p> <p>本来在创建了表单之后应该是表单列表和预览功能,但是我看了看整合的代码,和之前没有用angularjs的基本没有什么变化,一些极小的变动也只是基于angularjs的语法,因此完全可以参考之前说些的表单列表展示相关的内容,这里也就直接进入到下一个步骤,创建流程模型了。</p> <p> </p> <p>在之前的创建流程模型一节里,我讲代码比较多,实际上在这里


本来在创建了表单之后应该是表单列表和预览功能,但是我看了看整合的代码,和之前没有用angularjs的基本没有什么变化,一些极小的变动也只是基于angularjs的语法,因此完全可以参考之前说些的表单列表展示相关的内容,这里也就直接进入到下一个步骤,创建流程模型了。

 

在之前的创建流程模型一节里,我讲代码比较多,实际上在这里还有很重要的一个环节没有细说,那就是自定义流程图,画流程图的过程也是有不少需要注意的事项的,在这一节我会适当的以截图加解释进行说明。

 

而在创建流程模型的过程中,因为之前也是用java、spring、angularjs等,所以在代码上实际上并没有什么变化,不同之处就在流程图制作上,还有就是activiti内部自己实现,我们不用管他,那么这里着重要讲的就是调用activiti-modeler来画流程图。

 

我们的创建模型首先是在自己制作的页面填好模型的name、key、description等,然后提交到后台,进而跳转到activiti-modeler流程图制作界面。自定义的页面如下图:

 


填写数据的这个页面代码如下:

<div id="create"style="margin-top:100px;margin-left:290px;background-color:#9cc;height:350px;width:40%;font-size:26px;position:relative;float:left;"> 
    <p style="font-size:30px">创建模型</p>
    Name   :<input type="text" name="name"ng-model="activiti.name"/>
    </br> 
    </br> 
    Key    :<input type="text" name="key"ng-model="activiti.key"/> 
    </br> 
    </br> 
    Description:<input type="text" name="description"ng-model="activiti.description"/> 
    </br> 
    </br> 
    <input style="font-size:28px;cursor:pointerborder:1px solid;border-radius:0.5em;" type="button"value="创建模型" ng-click="createTo(activiti);"/> 
           
    <input style="font-size:28px;cursor:pointer;cursor:pointerborder:1px solid;border-radius:0.5em;" type="button"value="返回"/> 
</div> 

在我们填好相关数据以后,点击提交,便会触动createTo方法进入到js代码中,对应的整个js代码如下:

angular.module('activitiApp') 
.controller('createCtr', ['$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;
       }else{
           $location.path("/login");
       }
    });
    $scope.createTo=function(activiti){
        //向后台提交数据
      $http.post("./create.do",activiti,{headers:'Content-Type:application/json'}).success(function(createResult){
      console.log(createResult);
      $location.path("/modelList");
    window.open("http://localhost:8080/activitiTest1"+createResult.path+createResult.modelId);
      });
 
    } 
 
}]) 

在上述的代码中可以看到createTo方法是直接调用$http向后台发送post请求,然后把页面中的数据对象直接传到后台,并没有多做处理,这里涉及到angularjs的双向数据绑定,如果有不明白的,可以自己去了解以下。

需要注意的是,发送请求并接收后台返回数据后,从返回数据中拿到path和modelid然后跳转到activiti-model流程图设计页面,这里可以先看一下下边的后台代码再返回来看。

 

经过http请求,操作便运行到后台,相应的后台代码如下:

/**
     * 创建模型
     *
     * @author:tuzongxun
     * @Title: create
     * @param@param activiti
     * @param@param request
     * @param@param response
     * @param@return
     * @return Object
     * @date Mar 17, 201612:30:29 PM
     * @throws
     */
    @RequestMapping(value = "/create.do", method = RequestMethod.POST, produces = "application/json;charset=utf-8")
    @ResponseBody
    public Object create(@RequestBody ActivitiModel activiti,
           HttpServletRequest request, HttpServletResponse response) {
       Map<String, String> map = new HashMap<String, String>();
       Boolean isLogin = this.isLogin(request);
       if (isLogin) {
           Model newModel = repositoryService.newModel();
           try {
 
              ObjectMapper objectMapper = new ObjectMapper();
              ObjectNode modelObjectNode = objectMapper.createObjectNode();
              modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME,
                     activiti.getName());
              modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1);
              modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION,
                     StringUtils.defaultString(activiti.getDescription()));
              newModel.setMetaInfo(modelObjectNode.toString());
              newModel.setName(activiti.getName());
              newModel.setKey(StringUtils.defaultString(activiti.getKey()));
              repositoryService.saveModel(newModel);
              ObjectNode editorNode = objectMapper.createObjectNode();
              editorNode.put("id", "canvas");
              editorNode.put("resourceId", "canvas");
              ObjectNode stencilSetNode = objectMapper.createObjectNode();
              stencilSetNode.put("namespace",
                     "http://b3mn.org/stencilset/bpmn2.0#");
              editorNode.put("stencilset", stencilSetNode);
              repositoryService.addModelEditorSource(newModel.getId(),
                     editorNode.toString().getBytes("utf-8"));
           } catch (Exception e) {
              e.getStackTrace();
           }
           //response.sendRedirect(request.getContextPath() +
           //"/service/editor?id="
           // +newModel.getId());
           map.put("isLogin", "yes");
           map.put("userName",
                  (String) request.getSession().getAttribute("userName"));
           map.put("path", "/service/editor?id=");
           map.put("modelId", newModel.getId());
       } else {
           map.put("isLogin", "no");
       }
       return map;
    }


这一段代码里涉及到的东西还比较多,有一些我也不是很理解,只是这段代码基本上就是这样不怎么会变了,我也暂时没有深入理解,可以看到这段代码跟之前说列的也是一样,那么这里我要说的是最后走完这段代码返回数据给前台。

 

可以看到其中有一个path属性和modelId,正是这两个属性返回给前台后,前台angularjs再控制路由跳转到activiti-model流程图设计页面(这个页面完全整合而来,非自己创造)。根据path和modelId跳转后的界面如下:

 


这个界面是整合而来,在跳转的过程中会自动把之前我们填写的数据带入过来,当然了,还有modelId,这个时候数据库实际上已经有了数据。

 

进入到这个界面,那么下边就要正式开始设计流程图了,首先如下图所示的创建开始节点,创建方法是找到StartEvent按钮,按住鼠标左键拖拽到右方空白处即可。

 


然后在这个开始节点后边有许多按钮可以点击,我们选择下图中箭头所指的个人任务,然后便新建了一个任务节点,当然了,如果能学到自定义流程图这一步,我想大家应该已经对流程图的基础有一定了解了,起码在eclipse中画流程图应该已经没有问题,所以这里大家应该不难理解,否则的话,不如先用eclipse中的插件了解一下。

 


这样的话,依照上边的步骤我们就可以创建出如下图的流程图雏形,包含开始节点、两个任务节点,然后是结束节点:

 


那么接下来就是比较重要的了,开始进入自定义表单整合的环节。

在上图中可以看到右方我用箭头指了一个地方,attributes,顾名思义,就是属性,这里是可以点开的,假如大家能走到这一步来,就可以看到在不同情况下这里显示的不一样。

首先我们不选中任何节点,可以看到属性如下:

 


而我们选中开始节点和任务节点是属性又分别如下图1和图2:

 

 

图2:



但是不管是开始节点还是任务节点,都有Formkey这个属性,在这里我们就可以指定每个节点需要使用的自定义表单文件的名称,通常是xxx.form的形式。指定好formkey以后就可以点击保存,也可以设置其他的属性,如任务中的assignment和name、key等等。

而这里的整个页面都不是自己写的,保存相关的方法也不是自己写的,只要数据库配置正确,activiti-modeler就会自动把这些数据保存到数据库中,模型创建完毕。

目录
相关文章
|
6月前
|
XML 缓存 数据格式
12activiti - 流程管理定义(设计流程定义文档)
12activiti - 流程管理定义(设计流程定义文档)
31 0
|
6月前
16activiti - 流程管理定义(查看流程图附件)
16activiti - 流程管理定义(查看流程图附件)
23 0
MMsegmentation教程 3:自定义数据流程
MMsegmentation教程 3:自定义数据流程
387 0
|
XML 数据格式
详细解析Activiti Modeler!工作流建模组件的使用说明
本篇文章对工作流Activiti中的建模组件Activiti Modeler的使用进行的详细的说明。Activiti Modeler主要负责对工作流的流程模型进行操作,包括编辑流程模型,导入流程模型,转换流程定义到流程模型,流程模型部署到Activiti的流程引擎。通过这篇文章的学习,可以帮助我们熟练的学会使用工作流建模组件Activiti Modeler。
1727 0
详细解析Activiti Modeler!工作流建模组件的使用说明
|
XML 网络协议 安全
Activiti中工作流的生命周期详细解析!一个BPMN流程示例带你认识项目中流程的生命周期
本文详细说明了在工作流Activiti框架中的BPMN流程定义整个运行的生命周期。介绍了BPMN流程工作的运行环境,从定义流程开始,首先介绍了BPMN流程的几个组成部分,包括用例,流程图,以及流程图的XML内容。然后开始启动一个流程,生成任务列表,然后到领取任务,完成任务后结束流程。
615 0
Activiti中工作流的生命周期详细解析!一个BPMN流程示例带你认识项目中流程的生命周期
|
前端开发
activiti 自定义任务事件扩展
最近工作上一直在用activiti作工作流,发现工作流程使用起来真的挺费劲的! 这不,业务需求有来有,用户希望在回复沟通时,能触发回复沟通事件,而用户通过该事件触发他的业务事件。
1685 0
Activiti新增的子流程
flowable和Activiti6新增了ad-hoc子流程(adHocSubProcess),即adHocSubProcess流程。该类型的子流程无需再子流程中为节点配置任何的出线: 操作方式如下: runtimeService.
2253 0
|
Android开发
Activiti自定义设计器
原文地址:www.shareniu.com/topic/content/40.htm Activiti自定义设计器 在使用Activiti的时候,需要绘制流程文档,可以使用Activiti提供的Eclipse插件或者idea插件,抑或使用Web版的流程设计器,但是这些设计器不能很好的满足业务开发需求,因此通常情况下,在实现自己业务的同时,期望自己设计一套流程设计器,从而更加灵活的应对需求的变更和量身定制自己的Activiti设计器。
1374 0
activiti自定义流程之整合(四):整合自定义表单部署流程定义
综合前几篇博文内容,我想在整合这一部分中应该会有很多模块会跳过不讲,就如自定义表单的表单列表那一块,因为这些模块在整合的过程中都几乎没有什么改动,再多讲也是重复无用功。<br><br><br> 正因为如此,在创建了流程模型之后,模型列表的展示也是和之前的没有什么区别,而且都是很简单的后台查询以及前台展示,这一部分也就不过多的讲了。<br><br><br><p>模型列表页面如下:</p>
4388 0
|
JSON JavaScript 数据格式
activiti自定义流程之整合(七):完成我的申请任务
在上一篇的获得我的申请中,可以看到js代码中还包含了预览和完成任务的代码,既然上一篇已经罗列了相关代码,这里也就不重复。   那么需要补充的是,在上边的完成任务的js代码中,我们还调用了getTaskForm请求,目的是从后台获取提交任务时的其他数据,例如指定下一个处理人等,当然了,根据不同的业务逻辑可能有所变化。   那么这个请求对应的后台代码如下,如果弄明白了整个数据库的设计,
2386 0

热门文章

最新文章