Activiti集成Modeler(使用Jfinal)(不用SpringMvc,不用Spring)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

整合好的代码在这里

https://gitee.com/glorylion/JFinalOA

 

Modeler是在线流程编辑器

Diagram Viewer是流程跟踪的插件

 

最近学习使用Activiti.

网上的还有咖啡兔子的基本都是基于Spring的方法.

网上搜了很多,找了很多之后最后整合进项目当中,发现并没有想象中的复杂.

我们使用的项目是整合了Jfinal 的框架,之前介绍过不使用Spring的方法集成Activiti.

在此基础上本文介绍,不使用Spring MVC的方法集成Modeler和Diagram Viewer

首先明确以下信息一步一步来.

1.Modeler高度依赖于Spring MVC.

2.Modeler的所有Controler都是使用SpringMVC做的映射关系,只需要将此处,全部改为Jfinal的Controller即可

3.Modeler所有的JS请求路径全部为Spring MVC的方式请求的,需要全部改为Jfinal的方式

4.Modeler使用了很多Jar包,需要一点点排错.

1.拷贝前台代码

下图所示为Activiti官网下载的activiti-5.19  里面为activiti需要的jar包explorer的war包

war下有activiti-explorer.war可以放到tomcat中运行.

下图为Activiti-master.可以在github中下载

Activiti-master为源码.

jar包里的所有源码都可以在这里看到.

有疑问的可以将source添加路径指向master这里,按住ctrl+左键点代码进来看源码.

Activiti集成Modeler(使用Jfinal)(不用SpringMvc,不用Spring)_第1张图片

Modeler在explorer2下,所需要拷贝的是这三个.

部分js需要修改.

自己项目中随意建立一个目录,将这三个文件考到项目中.

类似这样

2.拷贝后台需要的类

准备Activiti5.19  ,源码

activiti-diagram-rest-5.19.0.2.jar

activiti-modeler-5.19.0.2.jar

解释下

1.rest中主要是这几个类,必须修改的类是ProcessDefinitionDiagramLayoutResource.这个方法传入流程定义ID返回DiagramNode的Json数据

需要重写这些个类的SpringMVC地址

Activiti集成Modeler(使用Jfinal)(不用SpringMvc,不用Spring)_第2张图片

2.Modeler包中的主要是这个类,编辑器保存的时候,会调用这个类的方法,其中SpringMVC的地址需要修改,返回参数的方法需要修改

介绍完这两个JAR包,开始干活,这两个包没用,我们直接要他的源码

将rest和model包的源码全拷贝到项目中

rest包的源码在这个路径下

Activiti集成Modeler(使用Jfinal)(不用SpringMvc,不用Spring)_第3张图片

modeler中的源码在这个路径下

到项目中之后,可以如下,从上到下分别为modeler和rest的类

Activiti集成Modeler(使用Jfinal)(不用SpringMvc,不用Spring)_第4张图片

3.修改后台Controller地址

其中

ModelEditorJsonRestResource.javaModelSaveRestResource.java

是modeler用的控制器

ProcessInstanceHighlightsResource.java,ProcessInstanceDiagramLayoutResource.java,ProcessDefinitionDiagramLayoutResource.java

是diagram viewer流程跟踪器用的控制器

diagram viewer (流程跟踪)返回的数据必须是jsonp的方式获取的,需要添加callback返回callback方法(此项目使用的是jfinal没有用spring只能手动返回,如果使用spring可以直接在web.xml中配置)

 

改的比较多,就不一一介绍了,以一个为例

这个改为



package com.****.jbsf.workflow.rest;


import com.fasterxml.jackson.databind.node.ObjectNode;

public class ProcessDefinitionDiagramLayoutResource extends BaseProcessDefinitionDiagramLayoutResource  {

  public void getDiagram() {
	  String processDefinitionId = getPara("processDefinitionId");
	  String callback = getPara("callback").toString();
	  ObjectNode node = getDiagramNode(null, processDefinitionId);
	  renderJson(callback+"("+node.toString()+")");
  }
}

注意返回的Json格式必须是外面套用callback的方法,JsonP的使用方法请参考

http://my.oschina.net/glorylion/blog/478010

 

集成的父类BaseProcessDefinitionDiagramLayoutResource需要

public class BaseProcessDefinitionDiagramLayoutResource extends Controller{

其他所有的Controller全部去掉SpringMVC的地址

在Jfinal中注册,代码如下

@Override
	public void configRoute(Routes me) {
		***************省略其他路由**************
		me.add("/jf/process-instance/highlights",ProcessInstanceHighlightsResource.class);//modeler
		me.add("/jf/process-instance/diagram-layout",ProcessInstanceDiagramLayoutResource.class);//modeler
		me.add("/jf/process-definition/diagram-layout",ProcessDefinitionDiagramLayoutResource.class);//modeler
		me.add("/jf/model/save",ModelSaveRestResource.class);
		me.add("/jf/editor/stencilset",StencilsetRestResource.class);
		me.add("/jf/model/json",ModelEditorJsonRestResource.class);
	}

4.前台JS修改请求地址

主要修改的js是app-cfg.js,index.html和url-config.js,

app-cfg.js配置基本的地址

ACTIVITI.CONFIG = {
	'contextRoot' : '/项目名/jf',
};

其中index.html中代码,由于jfinal的的路由后面直接是方法名,直接加到最后面就可以

  ActivitiRest.options = {
    processInstanceHighLightsUrl: baseUrl + "/jf/process-instance/highlights/getHighlighted?processDefinitionId="+processDefinitionId+"&processInstanceId="+processInstanceId,
    processDefinitionUrl: baseUrl + "/jf/process-definition/diagram-layout/getDiagram?processDefinitionId="+processDefinitionId+"&processInstanceId="+processInstanceId,
    processDefinitionByKeyUrl: baseUrl + "/jf/process-definition/diagram-layout/getDiagram?processDefinitionId="+processDefinitionId+"&processInstanceId="+processInstanceId
  };

url-config.js

KISBPM.URL = {

    getModel: function(modelId) {
        return ACTIVITI.CONFIG.contextRoot + '/model/json/getEditorJson?modelId=' + modelId ;
    },

    getStencilSet: function() {
        return ACTIVITI.CONFIG.contextRoot + '/editor/stencilset/getStencilset?version=' + Date.now();
    },

    putModel: function(modelId) {
        return ACTIVITI.CONFIG.contextRoot + '/model/save/saveModel?modelId='+ modelId;
    }
};

5.一些注意的地方和错误,需要的jar包

1.common-lang必须3.3以上,有isempty方法.

2.batik的jar包都需要,我全整进去了

还有很多包,需要一点点整,所有jar包5.19里都有

3.其中保存的时候用到xml-apis-ext-1.3.04.jar,否则会报

Caused by: java.lang.ClassNotFoundException: org.w3c.dom.svg.SVGDocument

这个错误

4.Caused by: java.lang.ClassNotFoundException: math.geom2d.curve.AbstractContinuousCurve2D

少       javaGeom-0.11.1.jar

5.保存到时候,需要传递json-xml参数,不过那个方法是用的put方法请求的,jfinal的话,直接getpara("json-xml")取不到值

我直接把请求改成了post,就可以了.

6.有一个类会取stencilset.json,这个是汉化文件,从源码里考到项目里加载进去就可以了

 

eg:

http://www.xxxxx.com/processEditor/modeler.html?modelId=1

 

http://www.xxxxx.com/processEditor/diagram-viewer/index.html?processDefinitionId=1&processInstanceId=2

 

转载于:https://my.oschina.net/glorylion/blog/690528

你可能感兴趣的:(java,json,测试)